我正在运行一个首先获取所有群组的脚本,然后获取这些已收集群组的所有成员并将其放入.csv。
我现在已经等了3个多小时了,甚至还不到一半...
以下是剧本。
Get-QADGroup -SizeLimit 0 -properties * |
Select samaccountname|
Export-CSV D:\Test_PowerShell\group.csv -NoTypeInformation
Get-Content "D:\Test_PowerShell\group.csv" |
foreach-object {$group = $_ -replace '"', ""# grab current group name get-qadgroupmember $group -sizelimit 0 -indirect |
`select-object samaccountname,@{n="GroupName";e={$group}}} |
export-csv D:\Test_PowerShell\groupandmem.csv -notypeinformation
答案 0 :(得分:0)
试试这个:
( 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