1

我正在尝试做的 = 返回某些组中的所有禁用帐户并将它们存储在一个 Veriable 中,我可以使用它来搜索 VM 视图以从禁用用户中分离持久驱动器。

$groups = Get-ADGroup -Filter {Name -like "view_*"}
$rtn = @()
    ForEach ($Group in $Groups)
    {
        $rtn += (Get-ADGroupMember -Identity "$($group.name)" -recursive)
    }
$dis = @()
foreach ($user in $rtn) 
    { 
        $dis += (get-aduser -filter {enabled -eq $false})
    }

我相信这对我有用,但我需要知道有没有更好的方法来做到这一点?因为这需要数千名用户花费大量时间

4

2 回答 2

1

如果您的组成员身份(多个组中的用户)有任何重叠,您将为Get-ADUser同一用户多次调用。这会减慢您的速度并返回您必须过滤掉的重复数据。

您可以在没有Foreach循环和数组构建的情况下执行此操作,只需一个管道即可。为格式清晰添加了换行符。

$rtn = get-adgroup -filter {name -like "view__*"}|`
    foreach-object {Get-ADGroupMember $_ -recursive}|`
        select-object -expandproperty distinguishedname  -unique|`
        get-aduser -Properties enabled|`
        where-object {$_.enabled -eq $false};

这返回了 9 个组中的 37 个不同的用户。在多次运行中,执行时间在 1.1 到 2.5 秒之间。

您的答案中的方法在相同的 9 个组中返回了 60 个用户 - 有很多重复项(因为他们没有被过滤掉)。在多次运行中,执行时间在 1.7 到 3.5 秒之间。

于 2013-09-18T13:23:05.303 回答
0

这是感觉是完成我打算做的事情的最佳方式

$groups = Get-ADGroup -Filter {Name -like "view_*"}
$rtn = @()
ForEach ($Group in $Groups)
{
    $rtn += (Get-ADGroupMember -Identity "$($group.name)" -recursive | %{Get-ADUser -Identity $_.distinguishedName -Properties Enabled | ?{$_.Enabled -eq $false}} )
}

如果有人有更好的方法,请告诉我。

于 2013-09-18T12:27:28.680 回答