Мы пытаемся получить все установленные принтеры оптом.Для этого мы используем переключатель -AsJob
на Get-Printer
CmdLet.Это прекрасно работает, когда все ComputerNames
существуют, но когда есть тот, который не существует, правильно выдается ошибка.
Пример
$ComputerName = @('Computer1', 'NonExisting', 'Computer2')
$GetPrinterJobs = Foreach ($C in $ComputerName) {
Get-Printer -ComputerName $C -AsJob
}
$GetPrinterJobs | Wait-Job -EA Ignore | Receive-Job
Этот код будетвыбросить одну ошибку для NonExisting
ComputerName.Как можно увидеть, что ошибка на самом деле исходит от ComputerName NonExisting
?
Get-Printer: служба диспетчера очереди недоступна.Убедитесь, что служба очереди печати запущена.
С помощью приведенной ниже @JosefZ это решено следующим образом:
$GetPrinterJobs = Foreach ($C in $ComputerName) {
$C
Get-Printer -ComputerName $C -AsJob
}
$null = Get-Job | Wait-Job -EA Ignore
$GetPrinterJobResults = for ( $i = 0; $i -lt $GetPrinterJobs.Count; $i += 2 ) {
$ReceiveParams = @{
ErrorVariable = 'JobError'
ErrorAction = 'SilentlyContinue'
}
$ReceivedJobResult = $GetPrinterJobs[$i + 1] | Receive-Job @ReceiveParams
[PSCustomObject]@{
ComputerName = $GetPrinterJobs[$i]
State = $GetPrinterJobs[$i + 1].State
Data = $ReceivedJobResult
Error = if ($JobError) {
$JobError
$JobError.ForEach( { $Error.Remove($_) })
}
}
}
$GetPrinterJobResults