Главная > Администрирование, Powershell > Добавление принтеров через Powershell

Добавление принтеров через 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 : $_"
        }
    }
}

Примечание: всё это успешно работает при условии, что на всех компьютерах установлена одинаковая операционная система. Если ОС разные скорее всего принтеры будут установлены некорректно из-за отсутствия драйверов.

  1. Комментариев нет.
  1. 03/11/2011 в 22:16

Оставьте комментарий