PowerShell/VMware/drsgroups.ps1
2025-02-19 17:54:55 +00:00

78 lines
3.1 KiB
PowerShell

$cr = "`r`n"
$tab = "`t"
$daytime = Get-Date -format dd_MM_yyyy_hh_mm
Write-Host $daytime
$Filename = "c:\temp\DRS Rules_" + "_" + $daytime + ".txt"
Write-Host $Filename
Write-Host "..Connecting to Server"
connect-viserver -Server "vmware.asl.local"
$ClusterList = Get-Cluster | Sort Name
foreach ($cluster in $ClusterList) {
$clusterName = $cluster.Name
$rules = get-cluster -Name $clusterName | Get-DrsRule -Type VMAntiAffinity
foreach($rule in $rules){
$line = ("Cluster: " + $clusterName + $cr)
$line += ("Rule: " + $rule.Name + " - AntiAffinity" + $cr)
Write-Host ("Cluster: " + $clusterName)
Write-Host ("Rule: " + $rule.Name + " - AntiAffinity")
foreach($vmId in $rule.VMIds){
$line += ($tab + (Get-View -Id $vmId).Name + $cr)
}
$line | Out-File -Append $Filename
Write-Host $cr
}
$rules = get-cluster -Name $clusterName | Get-DrsRule -Type VMAffinity
foreach($rule in $rules){
$line = ("Cluster: " + $clusterName + $cr)
$line += ("Rule: " + $rule.Name + " - Affinity" + $cr)
Write-Host ("Cluster: " + $clusterName)
Write-Host ("Rule: " + $rule.Name + " - AntiAffinity" + $cr)
foreach($vmId in $rule.VMIds){
$line += ($tab + (Get-View -Id $vmId).Name + $cr)
}
$line | Out-File -Append $Filename
Write-Host $cr
}
$clusterView = get-cluster -Name $clusterName | Get-View
$clusterConfig = $clusterView.Configuration
$clusterConfigEx = $clusterView.ConfigurationEx
$clusterConfigExGroup = $clusterConfigEx.Group
$rules = $clusterConfigEx.Rule
foreach($rule in $rules){
if ($rule -is [VMware.Vim.ClusterVmHostRuleInfo]) {
$line = $cr
$line = ("Cluster: " + $clusterName + $cr)
Write-Host ("Cluster: " + $clusterName)
Write-Host ("Rule: " + $rule.Name + " - AntiAffinity")
$line += ("Rule: " + $rule.Name + $cr)
if ($rule.Mandatory) {
$temp = "Must "
} else {
$temp = "Should "
}
if ($rule.AffineHostGroupName -ne $null) {
$hostGroupName = $rule.AffineHostGroupName
Write-Host ("Policy: " + $temp + "run on hosts in group.")
$line += ("Policy: " + $temp + "run on hosts in group." + $cr)
} else {
$hostGroupName = $rule.AntiAffineHostGroupName
Write-Host ("Policy: " + $temp + "not run on hosts in group.")
$line += ("Policy: " + $temp + "not run on hosts in group." + $cr)
}
$vmGroupName = $rule.VmGroupName
Write-Host ("VM Group: " + $vmGroupName)
$line += ("VM Group: " + $vmGroupName + $cr)
$vmGroupMembers = (Get-View -Property Name -Id ($clusterConfigExGroup | ?{($_ -is [VMware.Vim.ClusterVmGroup]) -and ($_.Name -eq $vmGroupName)}).Vm | %{$_.Name}) -join ($cr + $tab)
$line += ($tab + $vmGroupMembers + $cr)
Write-Host ("Host Group: " + $hostGroupName)
$line += ("Host Group: " + $hostGroupName + $cr)
$hostGroupmembers = (Get-View -Property Name -Id ($clusterConfigExGroup| ?{($_ -is [VMware.Vim.ClusterHostGroup]) -and ($_.Name -eq $hostGroupName)}).Host | %{$_.Name}) -join ($cr + $tab)
$line += ($tab + $hostGroupmembers + $cr)
$line | Out-File -Append $Filename
Write-Host $cr
}
}
}