As part of the VMware open source program, we have to update this repository with the correct license and copyright information. We add the BSD-2 Clause License for this repository. We mark all source code provided by VMware with the Copyright notice under BSD-2 Clause license. * Update repository license to BSD 2-Clause License * Update Copyright
177 lines
7.0 KiB
PowerShell
177 lines
7.0 KiB
PowerShell
<#
|
|
Copyright 2017-2021 VMware, Inc.
|
|
SPDX-License-Identifier: Apache-2.0
|
|
#>
|
|
<#
|
|
Copyright 2021 VMware, Inc.
|
|
SPDX-License-Identifier: BSD-2-Clause
|
|
#>
|
|
|
|
# Depends on SRM Helper Methods - https://github.com/benmeadowcroft/SRM-Cmdlets
|
|
# It is assumed that the connection to VC and SRM Server have already been made
|
|
|
|
Function Get-SrmConfigReportSite {
|
|
Param(
|
|
[VMware.VimAutomation.Srm.Types.V1.SrmServer] $SrmServer
|
|
)
|
|
|
|
Get-SrmServer $SrmServer |
|
|
Format-Table -Wrap -AutoSize @{Label="SRM Site Name"; Expression={$_.ExtensionData.GetSiteName()} },
|
|
@{Label="SRM Host"; Expression={$_.Name} },
|
|
@{Label="SRM Port"; Expression={$_.Port} },
|
|
@{Label="Version"; Expression={$_.Version} },
|
|
@{Label="Build"; Expression={$_.Build} },
|
|
@{Label="SRM Peer Site Name"; Expression={$_.ExtensionData.GetPairedSite().Name} }
|
|
}
|
|
|
|
Function Get-SrmConfigReportPlan {
|
|
Param(
|
|
[VMware.VimAutomation.Srm.Types.V1.SrmServer] $SrmServer
|
|
)
|
|
|
|
Get-SrmRecoveryPlan -SrmServer $SrmServer | %{
|
|
$rp = $_
|
|
$rpinfo = $rp.GetInfo()
|
|
$peerState = $rp.GetPeer().State
|
|
$pgs = Get-SrmProtectionGroup -RecoveryPlan $rp
|
|
$pgnames = $pgs | %{ $_.GetInfo().Name }
|
|
|
|
$output = "" | select plan, state, peerState, groups
|
|
$output.plan = $rpinfo.Name
|
|
$output.state = $rpinfo.State
|
|
$output.peerState = $peerState
|
|
if ($pgnames) {
|
|
$output.groups = [string]::Join(",`r`n", $pgnames)
|
|
} else {
|
|
$output.groups = "NONE"
|
|
}
|
|
|
|
$output
|
|
} | Format-Table -Wrap -AutoSize @{Label="Recovery Plan Name"; Expression={$_.plan} },
|
|
@{Label="Recovery State"; Expression={$_.state} },
|
|
@{Label="Peer Recovery State"; Expression={$_.peerState} },
|
|
@{Label="Protection Groups"; Expression={$_.groups}}
|
|
}
|
|
|
|
|
|
Function Get-SrmConfigReportProtectionGroup {
|
|
Param(
|
|
[VMware.VimAutomation.Srm.Types.V1.SrmServer] $SrmServer
|
|
)
|
|
|
|
Get-SrmProtectionGroup -SrmServer $SrmServer | %{
|
|
$pg = $_
|
|
$pginfo = $pg.GetInfo()
|
|
$pgstate = $pg.GetProtectionState()
|
|
$peerState = $pg.GetPeer().State
|
|
$rps = Get-SrmRecoveryPlan -ProtectionGroup $pg
|
|
$rpnames = $rps | %{ $_.GetInfo().Name }
|
|
|
|
$output = "" | select name, type, state, peerState, plans
|
|
$output.name = $pginfo.Name
|
|
$output.type = $pginfo.Type
|
|
$output.state = $pgstate
|
|
$output.peerState = $peerState
|
|
if ($rpnames) {
|
|
$output.plans = [string]::Join(",`r`n", $rpnames)
|
|
} else {
|
|
$output.plans = "NONE"
|
|
}
|
|
|
|
$output
|
|
} | Format-Table -Wrap -AutoSize @{Label="Protection Group Name"; Expression={$_.name} },
|
|
@{Label="Type"; Expression={$_.type} },
|
|
@{Label="Protection State"; Expression={$_.state} },
|
|
@{Label="Peer Protection State"; Expression={$_.peerState} },
|
|
@{Label="Recovery Plans"; Expression={$_.plans} }
|
|
}
|
|
|
|
|
|
Function Get-SrmConfigReportProtectedDatastore {
|
|
Param(
|
|
[VMware.VimAutomation.Srm.Types.V1.SrmServer] $SrmServer
|
|
)
|
|
|
|
Get-SrmProtectionGroup -SrmServer $SrmServer -Type "san" | %{
|
|
$pg = $_
|
|
$pginfo = $pg.GetInfo()
|
|
$pds = Get-SrmProtectedDatastore -ProtectionGroup $pg
|
|
$pds | %{
|
|
$pd = $_
|
|
$output = "" | select datacenter, group, name, capacity, free
|
|
$output.datacenter = $pd.Datacenter.Name
|
|
$output.group = $pginfo.Name
|
|
$output.name = $pd.Name
|
|
$output.capacity = $pd.CapacityGB
|
|
$output.free = $pd.FreeSpaceGB
|
|
|
|
$output
|
|
|
|
}
|
|
} | Format-Table -Wrap -AutoSize -GroupBy "datacenter" @{Label="Datastore Name"; Expression={$_.name} },
|
|
@{Label="Capacity GB"; Expression={$_.capacity} },
|
|
@{Label="Free GB"; Expression={$_.free} },
|
|
@{Label="Protection Group"; Expression={$_.group} }
|
|
}
|
|
|
|
|
|
Function Get-SrmConfigReportProtectedVm {
|
|
Param(
|
|
[VMware.VimAutomation.Srm.Types.V1.SrmServer] $SrmServer
|
|
)
|
|
|
|
$srmversion = Get-SrmServerVersion -SrmServer $SrmServer
|
|
$srmMajorVersion, $srmMinorVersion = $srmversion -split "\."
|
|
|
|
Get-SrmProtectionGroup -SrmServer $SrmServer | %{
|
|
$pg = $_
|
|
$pginfo = $pg.GetInfo()
|
|
$pvms = Get-SrmProtectedVM -ProtectionGroup $pg
|
|
$rps = Get-SrmRecoveryPlan -ProtectionGroup $pg
|
|
$rpnames = $rps | %{ $_.GetInfo().Name }
|
|
$pvms | %{
|
|
$pvm = $_
|
|
if ($srmMajorVersion -ge 6 -or ($srmMajorVersion -eq 5 -and $srmMinorVersion -eq 8)) {
|
|
$rs = $rps | Select -First 1 | %{ $_.GetRecoverySettings($pvm.Vm.MoRef) }
|
|
}
|
|
$output = "" | select group, name, moRef, needsConfiguration, state, plans, priority, finalPowerState, preCallouts, postCallouts
|
|
$output.group = $pginfo.Name
|
|
$output.name = $pvm.Vm.Name
|
|
$output.moRef = $pvm.Vm.MoRef # this is necessary in case we can't retrieve the name when VC is unavailable
|
|
$output.needsConfiguration = $pvm.NeedsConfiguration
|
|
$output.state = $pvm.State
|
|
$output.plans = [string]::Join(",`r`n", $rpnames)
|
|
if ($rs) {
|
|
$output.priority = $rs.RecoveryPriority
|
|
$output.finalPowerState = $rs.FinalPowerState
|
|
$output.preCallouts = $rs.PrePowerOnCallouts.Count
|
|
$output.postCallouts = $rs.PostPowerOnCallouts.Count
|
|
}
|
|
$output
|
|
|
|
}
|
|
} | Format-Table -Wrap -AutoSize @{Label="VM Name"; Expression={$_.name} },
|
|
@{Label="VM MoRef"; Expression={$_.moRef} },
|
|
@{Label="Needs Config"; Expression={$_.needsConfiguration} },
|
|
@{Label="VM Protection State"; Expression={$_.state} },
|
|
@{Label="Protection Group"; Expression={$_.group} },
|
|
@{Label="Recovery Plans"; Expression={$_.plans} },
|
|
@{Label="Recovery Priority"; Expression={$_.priority} },
|
|
@{Label="Final Power State"; Expression={$_.finalPowerState} },
|
|
@{Label="Pre-PowerOn Callouts"; Expression={$_.preCallouts} },
|
|
@{Label="Post-PowerOn Callouts"; Expression={$_.postCallouts} }
|
|
|
|
}
|
|
|
|
Function Get-SrmConfigReport {
|
|
Param(
|
|
[VMware.VimAutomation.Srm.Types.V1.SrmServer] $SrmServer
|
|
)
|
|
|
|
Get-SrmConfigReportSite -SrmServer $SrmServer
|
|
Get-SrmConfigReportPlan -SrmServer $SrmServer
|
|
Get-SrmConfigReportProtectionGroup -SrmServer $SrmServer
|
|
Get-SrmConfigReportProtectedDatastore -SrmServer $SrmServer
|
|
Get-SrmConfigReportProtectedVm -SrmServer $SrmServer
|
|
}
|