diff --git a/VMware/drsgroups.ps1 b/VMware/drsgroups.ps1 new file mode 100644 index 0000000..51f0bc0 --- /dev/null +++ b/VMware/drsgroups.ps1 @@ -0,0 +1,78 @@ +$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 + } +} +} \ No newline at end of file