试试这个:
( Get-QADGroup -SizeLimit 0 ) |
foreach-object {
$group = $_.samaccountname
get-qadgroupmember $_.samaccountname -sizelimit 0 -indirect |
select-object samaccountname, @{n="GroupName";e={$group}}
}
如果您使用的是 powershell 版本 3.0/4.0,您可以尝试使用 powershell 工作流程(我没有对性能进行任何广泛的测试,但理论上至少可以将速度提高一倍):
workflow get-UserAndGroup
{
$a = inlinescript { add-pssnapin Quest.ActiveRoles.ADManagement
Get-QADGroup -SizeLimit 0 | select -expa samaccountname
}
foreach -parallel ( $group in $a )
{
inlinescript {
add-pssnapin Quest.ActiveRoles.ADManagement
Get-qadgroupmember $using:group -sizelimit 0 -indirect |
select-object samaccountname, @{n="GroupName";e={$using:group}}
}
}
}
这样使用:
get-UserAndGroup | select samaccountname, groupname | export-csv .\myfile.csv -notypeinformation
我的性能测试(包含 5 到 50 个用户的 30 个组):
PS C:\ps> workflow get-UserAndGroup
{
$a = inlinescript { add-pssnapin Quest.ActiveRoles.ADManagement
Get-QADGroup -SizeLimit 0 | select -expa samaccountname
}
foreach -parallel ( $group in $a )
{
inlinescript {
add-pssnapin Quest.ActiveRoles.ADManagement
Get-qadgroupmember $using:group -sizelimit 0 -indirect |
select-object samaccountname, @{n="GroupName";e={$using:group}}
}
}
}
PS C:\ps> Measure-Command { get-UserAndGroup }
Days : 0
Hours : 0
Minutes : 0
Seconds : 23
Milliseconds : 512
Ticks : 235120228
TotalDays : 0,000272129893518519
TotalHours : 0,00653111744444444
TotalMinutes : 0,391867046666667
TotalSeconds : 23,5120228
TotalMilliseconds : 23512,0228
PS C:\ps> measure-command {
( Get-QADGroup -SizeLimit 0 ) |
foreach-object {
$group = $_.samaccountname
get-qadgroupmember $_.samaccountname -sizelimit 0 -indirect |
select-object samaccountname, @{n="GroupName";e={$group}}
}}
Days : 0
Hours : 0
Minutes : 1
Seconds : 7
Milliseconds : 16
Ticks : 670161451
TotalDays : 0,000775649827546296
TotalHours : 0,0186155958611111
TotalMinutes : 1,11693575166667
TotalSeconds : 67,0161451
TotalMilliseconds : 67016,1451