2

Есть ли быстрый и простой способ установить каждый принтер с сервера печати через консоль, например PowerShell?

Add-Printer из PowerShell не поддерживает подстановочные знаки.

Я пробовал это с Get-Printer и ForEach

Get-Printer -ComputerName print-server | Select  name > Printers.txt

ForEach ($Printer in Get-Content "Printers.txt")
{
Add-Printer -ConnectionName \\print-server\"$Printer"
}

Но я получаю только сообщение о том, что имя сервера недоступно или недействительно. В powershlel стоит увидеть, что $ Printer не заменили именем печати. Но когда я использую Write-Host $ Printer, это работает.

2 ответа2

3

Вместо того, чтобы отправлять принтеры в текстовый файл и затем пытаться использовать их, считывая их обратно как основные строки, используйте свойства объектов, возвращаемых из Get-Printer.

НАПРИМЕР:

# Get list of printers from computer "print-server".
$Printers = Get-Printer -ComputerName print-server

# Iterate through the returned list of printers.
ForEach ($Printer in $Printers)
{
    # Check to see if the current printer is shared or not.
    If ($Printer.Shared) {
        # If it's shared, add it by using the print server name and printer name properties of the current printer object.
        Add-Printer -ConnectionName "\\$($Printer.ComputerName)\$($Printer.Name)"
    }
}
0

Для правильной работы сценария принтер на выбранном сервере печати должен иметь все необходимые разрешения. Рассматриваемый принтер (SelectPrinter) будет использоваться в сценарии для извлечения настроек безопасности.

(Get-Printer 'SelectPrinter' Full).PermissionSDDL | Out-File 'C:\PrinterSecurity.txt' | $perms = Get-Content 'C:\PrinterSecurity.txt' | Set-Printer '*' -PermissionSDDL $perms. 

Это добавит разрешения для всех существующих принтеров на рассматриваемом сервере печати.

Запустите команду локально с сервера печати.  

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .