function Import-ITDVMwareSRMExport { [CmdletBinding()] Param ( [string] $Path ) begin { } process { [xml]$Global:SrmXml = Get-Content -Path $Path } end { } } function Get-ITDVMwareSRMDatacenter { [CmdletBinding(DefaultParameterSetName = 'Default')] param ( [Parameter(ParameterSetName = 'Id')] [string[]] $Id, [Parameter(ParameterSetName = 'Name')] [string[]] $Name ) begin { } process { switch ($PsCmdlet.ParameterSetName) { 'Id' { ForEach ($i in $Id) { ((($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter | Where-Object id -EQ $i) } } 'Name' { ForEach ($n in $Name) { ((($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter | Where-Object name -Like "*$n*") } } 'Default' { ((($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter ) } } } end { } } function Get-ITDVMwareSRMVMFolder { [CmdletBinding(DefaultParameterSetName = 'Default')] param ( [Parameter(ParameterSetName = 'Id')] [string[]] $Id, [Parameter(ParameterSetName = 'Name')] [string[]] $Name ) begin { } process { $VMInventoryFolders = (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.vmFolder.InventoryFolder + (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.vmFolder.InventoryFolder.InventoryFolder switch ($PsCmdlet.ParameterSetName) { 'Id' { ForEach ($i in $Id) { $VMInventoryFolders | Where-Object id -Like "*$i*" } } 'Name' { ForEach ($n in $Name) { $VMInventoryFolders | Where-Object name -Like "*$n*" } } 'Default' { $VMInventoryFolders } } } end { } } function Get-ITDVMwareSRMHostFolder { [CmdletBinding(DefaultParameterSetName = 'Default')] param ( [Parameter(ParameterSetName = 'Id')] [string[]] $Id, [Parameter(ParameterSetName = 'Name')] [string[]] $Name ) begin { } process { switch ($PsCmdlet.ParameterSetName) { 'Id' { Foreach ($i in $Id) { (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.hostFolder | Where-Object id -EQ $i } } 'Name' { Foreach ($i in $Id) { (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.hostFolder | Where-Object name -Like "*$n*" } } 'Default' { (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.hostFolder } } } end { } } function Get-ITDVMwareSRMComputeResource { [CmdletBinding(DefaultParameterSetName = 'Default')] param ( [Parameter(ParameterSetName = 'Id')] [string[]] $Id, [Parameter(ParameterSetName = 'ResPoolId')] [string[]] $ResPoolId, [Parameter(ParameterSetName = 'Name')] [string[]] $Name ) begin { } process { switch ($PsCmdlet.ParameterSetName) { 'Id' { ForEach ($i in $Id) { (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.hostFolder.ComputeResource | Where-Object { $_.id -like "*$i*" } } } 'ResPoolId' { ForEach ($i in $ResPoolId) { (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.hostFolder.ComputeResource | Where-Object { $_.resourcepool.id -like "*$i*" } } } 'Name' { If ($Name) { ForEach ($n in $Name) { (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.hostFolder.ComputeResource | Where-Object { $_.name -like "*$n*" } } } Else { (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.hostFolder.ComputeResource } } 'Default' { (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.hostFolder.ComputeResource } } } end { } } function Get-ITDVMwareSRMVMHost { [CmdletBinding(DefaultParameterSetName = 'Default')] param ( [Parameter(ParameterSetName = 'Id')] [string[]] $Id, [Parameter(ParameterSetName = 'Name')] [string[]] $Name ) begin { } process { switch ($PsCmdlet.ParameterSetName) { 'Id' { ForEach ($i in $Id) { (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.hostFolder.ComputeResource.hosts | Where-Object { $_.id -like "*$i*" } } } 'Name' { ForEach ($n in $Name) { (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.hostFolder.ComputeResource.hosts | Where-Object { $_.name -like "*$n*" } } } 'Default' { (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.hostFolder.ComputeResource.hosts } } } end { } } function Get-ITDVMwareSRMDatastore { [CmdletBinding(DefaultParameterSetName = 'Default')] param ( [Parameter(ParameterSetName = 'Id')] [string[]] $Id, [Parameter(ParameterSetName = 'Name')] [string[]] $Name ) begin { } process { switch ($PsCmdlet.ParameterSetName) { 'Id' { ForEach ($i in $Id) { (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.datastore | Where-Object id -Like "*$i*" } } 'Name' { ForEach ($n in $Name) { (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.datastore | Where-Object { $_.name -like "*$n*" } } } 'Default' { (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.datastore } } } end { } } function Get-ITDVMwareSRMNetwork { [CmdletBinding(DefaultParameterSetName = 'Default')] param ( [Parameter(ParameterSetName = 'Id')] [string[]] $Id, [Parameter(ParameterSetName = 'Name')] [string[]] $Name ) begin { } process { $dvportgrouplist = (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.NetworkFolder.InventoryFolder.DistributedVirtualPortgroup switch ($PsCmdlet.ParameterSetName) { 'Id' { ForEach ($i in $Id) { #(($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.NetworkFolder.InventoryFolder.DistributedVirtualPortgroup | Where-Object { $_.id -eq "*$i*" } $dvportgrouplist | where-object id -eq $i } } 'Name' { ForEach ($n in $Name) { #(($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.NetworkFolder.InventoryFolder.DistributedVirtualPortgroup | Where-Object { $_.name -eq "*$n*" } $dvportgrouplist | where-object name -eq $n } } 'Default' { $dvportgrouplist } } } end { } } function Get-ITDVMwareSRMVM { [CmdletBinding(DefaultParameterSetName = 'Default')] param ( [Parameter(ParameterSetName = 'Id')] [string[]] $Id, [Parameter(ParameterSetName = 'Name')] [string[]] $Name ) begin { } process { $VMInventory = (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.vmFolder.InventoryFolder.VirtualMachine + (($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ Inventory).Attributes.InventoryTree).root.datacenter.vmFolder.InventoryFolder.InventoryFolder.VirtualMachine switch ($PsCmdlet.ParameterSetName) { 'Id' { ForEach ($i in $Id) { $VMInventory | Where-Object { $_.id -like "*$i*" } } } 'Name' { ForEach ($n in $Name) { $VMInventory | Where-Object { $_.name -like "*$n*" } } } <#'Default' { $VMInventory }#> } } end { } } function Get-ITDVMwareSRMProtectionGroup { [CmdletBinding(DefaultParameterSetName = 'Default')] param ( [Parameter(ParameterSetName = 'Id')] [string[]] $Id, [Parameter(ParameterSetName = 'Name')] [string[]] $Name, [switch] $Detailed, [ValidateScript( { $Detailed -eq $true })] [switch] $Formatted ) begin { } process { $ProtectionGroups = ($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ "ProtectionGroups").Attributes.Folder.vmProtectionGroup switch ($PsCmdlet.ParameterSetName) { 'Id' { $ProtectionGroupsSearch = $Id | ForEach-Object { $ProtectionGroups | Where-Object Id -Like "*$_*" } } 'Name' { $ProtectionGroupsSearch = $Name | ForEach-Object { $ProtectionGroups | Where-Object Name -Like "*$_*" } } 'Default' { $ProtectionGroupsSearch = $ProtectionGroups } } $AllVrDatastores = Get-ChildItem -Path "vmstores:\itdvmvc2.nd.gov@443\Secondary Datacenter\" | Where-Object Name -Like "*_VR*" $VrFolders = $AllVrDatastores | Get-ChildItem | Where-Object ItemType -EQ "Folder" If ($Detailed) { $DetailedResult = [System.Collections.ArrayList]@() ForEach ($ProtectionGroup in $ProtectionGroupsSearch) { Write-Warning -Message ("Start Protection Group Loop for " + $ProtectionGroup.Name.TrimStart().TrimEnd() ) $AbrDatastores = $null If ($ProtectionGroup.datastores) { $AbrDatastores = Get-ITDVMwareSRMDatastore -Id ($ProtectionGroup.datastores | select -Unique).TrimStart().TrimEnd() } Else { $AbrDatastores = $null } $VMs = (Get-ITDVMwareSRMVM -Id ($ProtectionGroup.ProtectionProperties.id)).Name $VrDatastores = [System.Collections.ArrayList]@() ForEach ($VM in $VMs) { $null = $VRDatastores.add( ($VRFolders | Where-Object Name -Like "$VM*").Datastore) } $VrDatastores = $VRDatastores | Select-Object -Unique Name $PGobj = [PSCustomObject]@{ Name = $ProtectionGroup.Name.TrimStart().TrimEnd(); ReplicationType = $ProtectionGroup.ReplicationProviderType.TrimStart().TrimEnd(); ArrayPairKey = ( $ProtectionGroup.arrayPairKey | ForEach-Object { If ($_.GetType().Name -eq 'String') { $_.TrimStart().TrimEnd() } } | Select-Object -Unique ) Folder = ( Get-ITDVMwareSRMVMFolder -Id ($ProtectionGroup.ProtectionProperties.folder | select -Unique).TrimStart().TrimEnd() ).Name.TrimStart().TrimEnd(); ResourceGroup = ( Get-ITDVMwareSRMComputeResource -ResPoolId ($ProtectionGroup.ProtectionProperties.resourceGroup | select -Unique).TrimStart().TrimEnd() ).Name.TrimStart().TrimEnd(); Network = ( Get-ITDVMwareSRMNetwork -Id ($ProtectionGroup.ProtectionProperties.RecoveryLocationSettings.DeviceInfo.NetworkDeviceBacking.network | select -Unique).TrimStart().TrimEnd() ).Name.TrimStart().TrimEnd(); AbrDatastores = If ($AbrDatastores -ne $null) { ($AbrDatastores.name.TrimStart().TrimEnd() ) }; VrDatastores = $VrDatastores.Name | Select-Object -Unique VM = ( Get-ITDVMwareSRMVM -Id ($ProtectionGroup.ProtectionProperties.id.TrimStart().TrimEnd()) ).Name.TrimStart().TrimEnd(); } $null = $DetailedResult.add($PGobj) } If ($Formatted) { $FormattedResult = $DetailedResult | select Name, ReplicationType, ArrayPairKey, ` @{n = 'Folder'; e = { ($_.Folder | Sort-Object | Out-String).TrimEnd() } }, ` @{n = "ResourceGroup"; e = { ($_.ResourceGroup | Sort-Object | Out-String).TrimEnd() } }, ` @{n = "Network"; e = { ($_.Network | Sort-Object | Out-String).TrimEnd() } }, ` @{n = 'AbrDatastores'; e = { ($_.AbrDatastores | Sort-Object | Out-String).TrimEnd() } }, ` @{n = 'VrDatastores'; e = { ($_.VrDatastores | Sort-Object | Out-String).TrimEnd() } }, ` @{n = 'VM'; e = { ($_.VM | Sort-Object | Out-String).TrimEnd() } } } } } end { switch ($PsCmdlet.ParameterSetName) { 'Id' { If ($Detailed) { If ($Formatted) { Write-Output $FormattedResult } else { Write-Output $DetailedResult } } Else { Write-Output $ProtectionGroupsSearch } } 'Name' { If ($Detailed) { If ($Formatted) { Write-Output $FormattedResult } else { Write-Output $DetailedResult } } Else { Write-Output $ProtectionGroupsSearch } } 'Default' { If ($Detailed) { If ($Formatted) { Write-Output $FormattedResult } else { Write-Output $DetailedResult } } Else { Write-Output $ProtectionGroups } } } } } function Get-ITDVMwareSRMVMSettings { [CmdletBinding(DefaultParameterSetName = 'Default')] param ( [Parameter(ParameterSetName = 'Id')] [string[]] $Id, [CmdletBinding(DefaultParameterSetName = 'Default')] [switch] $Detailed ) begin { } process { switch ($PsCmdlet.ParameterSetName) { 'Id' { $VMSettingsSearch = $Id | ForEach-Object { ($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ VMSettings).Attributes.VMSettings | Where-Object Id -Like "*$_*" } } 'Default' { $VMSettingsSearch = ($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ VMSettings).Attributes.VMSettings } } If ($Detailed) { $DetailedResult = [System.Collections.ArrayList]@() ForEach ($VMSetting in $VMSettingsSearch) { $VMSettingObj = [PSCustomObject]@{ Id = $VMSetting.id.TrimStart().TrimEnd(); Name = (Get-ITDVMwareSRMVM -Id $VMSetting.Id.TrimStart().TrimEnd()).Name.TrimStart().TrimEnd(); #recoveryPriority = $VMSetting.recoveryPriority; recoveryPriorityGui = switch ($VMSetting.recoveryPriority.TrimStart().TrimEnd()) { 25 { 1 } 40 { 2 } 50 { 3 } 60 { 4 } 75 { 5 } } } $null = $DetailedResult.add($VMSettingObj) } } } end { If ($Detailed) { Write-Output $DetailedResult } Else { $VMSettingsSearch } } } function Get-ITDVMwareSRMRecoveryPlan { [CmdletBinding()] param ( [string[]] $Name, [switch] $Formatted ) begin { } process { $RecoveryPlans = ($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ RecoveryPlans).Attributes.Folder.RecoveryPlan If ($Name) { $RecoveryPlansSearch = $Name | ForEach-Object { $RecoveryPlans | Where-Object name -Like "*$_*" } } else { $RecoveryPlansSearch = $RecoveryPlans } $DetailedResult = [System.Collections.ArrayList]@() ForEach ($RecoveryPlan in $RecoveryPlansSearch) { Write-Warning -Message ("Start Recovery Plan Loop for " + $RecoveryPlan.Name.TrimStart().TrimEnd() ) $ProtectionGroupDetailed = Get-ITDVMwareSRMProtectionGroup -Id $RecoveryPlan.protectionGroups.TrimStart().TrimEnd() -Detailed $AbrDatastores = $ProtectionGroupDetailed.AbrDatastores | Select-Object -Unique | Sort-Object $VrDatastores = $ProtectionGroupDetailed.VrDatastores | Select-Object -Unique | Sort-Object $Network = $ProtectionGroupDetailed.Network | Select-Object -Unique | Sort-Object $VMSettings = Get-ITDVMwareSRMVMSettings -Id (Get-ITDVMwareSRMVM -Name $ProtectionGroupDetailed.VM).Id.TrimStart().TrimEnd() -Detailed If ($RecoveryPlan.Callouts) { $Callouts = [System.Collections.ArrayList]@() $RecoveryPlan.Callouts.CalloutSpec | ForEach-Object { } } $RPobj = [PSCustomObject]@{ Name = $RecoveryPlan.Name.TrimStart().TrimEnd(); ProtectionGroups = $ProtectionGroupDetailed.Name | Sort-Object; Network = $Network; AbrDatastores = $AbrDatastores; VrDatastores = $VrDatastores; BeforePriority1 = ($RecoveryPlan.Callouts.CallOutSpec | Where-Object position -EQ 'beforeRecoverPriority1Vms').RecoveryPrompt | select promptText, Description Priority1VMs = ($VMSettings | Where-Object recoveryPriorityGui -EQ 1).Name; BeforePriority2 = ($RecoveryPlan.Callouts.CallOutSpec | Where-Object position -EQ 'beforeRecoverPriority2Vms').RecoveryPrompt | select promptText, Description Priority2VMs = ($VMSettings | Where-Object recoveryPriorityGui -EQ 2).Name; BeforePriority3 = ($RecoveryPlan.Callouts.CallOutSpec | Where-Object position -EQ 'beforeRecoverPriority3Vms').RecoveryPrompt | select promptText, Description Priority3VMs = ($VMSettings | Where-Object recoveryPriorityGui -EQ 3).Name; BeforePriority4 = ($RecoveryPlan.Callouts.CallOutSpec | Where-Object position -EQ 'beforeRecoverPriority4Vms').RecoveryPrompt | select promptText, Description Priority4VMs = ($VMSettings | Where-Object recoveryPriorityGui -EQ 4).Name; BeforePriority5 = ($RecoveryPlan.Callouts.CallOutSpec | Where-Object position -EQ 'beforeRecoverPriority5Vms').RecoveryPrompt | select promptText, Description Priority5VMs = ($VMSettings | Where-Object recoveryPriorityGui -EQ 5).Name; } $null = $DetailedResult.Add($RPobj) } If ($Formatted) { $FormattedResult = $DetailedResult | select Name, ` @{n = 'ProtectionGroups'; e = { ($_.ProtectionGroups | Sort-Object | Out-String).TrimEnd() } }, ` @{n = 'Network'; e = { ($_.Network | Sort-Object | Out-String).TrimEnd() } }, ` @{n = 'AbrDatastores'; e = { ($_.AbrDatastores | Sort-Object | Out-String).TrimEnd() } }, ` @{n = 'VrDatastores'; e = { ($_.VrDatastores | Sort-Object | Out-String).TrimEnd() } }, ` @{n = 'BeforePriority1'; e = { $_.BeforePriority1 | Out-String } }, ` @{n = 'Priority1VMs'; e = { ($_.Priority1VMs | Sort-Object | Out-String).TrimEnd() } }, ` @{n = 'BeforePriority2'; e = { $_.BeforePriority2 | Out-String } }, ` @{n = 'Priority2VMs'; e = { ($_.Priority2VMs | Sort-Object | Out-String).TrimEnd() } }, ` @{n = 'BeforePriority3'; e = { $_.BeforePriority3 | Out-String } }, ` @{n = 'Priority3VMs'; e = { ($_.Priority3VMs | Sort-Object | Out-String).TrimEnd() } }, ` @{n = 'BeforePriority4'; e = { $_.BeforePriority4 | Out-String } }, ` @{n = 'Priority4VMs'; e = { ($_.Priority4VMs | Sort-Object | Out-String).TrimEnd() } }, ` @{n = 'BeforePriority5'; e = { $_.BeforePriority5 | Out-String } }, ` @{n = 'Priority5VMs'; e = { ($_.Priority5VMs | Sort-Object | Out-String).TrimEnd() } } } } end { If ($Formatted) { Write-Output $FormattedResult } Else { Write-Output $DetailedResult } } } function Get-ITDVMwareSRMMasterPlan { [CmdletBinding()] param ( ) begin { $RecoveryPlans = ($Global:SrmXml.configurablesWrapper.data.object | Where-Object Type -EQ RecoveryPlans).Attributes.Folder.RecoveryPlan } process { } end { } }