%20%D0%B8%D0%B7%20PrintServer.png)
существует ли быстрый и простой способ установки каждого принтера с сервера печати через консоль, например 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, это работает.
решение1
Вместо того чтобы передавать принтеры в текстовый файл, а затем пытаться использовать их, считывая их обратно как простые строки, используйте свойства объектов, возвращаемых 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)"
}
}
решение2
Для корректной работы скрипта принтеру на выбранном сервере печати необходимо добавить все необходимые разрешения. Указанный принтер (SelectPrinter) будет использоваться в скрипте для извлечения настроек безопасности.
(Get-Printer 'SelectPrinter' Full).PermissionSDDL | Out-File 'C:\PrinterSecurity.txt' | $perms = Get-Content 'C:\PrinterSecurity.txt' | Set-Printer '*' -PermissionSDDL $perms.
Это добавит разрешения всем существующим принтерам на соответствующем сервере печати.
Запустите команду локально с сервера печати.