Добавление принтеров через Powershell
Задача: есть определённый список компьютеров (ти-ли из AD, то-ли из сетевого окружения, то-ли из файла – в данном случае не важно). К некоторым из этих компьютеров подключены и расшарены принтеры. В сети появляется новый компьютер, к нему нужно добавить все расшаренные принтеры.
Для начала необходимо узнать какие принтеры расшарены. Для этого нужно посмотреть свойство Shared объекта Win32_Printer. Нас будет интересовать только сетевое имя принтера:
$Printers = Get-WmiObject win32_printer -Filter "Shared = $true" ` -ComputerName $Computer $ShareName = $Printers | Select-Object -ExpandProperty ShareName
При добавлении принтера нужно указать сетевой путь к нему. Поэтому до того как добавлять нужно сформировать пути к добавляемым принтерам. Путь состоит из имени компьютера и сетевого имени принтера:
foreach ($Printer in $ShareName) { $Path = "\\" + $Computer + "\" + $Printer "Добавляем принтер $Path..." ([WMICLASS]'Win32_printer').AddPrinterConnection($path) }
При этом следует отметить, что у объекта Win32_Printer нет метода AddPrinterConnection. Этот метод содержится в самом классе Win32_Printer.
В этом можно убедиться выполнив команды
Get-WmiObject Win32_Printer | Get-Member -MemberType Method [WMICLASS]'Win32_Printer' | Get-Member -MemberType Method
Ну и напоследок весь код целиком:
foreach ($Computer in $Computers) { # Проверяем включён-ли компьютер if (Test-Connection $Computer -Quiet -Count 1) { # Пытаемся найти и установить принтеры try { # Если найдены расшаренные принтеры if ($Printers = Get-WmiObject win32_printer -Filter ` "Shared = $true" -ComputerName $Computer -ErrorAction Stop) { # Определяем сетевые имена $ShareName = $Printers | Select-Object -ExpandProperty ShareName foreach ($Printer in $ShareName) { # Формируем путь к принтеру $Path = "\\" + $Computer + "\" + $Printer "Добавляем принтер $Path..." ([WMICLASS]'Win32_printer').AddPrinterConnection($path) } } } catch { Write-Warning "$Computer : $_" } } }
Примечание: всё это успешно работает при условии, что на всех компьютерах установлена одинаковая операционная система. Если ОС разные скорее всего принтеры будут установлены некорректно из-за отсутствия драйверов.
-
03/11/2011 в 22:16Расшаривание принтера через Powershell « smearg
Недавние комментарии