Я пытаюсь написать короткий сценарий, который получит список всех компьютеров в домене, а затем запустит на них Get-Printer, чтобы получить список всех установленных принтеров на каждой машине.
Чтобы получить список компьютеров в домене, я хотел бы использовать «net view», поэтому я попытался
net view | ForEach-Object {Get-Printer -ComputerName $_}
Но это не работает. Вместо этого я просто получаю строку «Служба диспетчера очереди недоступна» для каждого ПК в сетевом представлении.
Ручной ввод имен ПК в «Get-Printer» работает отлично, и я действительно написал рабочий скрипт, который выводит результаты net view в файл .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