我想做什么=返回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})
}
我相信这对我有用,但我需要知道有更好的方法吗?因为这需要花费大量时间与几千个用户
答案 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}} )
}
如果有人有更好的方法,请告诉我。