Я пытаюсь написать короткий скрипт, который получит список всех компьютеров в домене, а затем запустит Get-Printer для получения списка всех установленных принтеров на каждой машине.Взаимодействие с Powershell 4 и Get-Printer
Чтобы получить список компьютеров в домене, я хотел бы использовать «чистый» вид, поэтому я попытался
net view | ForEach-Object {Get-Printer -ComputerName $_}
Но это не работает. Вместо этого я просто получаю строку «Служба буферизации недоступна» для каждого ПК в сетевом представлении.
Вручную вводить имена pc в «Get-Printer» отлично работает, и я на самом деле написал рабочий скрипт, который выводит результаты сетевого представления в TXT-файл после поиска имен ПК в тексте, затем он считывает каждую строку из текстового файла и вводит их последовательно в «Get-Printer». Но я хотел бы иметь возможность расширить этот код, чтобы централизованно управлять принтерами, поэтому мне нужно, чтобы это работало с одной строки, которая, я думаю, возможна.
Может ли кто-нибудь объяснить, что мне здесь не хватает? Как работает ForEach в Powershell 4?
Ниже мой рабочий код, который записывает в файл, а затем считывает из него:
$PCs = net view /all | Select-String "\\"
$a = ForEach ($Line in $PCs)
{ $Line -Replace(" ","")
}
$a | Out-file -FilePath C:\Users\esmith\Desktop\test.txt -Encoding ascii
Get-content C:\Users\esmith\Desktop\test.txt | ForEach-Object {Get-Printer -cn $_} | Out-file -FilePath C:\Users\esmith\Desktop\output.txt
Ahh, что делает много смысла & объясняет, почему мой обходной путь был эффективным. Однако у меня есть новая проблема; Кажется, что запуск кода успешно, пока я не ударил машину без запуска службы спулера принтера. Затем он висит бесконечно. Есть ли способ добавить тайм-аут к этому запросу и перейти к следующему компьютеру в списке? Эта проблема отсутствовала в моем коде тренировки, потому что Get-AdComputer возвращает гораздо больший список устройств, чем сетевой вид, включая многие, которые не запускают службу спулера. – evansmtihc
Get-Printer не поддерживает параметр таймаута. Я ожидал бы, что у него будет разумное значение тайм-аута. Вы уверены, что он никогда не вернется или не займет слишком много времени? Если вы используете мой второй пример, то Get-Printer может выполнять несколько вызовов одновременно, что будет затруднять задержки. –