繁体   English   中英

使用Powershell / PowerCLI的vCenter VM权限查询

[英]vCenter VM permission query using Powershell / PowerCLI

我一直在尝试将Powershell与导入的PowerCLI命令一起用于VMware管理,但是遇到了麻烦。 我想做的是查询一个位置中的所有VM(无论在哪里),对于每个VM,我希望具有“具有快照的虚拟机用户”权限的组,然后使用该组名称运行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

我今天还在玩它,并弄清楚了! 我现在正在具有350台以上计算机的数据中心上运行脚本,因此从技术上讲我不知道100%是否可以运行该脚本,但是它可以对3台计算机运行:-)我还添加了一行,以列出更多计算机所拥有的每台计算机多于一组-方便进行故障排除。 这是脚本:

$AllVMs = @()
$vms = get-vm -Location DATACENTER
foreach ($vm in $vms)
    {
        $owners = @(Get-VIPermission $vm.name | where-object {$_.role -eq "virtual machine user with snapshot"})
        if ($owners.count -gt 1) {write-host "** Note ** '$vm' has"$owners.count "owner groups"}
        foreach ($owner in $owners)
            {
                $members = Get-ADGroupMember ($owner.principal -replace '^prefix\\')
                $temp = New-Object psobject |
                Add-Member Noteproperty "Name" -value $vm.name -PassThru |
                Add-Member Noteproperty "Owner" -value (@($owner.principal) -join ',') -PassThru |
                Add-Member Noteproperty "Members" -value  (@($members.SamAccountName) -join ',') -PassThru
                $AllVMs+=$temp
            }
    }

$AllVMs

$members = Get-ADGroupMember之后将$owner.principal更改$owners.principal $owner.principal $members = Get-ADGroupMember 如果您嵌套了AD组,则Get-ADGroupMember具有-Recursive参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM