WMIC を使用して、古いプリント サーバーから古いプリンターを削除しようとしています。
コマンドラインから以下の構文を使用すると機能します
WMIC PRINTER WHERE "SERVERNAME LIKE '%%OLDSERVERNAME%%'" DELETE
ヘルプデスクが「プリンターを追加するにはどうすればよいですか」という電話を受けないようにするために、プリンターを交換するか、更新することができるかどうかを確認するように求められました
SERVERNAME のプロパティを設定するために SET を使用していくつかのバリエーションを試しましたが、処理されているように見えますが、何も変化せず、GET を実行しても古い値が表示されます。
そのため、FOR /F ループを実行し、プリンターの名前 (sharename) を変数にラップしてから、別のコマンドを使用して、問題のあるプリンターが削除された後にプリンターを再作成できると考えました。
これが私のスクリプトです
@ECHO
ECHO Gathering Installed Printer Information...
FOR /F "tokens=1 skip=1" %%A IN ('WMIC PRINTER WHERE "Servername like "%%printaz1%%"" get sharename') DO SET PRINTERNAME=%%A
ECHO %PRINTERNAME%
したがって、必要に応じて値を適切な変数にまとめて取得すると思うかもしれませんが、いいえ、エコーをオンにすると、変数がキャプチャされるとすぐにnullに戻されるようです
私の出力は次のようになります...
FOR /F "tokens=1 skip=1" %%A IN ('WMIC PRINTER WHERE "Servername like "%%printaz1%%"" get sharename') DO SET PRINTERNAME=%%A
SET PRINTERNAME=nameofprinter
SET PRINTERNAME=
ECHO
ECHO is on.
文字列をダンプしているように見える理由について、いくつか考えてみたいと思います。
Powershell と VBScript も選択肢から外れているわけではありません。私は両方に精通していますが、これは可能であるように思えただけで、最初からやり直したくありません。