首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Powershell / vCenter / PowerCLI的PowerCLI VM权限查询

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

Stack Overflow用户
提问于 2016-01-13 21:12:38
回答 2查看 2.6K关注 0票数 1

我一直试图在导入的PowerCLI命令中使用Powershell进行VMware管理,但遇到了一个障碍。我想要做的是在一个位置(不管在哪里)查询所有VM,对于每个VM,我希望这个组具有“虚拟机用户和快照”权限,然后使用这个组名为该组中的每个人运行一个Get-ADGroupMembers查询。我还必须从AD查询中删除域前缀,否则会导致错误。

在更多地尝试将哈希表信息输出到csv (而不是'SystemObject[]‘)之后,我终于得到了脚本,这样它就不会返回错误,除非VM中有多个组。它抛出一个错误,但是脚本继续,只输出第一个组的成员。

如何让它对每个被拖到所有者组哈希表中的组执行递归AD查询?输出将与所有其他VM的输出相同,只为每个组和成员提供一行。

代码语言:javascript
复制
$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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-15 19:35:42

今天我又玩了几次,终于弄明白了!我现在正在针对一个带有350+机器的数据中心运行这个脚本,所以从技术上讲,我不知道它能工作,但它可以在3台机器上运行:)我还添加了一行,列出了每台由多个组拥有的机器--这为故障排除提供了方便。下面是剧本:

代码语言:javascript
复制
$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
票数 1
EN

Stack Overflow用户

发布于 2016-01-15 18:32:19

$owners.principal之后将$owner.principal改为$members = Get-ADGroupMember?如果您有嵌套的AD组,groups有一个-Recursive参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34777096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档