Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

Windows 10 / Server 2016でPowerShellを使ってプリンターとドライバーを管理する方法

前回の記事では、Windows XP以降のすべてのWindowsバージョンでプリンターと印刷操作を管理できる従来型のVBSスクリプトについて解説しました。今回は、PowerShellを使用してプリンター、印刷ポート、ドライバー、印刷キューをインストール・管理・削除するための典型的なコマンドを紹介します。これらのPowerShell CLIによるプリンター管理手法は、Windows 10 / 8.1やWindows Server 2019 / 2016 / 2012 R2といった最新のOSでも利用できます。

PowerShellモジュール「PrintManagement」

Windows 8.1およびWindows Server 2012 R2のリリースに合わせて、MicrosoftはPowerShell 4.0(Windows Management Framework 4.0の一部)を公開し、Windowsベースの印刷サーバー管理用コマンドレットを大幅に拡充しました。Windows 10(PowerShell v5)で利用可能なPrintManagementモジュールのコマンドレット一覧は、次のコマンドで確認できます。

Get-Command –Module PrintManagement

PrintManagementモジュールには、プリンター、ドライバー、印刷ポート、キューを管理するための22個のPowerShellコマンドレットが含まれています。

  • Add-Printer – 新しいプリンターを追加(インストール)する
  • Add-PrinterDriver – 新しいプリンタードライバーをインストールする
  • Add-PrinterPort – ローカル印刷ポートを作成する
  • Get-PrintConfiguration – プリンターの構成情報を表示する
  • Get-Printer – コンピューターにインストール済みのプリンター一覧を表示する
  • Get-PrinterDriver – インストール済みドライバーの一覧を表示する
  • Get-PrinterPort – プリンターポートの一覧を表示する
  • Get-PrinterProperty – プリンターのプロパティを表示する
  • Get-PrintJob – プリンターの印刷ジョブ一覧を取得する
  • Read-PrinterNfcTag – NFCタグからプリンター情報を取得する
  • Remove-Printer – プリンターを削除する
  • Remove-PrinterDriver – プリンタードライバーを削除する
  • Remove-PrinterPort – プリンターポートを削除する
  • Remove-PrintJob – プリンター上の印刷ジョブを削除する
  • Rename-Printer – プリンター名を変更する
  • Restart-PrintJob – 印刷ジョブを再起動する
  • Resume-PrintJob – 一時停止中の印刷ジョブを再開する
  • Set-PrintConfiguration – プリンターの構成を設定する
  • Set-Printer – プリンターの構成を更新する
  • Set-PrinterProperty – プリンターのプロパティを変更する
  • Suspend-PrintJob – 印刷ジョブを一時停止する
  • Write-PrinterNfcTag – NFCタグに情報を書き込む

各コマンドの詳細な構文を確認するには、次のコマンドを使用します。

Get-Help <cmdlet_name> -Detailed

また、使用例を表示するには次のように入力します。

Get-Help <cmdlet_name> -Examples

それでは、Windows 10における典型的なプリンター管理タスクの具体例をいくつか見ていきましょう。

DriverStoreへのプリンタードライバーの追加

Windows DriverStoreにインストールされているプリンタードライバーの一覧を表示するには、次のコマンドを実行します。

Get-PrinterDriver

続いて、新しいプリンタードライバーをシステムにインストールします。ここでは例として、広く使われている「HP Universal Printing PCL 6」ドライバーを取り上げます。ドキュメントによれば、印刷ドライバーを追加するPowerShellコマンドは次のようになります。

Add-PrinterDriver -Name "HP Universal Printing PCL 6" -InfPath "C:\Distr\HP-pcl6-x64\hpcu118u.inf"

しかし、この方法でドライバーをインストールしようとすると、次のようなエラーメッセージが表示されます。

Add-PrinterDriver : One or more specified parameters for this operation has an invalid value.
CategoryInfo : InvalidArgument: (MSFT_PrinterDriver:ROOT/StandardCimv2/MSFT_PrinterDriver) [Add-PrinterDriver], CimException
FullyQualifiedErrorId : HRESULT 0x80070057, Add-PrinterDriver

実は、INFファイルからドライバーをインストールできるのは、そのドライバーがすでにDriverStoreに存在する場合のみです。つまり、Add-PrinterDriverコマンドでは、Driver Storeに存在しない印刷ドライバーを直接インストールすることはできません。ドライバーをDriverStoreに追加するには、以下のいずれかの方法を使用します。

  • 前回の記事で紹介したVBSスクリプトを使用する
  • ユーティリティpnputil.exeを使用する。コマンド例:pnputil.exe -i -a C:\Distr\HP-pcl6-x64\hpcu118u.inf(特定のプリンタードライバーをインストール)、またはpnputil.exe -i -a C:\Distr\HP-pcl6-x64\*.inf(指定したディレクトリ内のINFファイルに含まれるすべてのドライバーをインストール)
  • オフラインのWindowsイメージにドライバーを統合できるコマンドレットAdd-WindowsDriverを使用する

ドライバーをドライバーリポジトリに追加した後、次のコマンドで印刷サーバーにインストールします。

Add-PrinterDriver -Name "HP Universal Printing PCL 6"

