LoginSignup
6
7

More than 3 years have passed since last update.

PowerShellで印刷の設定を変更してから印刷を行う

Last updated at Posted at 2020-04-10

とりあえず白黒指定

 $printer = Get-WmiObject Win32_Printer | Where-Object Name -eq "***" # 印刷したいプリンタの名前
 $printer.SetDefaultPrinter()
 Set-PrintConfiguration $printer.name -Color $False
 Start-Process "***" -Verb Print # 印刷したいファイルの名前

プリンタへの出力はOut-Printerというコマンドレットもあるが、こちらはテキスト限定。幅広いファイルを処理するならPrint動詞に頼るのが良いと思われる。

その他の注意点

Set-PrintConfiguration -Color $Falseがエラーになるプリンタがある

Microsoft Print To PDFなど。実在するプリンタにはないと信じたい・・・。

ただ、スクリプトで書く場合はエラーになっても落ちないような仕組みが必要になりそう。事前にプロパティの存在をチェックするとか。

Set-PrintConfiguration -Color $Falseを無視するプリンタがある

試した限りではSend To OneNote 2016(デスクトップ版OneNoteに付属の仮想プリンタドライバ)が該当。

同じく実在するプリンタにそんなものはないと信じたい・・・。

Start-Processで、Print動詞がないファイルを指定してしまった場合は

For文で回している場合などうっかりPrint動詞がないファイル(icsとか)を指定しまう可能性は割とありそう。

これもエラーが起こったときに落ちないようにする必要がある。try, catchくらいしかやれることがないが。

そのほか実際に使う場合に必要になりそうなコマンド

事前に直前までデフォルト指定されていたプリンタを取得する

処理が終わったあと通常使うプリンタを戻すのに使う。

 $default = Get-WmiObject Win32_Printer | Where-Object default
 ...
 $default.SetDefaultPrinter()

あたりで。

そもそもそんなことしないでデフォルトプリンタで印刷すればいいのでは?

わたしもそう思っていた。しかし今のWindowsには、Microsoft Print To PDFやSend To OneNoteなど、仮想プリンタドライバとして振る舞うソフトがいくつか含まれている。

そのため、ユーザーが思っている「通常使うプリンタ」と、PCに設定されている「通常使うプリンタ」が異なっている ということはまああり得る。

また、今のWindowsには「Windowsで通常使うプリンターを管理する」という設定もあり、その確率は上がっていると思われる。なのでプリンタはちゃんと名前で指定しておくのがベター。

6
7
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
6
7