В ходе системного администрирования машин пользователей зачастую возникают различные мелкие задачи по работе с принтерами(добавление, удаление, изменение принтера по умолчанию и тп). Не всегда бывает удобно устанавливать RDP сессию или иным образом подключатся в графическом режиме, поэтому приведу несколько полезных скриптов PowerShell для удаленного администрирования, используя консоль PowerShell.
Для начала, определимся с типом удаленного подключения(возможны разные варианты, которым будет посвящена отдельная заметка).
Предположим, нам нужно что-то сделать на одной удаленной машине, и это достаточно простой список команд(или одна команда). В таком случае, проще всего использовать управление "один-к-одному" с помощью Enter-PSSession :
Enter-PSSession -ComputerName Comp1
где Comp1 - имя удаленной машины.
После подключения можно вручную выполнить различные команды. В случае, когда требуется выполнение нескольких команд или скрипта, можно воспользоваться командлетом Invoke-Command, который может установить удаленную сессию и выполнить несколько команд или скрипт(и даже сделать это в фоновом режиме).
Выполнение одной или несколько команд:
Invoke-Command -ScriptBlock {Restart-Service spooler} -ComputerName Comp1
Результатом будет перезапуск принт-спулера на машине с именем Comp1, в параметрах -ScriptBlock можно указать несколько команд.
Выполнение скрипта из файла:
Invoke-Command -FilePath .\script.ps1 -ComputerName Comp1
Будет выполнен скрипт из файла script.ps1, где в параметре -FilePath указывается путь к нему.
Для выполнения в скрытом режиме достаточно указать параметр -AsJob, однако следует помнить, что в этом случае PowerShell не возвращает результат выполнения, и его получить можно с помощью командлета Receive-Job(подробнее останавливаться на этом я в данной статье не буду, т.к. для задач данной статьи обычно достаточно простого подключения и выполнения команд вручную).
Итак, мы подключились к удаленной машине, что же мы можем сделать с принтерами?
1. Добавление сетевого принтера
Для добавления сетевого принтера нужно использовать WScript.Network :
(New-Object -ComObject WScript.Network).AddWindowsPrinterConnection("\\Printserver1\Kyocera1")
где Printserver1 - имя принт-сервера, а Kyocera1 - имя добавляемого принтера.
2. Установка принтера по умолчанию
(New-Object -ComObject WScript.Network).SetDefaultPrinter('Kyocera')
где Kyocera - имя принтера.
3. Удаление подключения принтера
(New-Object -ComObject WScript.Network).RemovePrinterConnection("\\Printserver1\Kyocera1")
Соответственно, Kyocera1 - имя принтера, а Printserver1 - принт-сервер.
4. Вывод списка принтеров
Get-CimInstance -Class Win32_Printer
Тут все совсем просто.