PowerShell のようなコンソール経由でプリント サーバーからすべてのプリンターをインストールする簡単な方法はありますか?
PowerShell の Add-Printer はワイルドカードをサポートしていません。
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"
}
しかし、サーバー名にアクセスできないか無効であるというメッセージのみが表示されます。PowerShell では、$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.
これにより、問題のプリント サーバー上の既存のすべてのプリンターに権限が追加されます。
プリント サーバーからローカルにコマンドを実行します。