我有一些用户如何找到哪些是禁用的

时间:2013-09-17 18:43:14

标签: active-directory powershell-v2.0

我想做什么=返回certin组中的所有已禁用帐户并将其存储在Veriable中我可以使用VM视图进行搜索以从已禁用的用户分离Persistant Drives。

$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})
    }

我相信这对我有用,但我需要知道有更好的方法吗?因为这需要花费大量时间与几千个用户

2 个答案:

答案 0 :(得分: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秒。

答案 1 :(得分: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}} )
}

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