読者です 読者をやめる 読者になる 読者になる

ネットワークプリンタが削除できない場合の対処

PowerShell

この記事の要約

バイスとプリンタで消したはずのプリンタがまだ存在するというエラーが出て設定変更ができないときのための対処法です。
「ネットワークプリンタ 削除できない」などでググってもレジストリを消してスプーラサービスを再起動しろ、という方法だけしか出てこないのでPowerShellでWMIを操作したら問題を解決できたという内容です。CMDでの操作法も一応書いておきます。

消したはずのネットワークプリンタが存在する

同僚がWindows2012R2サーバにネットワークプリンタを追加する作業中にポート設定を間違えて登録してしまいました。
新しくポート設定を追加し、間違えたこのポート設定を消去しようとすると「使用中です」とエラーになるため「デバイスとプリンター」でこのプリンタを削除してプリンタの追加からやり直そうとすると同名のプリンタは既に存在するというエラーで登録できませんでした。また先ほどのポートも使用中で削除できません。しかし「デバイスとプリンター」の画面上ではすでにそのネットワークプリンタは削除されています。 

ググって出てくる対処法

当然こんなのは既知の問題だろうと「ネットワークプリンタ 削除できない」でググってみると当然のように同様の症状が出てきました。
解決の方法は
1.レジストリエディタで下記のキーを削除
 HKEY_CURRENT_USER\Printers\Connections の消したいプリンタ名
2.プリントスプーラサービス(Spooler)を再起動

レジストリを直接いじるとかやな感じですね

PowerShellでWMIを操作してプリンタを消す

自分はこのようにして対処できた、という内容です。
2012R2にはPSv4が最初から入っていますが、2003~2008R2のPSv2でも同様にかけます。
バイスとプリンタでプリンタを削除してもなぜかインスタンスとして残ってしまっているようで、WMIでプリンタを取得すると問題のプリンタがまだ存在していましたのでこれを消去しました。
バイスの削除なのでPowerShellは管理者権限を持っている必要があります。

*1

#WMIでプリンタを取得
$wmi = Get-WmiObject win32_printer
#プリンタ名を表示
$wmi|Select-Object Name
#消したいプリンタがあったらプリンタ名を入れて実行
$wmi|Where-Object{$_.Name -eq 'プリンタ名'}|Remove-WmiObject -Confirm

同じ操作をコマンドラインでやる方法もあるので一応書いておきます。

wmic
printer get name
printer where name="プリンタ名" delete
exit

はてなシンタックスハイライトはだれが使ってるんだかわからないドマイナーなlisp派生言語で対応言語数水増ししてないでいい加減Powershell対応してくれないかな…
自分が見てた対応言語一覧が古かったのか対応してた

*1:PowerShellシンタックスハイライター入れたらwin32の部分ではてなキーワードリンクのhtmlが出てくるので使ってない。死んでしまえ。