我一直在寻找最快的方法来统计powershell中的广告用户数量,以及启用和禁用的用户数量,但是查询非常长(大约100 k用户,每个查询1到2分钟),而我的powershell ISE通常会在一两次请求后崩溃(这是用于报告工作的)。
因此,我的问题是如何优化这些查询:
$CountADUsers = (get-aduser –filter * -server $myserver).count.Count
$CountADUsersEnabled = (get-aduser -filter * -server $myserver | where {$_.enabled -eq "True"}).count
$CountADUsersNotEnabled = $CountADUsers - $CountADUsersEnabled谢谢各位
发布于 2018-07-09 08:59:34
你不需要跑两次。您可以将它保存到变量中,只需过滤它:
$allUsers = get-aduser –filter * -server $myserver
$CountADUsers = $allUsers.count
$CountADUsersEnabled = ($allUsers | where {$_.enabled -eq "True"}).count而且,在这种情况下,它不会有帮助,但是请记住,使用-Filter *和Where-Object并不是很有效,因为您可以只使用:
Get-ADUser -Filter {enabled -eq "True"}另一个提示: ISE不应该用于运行脚本,因为它有时会以奇怪的方式运行(特别是当您在计算机上的内存耗尽时)。您应该使用powershell.exe代替。
编辑:要做更多的改进,您可以尝试只选择需要使用的属性。
$t = $allusers |select userprincipalname,enabled然后使用Where-Object进行过滤。供比较:
Measure-command {($allusers | where {$_.enabled -eq "True"}).count}花了两分钟
Measure-command {($t | where {$_.enabled -eq "True"}).count}花了两秒钟(但选择大约需要2分钟,所以总的时间大致相同)。然而,这在很大程度上取决于场景。我把这个交给你,这样你就能找到最好的解决办法了。记住,Measure-Command是你的好朋友!
https://stackoverflow.com/questions/51241312
复制相似问题