我正在运行一个脚本,该脚本首先获取所有组,然后获取这些收集的组的所有成员,然后将其放入.csv中。
我现在已经等了三个多小时,甚至还没到一半...
下面是脚本。
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
最佳答案
试试这个:
( 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
我的性能测试(包含30组,每组包含5至50个用户):
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
关于performance - 减少PowerShell脚本的运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22835982/