我會將foreach($computer in $computers)
中的所有內容都包含在Start-Job
中,以使它們同時運行。唯一的問題是,我需要等待所有的工作完成,然後才能完成底部的ConvertTo-Json
。等到所有線程完成後再運行下一任務
$sb = "OU=some,OU=ou,DC=some,DC=domain"
$computers = Get-ADComputer -Filter {(Enabled -eq $true)} -SearchBase "$sb" -Properties *
$hasmanufacturer = New-Object System.Collections.Generic.List[System.Object]
foreach($computer in $computers)
{
$drives = try{@(Get-WMIObject -Class Win32_CDROMDrive -Property * -ComputerName $computer.Name -ErrorAction Stop)} catch {$null}
foreach($drive in $drives)
{
if($drive.Manufacturer)
{
$hasmanufacturer.Add($computer)
continue
}
} # inner foreach
}
ConvertTo-Json $hasmanufacturer
不相關,但是......爲什麼在出現錯誤時返回'$ null'時爲了使用'-ErrorAction Stop'?刪除'try..catch'和'@()'並使用'-ErrorAction SilentlyContinue'應該具有完全相同的效果。 –