ヒント: PowerShellでドライバーをインストールする際、ドライバー名のフィールドには何を指定すればよいのでしょうか。指定する印刷ドライバー名は、内部システム名と完全に一致している必要があり、一致しない場合はインストール中にエラーが発生します。正しいドライバー名は、そのドライバーがすでにインストールされているコンピューターでget-printerdriverコマンドを実行するか、ドライバーの.infファイルを目視確認することで調べられます。

PowerShellでプリンターをインストールする方法

まず、ネットワークプリンター用のIPポートを作成します(ネットワークプリンターのIPアドレスまたはリモート印刷サーバーの名前を指定できます)。

Add-PrinterPort -Name "IP_192.168.10.26" -PrinterHostAddress "192.168.10.26"

新しいIP印刷ポートを追加する前に、同名のポートがすでに存在するかどうかを確認しておくと安全です。

$portName = "IP_192.168.10.26"
$checkPortExists = Get-Printerport -Name $portname -ErrorAction SilentlyContinue
if (-not $checkPortExists) {
Add-PrinterPort -name $portName -PrinterHostAddress "192.168.10.26"
}

次のコマンドで、新しいプリンターをコンピューターにインストールし、同時に共有設定まで行います。

Add-Printer -Name hp3027_Office1_Buh -DriverName "HP LaserJet M3027 MFP PCL6 Class Driver" -PortName IP_192.168.10.26 -Shared -ShareName "hp3027_1_BUh" –Published

注: 同じ操作(プリンターのインストールと共有)をVBSスクリプト(Printing Adminスクリプト)で行う場合は、2つの異なるコマンドを実行する必要がある点に注意してください。

これらのコマンドを実行すると、「hp3027_Office1」という名前の新しい共有プリンターがシステムに登録されます。

プリンター名を変更したい場合は、次のコマンドを実行するだけです。

Rename-Printer -Name "hp3027_1_Buh" -NewName "hp3027_F1_Salary"

印刷サーバーにインストールされたプリンターの一覧表示

このコンピューターにインストールされているすべてのプリンターの一覧を表示してみましょう。

Get-Printer

ご覧のとおり、このコマンドはプリンター名、種類(ローカルまたはネットワーク)、ドライバー、印刷ポート、プリンターが共有されているかどうか、Active Directoryに公開されているかどうかを表示します。

PrintManagementコマンドレットの多くは、リモートコンピューター(印刷サーバー)上のプリンター、ドライバー、印刷キューの状態確認や管理にも使用できます。リモートコンピューターまたはサーバーの名前は、-ComputerNameパラメーターの引数として指定します。

リモートコンピューターにインストールされているプリンターの情報を取得するには、次のコマンドを使用します。

Get-Printer -ComputerName rome-prnt1 | Format-List Name,DriverName

共有プリンターのみを一覧表示するには、次のようにします。

Get-Printer -ComputerName rome-prnt1 | where Shared -eq $true | fl Name

PowerShellでネットワーク共有プリンターに接続する

印刷サーバー上の共有プリンターに接続するには、次のコマンドを使用します。

Add-Printer -ConnectionName \\rome-prnt1\HP3027

Windows 10では、最後に印刷に使用したプリンターが自動的に既定のプリンターとして設定されます。固定の既定のプリンターを使用したい場合は、次のコマンドを実行します。

Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" -Name "LegacyDefaultPrinterMode" -Value 1 –Force

また、既定のプリンターを設定するには、次のコマンドも使用できます。

$wsnObj = New-Object -COM WScript.Network
$wsnObj.SetDefaultPrinter(%PrinterName%)

PowerShellでプリンターを削除する方法

プリンターを削除するには、次のPowerShellコマンドを実行します。

Remove-Printer -Name "hp3027_L1_O1"

特定のドライバーだけを削除したい場合は、Remove-PrinterDriverコマンドレットを使用します。

Remove-PrinterDriver -Name "HP Universal Printing PCL 6"

  1. PowerShellでWindowsプロセスを管理する方法【取得・起動・停止・リモート管理を解説】

    PowerShellには、ローカルコンピュータやリモートコンピュータ上のプロセスを管理するための豊富な機能が備わっています。PowerShellを使えば、実行中のプロセス一覧の取得、応答しなくなったプロセスの強制終了、ウィンドウタイトルによるプロセスの検索、新しいプロセスの非表示モードや対話モードでの起動など、さまざまな操作が可能です。利用可能なプロセス管理コマンドレットの一覧Windows 10で利用できるプロセス管理コマンドレットの一覧は、以下のコマンドで表示できます。Get-Command –Noun ProcessGet-Process – 実行中のWindowsプロセスの一覧を取得す

  2. Windows 8.1 / Windows Server 2012 R2対応のKMSアクティベーションサーバー構築手順

    Windows 8.1およびWindows Server 2012 R2の正式リリースから約4ヶ月が経過し、システム管理者にとっては、これらの新OSを完全にサポートできるようITインフラを更新する絶好のタイミングとなっています。本記事では、旧バージョンのWindows上で稼働している既存のKMS(Key Management Service)サーバーにおいて、Windows 8.1およびWindows Server 2012 R2のKMSアクティベーションに対応させる方法について詳しく解説します。旧KMSサーバーで発生するアクティベーションエラーすでにKMSサーバーを運用している環境で、新しい