The script underneath will read out the SRM protection group and SRM Recovery Plan as well as other SRM information for each VM. You can then either export this as a csv or use them as tags in vCenter. The advantage is that you not only see those information directly in the VM summery but you also now can search for a SRM group and find all associated VMs.
#load VMware PowerCLi module
if ((Get-PSSnapin | where {$_.Name -ilike "VMware.VimAutomation.Core"}).Name -ine "VMware.VimAutomation.Core"){
Write-Host "Loading VMware PowerCli"
Add-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue
}
#define varibales
$ProtectedVM=@()
$RecoveryObj=@()
#basic connections
Write-Host "connecting vCenter"
#$VINCred=Get-Credential #interactive logon, renove comments from connect lines
$vcConnect=Connect-VIServer "myVC.mylab.local" #-Credential $VINCred
Write-Host "connecting SRM"
$srmConnect=Connect-SrmServer #-Credential $VINCred
try {
$SRMApi = $srmConnect.ExtensionData
#get all revovery plan and store
Write-Host "Build Recovery Object List" -NoNewline
foreach ($plan in $SRMApi.Recovery.ListPlans()){
$tempObj= New-Object PSObject -Property @{"moref"=($plan.moref.Value);"Name"=($plan.GetInfo().Name)}
$RecoveryObj += $tempObj
Write-Host "." -NoNewline
}
Write-Host "`n"
#get all protected VM (moref, potgroup and RecovPlan) and write to object
Write-Host "Getting VM infos"
foreach ($protGroup in $SRMApi.Protection.ListProtectionGroups()){
#get ProtGroup name
$protGroupName=$protGroup.GetInfo().Name
Write-Host "`nWorking on Protection Group: "+$protGroupName -NoNewline
#get PortGroup RecoveryPlan(s)
$recoveryplan=$protGroup.ListRecoveryPlans()
#A ProtectionGroup can belong to more then one RecoveryPlan
$TempPlanName=""
foreach($TempPlan in $recoveryplan){
#find Recovery and get the name
foreach ($test in $RecoveryObj) {
if ($TempPlan.moref.value -eq $test.moref){
$TempPlanName+=$test.Name
}
}
}
$recoveryPlanName=$TempPlanName -join ','
#get all proetced VMs
foreach ($protVM in $protGroup.ListProtectedVMs()){
$tempObj= New-Object PSObject -Property @{"VMmoref"=($protVM.Vm.MoRef);"ProtGroup"=$protGroupName;"RecoPlan"=$recoveryPlanName;"State"=($protVM.State);"NeedConfig"=($protVM.NeedsConfiguration);"Faults"=($protVM.Faults)}
$ProtectedVM+=$tempObj
Write-Host "." -NoNewline
}
}#end of get VMs
Write-Host "`n"
#check if Tag Categories Exist, if not create
if ((Get-TagCategory -Name 'SRMPrortectionGroup' -ErrorAction:SilentlyContinue) -eq $null){
Write-Host "Creating Tag Category SRMPortectionGroup"
New-TagCategory "SRMPrortectionGroup" -Cardinality "Single" -EntityType VirtualMachine -Confirm:$false
}
if ((Get-TagCategory -Name 'SRMRecoveryPlan' -ErrorAction:SilentlyContinue) -eq $null){
Write-Host "Creating Tag Category SRMRecoveryPlan"
New-TagCategory "SRMRecoveryPlan" -Cardinality "Single" -EntityType VirtualMachine -Confirm:$false
}
#loading TagCategories
$TC_SRMGroup=Get-TagCategory -Name 'SRMPrortectionGroup'
$TC_SRMPlan=Get-TagCategory -Name 'SRMRecoveryPlan'
#Tagging Protected VMs
Write-Host "Assigning tags" -NoNewline
foreach ($vmObj in $ProtectedVM) {
#get VMObject from Moref
$VM=Get-VIObjectByVIView -MORef ($vmObj.VMmoref)
#Check if Protection group tag exists
if ((Get-Tag -Name ($vmObj.ProtGroup) -Category $TC_SRMGroup -ErrorAction:SilentlyContinue) -eq $null){
Write-Host ("Creating Tag {0}" -f ($vmObj.ProtGroup))
New-Tag -Name ($vmObj.ProtGroup) -Category $TC_SRMGroup -Confirm:$false
}
#assign Protection group tag
$vm|New-TagAssignment -Tag (Get-Tag -Name ($vmObj.ProtGroup)) -Confirm:$false
#Check if Protection group tag exists
if ((Get-Tag -Name ($vmObj.RecoPlan) -Category $TC_SRMPlan -ErrorAction:SilentlyContinue) -eq $null){
Write-Host ("Creating Tag {0}" -f ($vmObj.ProtGroup))
New-Tag -Name ($vmObj.RecoPlan) -Category $TC_SRMPlan -Confirm:$false
}
#assign Recovery plan tag
$vm|New-TagAssignment -Tag (Get-Tag -Name ($vmObj.RecoPlan)) -Confirm:$false
}#end of Tagging
# Write-Host "Exporting VM info"
# $ProtectedVM|select-Object VMmoref,ProtGroup,RecoPlan,State,NeedConfig | Sort-Object -Property VMmoref|Export-Csv -Path d:\tmp\Protvms.csv
} #end of try
Catch {
Write-Host $_.Exception.Message -ForegroundColor Red
}
Finally{
Write-Host "Disconnecting vCenter"
Disconnect-SrmServer $srmConnect -Confirm:$false -Force:$true
Write-Host "Disconnecting SRM"
Disconnect-VIServer $vcConnect -Confirm:$false -Force:$true
}