【发布时间】:2016-01-13 21:12:38
【问题描述】:
我一直在尝试将 Powershell 与导入的 PowerCLI 命令一起用于 VMware 管理,但遇到了困难。我想要做的是查询一个位置的所有虚拟机(无论在哪里),对于每个虚拟机,我都希望该组具有“具有快照的虚拟机用户”权限,然后使用该组名运行 Get -ADGroupMembers 查询该组中的每个人。我还必须从 AD 查询中删除域前缀,否则会导致错误。
在尝试将哈希表信息输出到 csv(而不是“SystemObject[]”)之后,我终于得到了脚本,因此它不会返回错误,除非在有多个组的 VM 上返回错误。它会引发错误,但脚本会继续执行,并且只输出第一组的成员。
如何让它为拉入所有者组哈希表的每个组执行递归 AD 查询?输出与所有其他 VM 的输出相同,只是每个组和成员都有一行。
$AllVMs = @()
$vms = get-vm * -Location datacenter
foreach ($vm in $vms)
{
$owners = Get-VIPermission $vm.name | where-object {$_.role -eq "virtual machine user with snapshot"}
foreach ($owner in $owners)
{
$members = Get-ADGroupMember ($owners.principal -replace '^prefix\\')
$temp = New-Object psobject |
Add-Member Noteproperty "Name" -value $vm.name -PassThru |
Add-Member Noteproperty "Owner" -value (@($owners.principal) -join ',') -PassThru |
Add-Member Noteproperty "Members" -value (@($members.SamAccountName) -join ',') -passthru
$AllVMs+=$temp
}
$AllVMs | Export-Csv -Path c:\users\me\desktop\AllVMs.csv
【问题讨论】: