0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

プリンターのコマンドラインでの削除を実現!

Posted at

1.なぜコマンドラインを用いるのか

会社内のプリンターを更改する際、
利用者の端末1つ1つからプリンタ情報を消していくのはとても面倒です。

そんな問題を抱えたときにいっぺんに削除する方法を
自分用ナレッジとして残します。

2.どのような動きをするのか

プリンタを削除する際に行うことは、以下になります。
①プリンタ自体の削除
②プリンタドライバの削除

これをパワーシェルで消していきます。
それぞれの情報はpowershellコマンドの下記コマンドでそれぞれ確認できます。
get-printer
get-printerdriver

単純に"remove-printer"と"remove-printerdriver"を組み合わせても実現可能かと思いましたが、
端末内のデバイス一覧にプリンタが残ったままになるので、以下コマンドを採用しました。

3.パワーシェルでどのように書いたか

1) 基本的な変数定義

このパワーシェルで定義が必要なのはプリンタ名・ドライバ名程度なので、
その内容を定義します。
あとは削除前の件数カウントの際に使う数値の"1"と、ログファイル用に使う日付データを定義しておきます。

$Printer="プリンタ名"
$Driver="ドライバ名"
$ReturnCheck=1
$ExecutionDate=Get-Date -Format "yyyyMMddHHmm"

2) ログの開始を定義

任意の出力先にログを出力していきます。
わかりやすいように日付を末尾に付けます。

Start-Transcript ログファイル名_$ExecutionDate.log

3)プリンター削除(判定部分)

削除前に判定を入れます。

Get-WmiObject Win32_Printerコマンドでは、端末内に入っているプリンタ一覧を出力できます。
その結果削除対象をが存在するならば(1以上ならば)削除するように分岐させます。

$ResultPrinter=@(Get-WmiObject Win32_Printer  | Where-Object { $_.Name -eq $Printer }).count

4)プリンター削除(削除部分)

上記のcount結果で1件以上見つかった場合に処理します。

rundll32.exeとは、DLL関数を呼び出すために使用します。
この中のprintui.dllを使用するという意味になります。
更にprintui.dllの中でPrintUIEntryを使用します。

それぞれのオプションの意味は以下の通りです。
/dl ローカルプリンタを削除する
/n プリンタ名を指定する

if($ResultPrinter -ge $ReturnCheck){
rundll32 printui.dll,PrintUIEntry /dl /n $Printer
echo "該当プリンタ有り"
}else{
echo "該当プリンタ無し"
}

4)念のためのwait設定

検証していたら稀に"プリンタが使用中のため削除できない"というメッセージがあり、
失敗するケースがありました。
その対策としてwaitを仕込みます。

Start-Sleep -s 60

5)ドライバー削除

ここから先はプリンタと同じです。
使うコマンドはrundll32ではなく、普通にpowershellコマンドで削除します。
削除判定もプリンタと同様です。

$ResultDriver=@(get-printerdriver | Where-Object { $_.Name -eq $Driver }).count

if($ResultDriver -ge $ReturnCheck){
Remove-PrinterDriver -Name $Driver
echo "該当ドライバ有り"
}else{
echo "該当ドライバ無し"
}

6)ログストップ

最後にログ出力を止めます。

Stop-Transcript

総括

rundll32を使うという発想に至らなかったのが嵌りポイントでした。
ログ出力や途中のechoなどデバッグ感がありますが、そこは後々の課題になります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?