Help us understand the problem. What is going on with this article?

PowerShellを使って既定のプリンターの変更と用紙設定の変更

PowerShellを使って印刷するスクリプトを書いた。

印刷
Start-Process \.printingfile.pdf -Verb Print

このスクリプトでは

  • 規定のプリンタ
  • 既定の用紙設定

で印刷し続けるだけ。

PowerShellで以下のことをやりたい

  • 既定のプリンターの変更
  • 既定の用紙設定の変更
    • 用紙サイズ
    • 印刷の向き

環境

  • Windows10 Pro/Home
  • PowerShell v5.1

既定のプリンターの変更

下記のコマンドを走らせれば一発。

既定のプリンターの変更
$Printers=Get-WmiObject Win32_Printer
$Printer=$Printers | Where-Object Name -eq "Canon Generic Plus LIPSLX"
# Powershell v2.0
# $Printer=$Printers | Where-Object {$_.Name -eq "Canon Generic Plus LIPSLX"}
$Printer.SetDefaultPrinter()

Windows10の設定でプリンターとスキャナーを見てみましょう。

pp04.png

設定されました。

用紙サイズの変更

A4からB5に変更します。

用紙サイズ変更
$Printers=Get-WmiObject Win32_Printer
$Printer=$Printers | Where-Object Name -eq "Canon Generic Plus LIPSLX"
# 基本設定のPaperTypeを変更
$Printer.DefaultPaperType="B5"
# 更新
$Printer.Put()

プリンターのプロパティの基本設定を開いてみましょう。

pp00.png

原稿サイズがB5になっています。

pp01.png

用紙の向きの変更

Page_Orientation
# 標準設定の用紙設定をXML出力
$p=Get-PrintConfiguration -PrinterName "Canon Generic Plus LIPSLX"
$p.PrintTicketXML | Out-File psettings.xml -Encoding default
$ps=get-content .\psettings.xml
# 用紙の向き 縦(Portrait)から横 Landscapeに変更
$ps -replace 'Portrait','Landscape' | out-file ppsettngs.xml -Encoding default
# 変更した用紙設定をセット
Set-PrintConfiguration -PrinterName "Canon Generic Plus LIPSLX" -PrintTicketXml (Get-Content .\ppsettngs.xml -Raw) 

実際に変更されているか確認してみます。
プリンタープロパティ > 詳細設定 > 標準の設定 を開いてみます。

pp03.png

印刷の向きが横になっています。
成功です。

pp02.png

原稿サイズがA4のままですが、基本設定の原稿サイズB5を優先して実行するので問題ありません。

用紙トレイの変更

用紙トレイを選択すると用紙サイズは無視されます。
一般的に下記のように設定されていることが多いです。

  • Auto
    • 自動
  • Manual
    • 手差し
  • Upper
    • トレイ1
  • Middle
    • トレイ2
  • Bottom
    • トレイ3

用紙の向きと同じように Set-printConfigurationを使って設定します。

Select_Tray
# 標準設定の用紙設定をXML出力
$p=Get-PrintConfiguration -PrinterName "Canon Generic Plus LIPSLX"
$p.PrintTicketXML | Out-File psettings.xml -Encoding default
$ps=get-content .\psettings.xml
# トレイの変更
$ps -replace 'Auto','Manual' | out-file ppsettngs.xml -Encoding default
# 変更した用紙設定をセット
Set-PrintConfiguration -PrinterName "Canon Generic Plus LIPSLX" -PrintTicketXml (Get-Content .\ppsettngs.xml -Raw) 

トレイがUser0000000261等の数値で指定されているプリンターもあります。
SHARP MXシリーズがそうでした。

もし動かなった場合、下記のようにPrintCapabilitiesXMLを出力して眺めてみて下さい。

使える設定を見る
$p=Get-PrintConfiguration -PrinterName "Canon Generic Plus LIPSLX"
$p.PrintCapabilitiesXML | out-file pc.xml
# Open
.\pc.xml

細かいお話

  • Windowsのプリンターの設定は基本設定が優先。
  • WMIObjectのWin32_Printerを使わないと基本設定の方の用紙設定が設定できない。
  • Win32_Printerではトレイ、用紙の向き等は設定できない。
  • Set-PrintConfigurationを使えばトレイ、用紙の向き(縦・横)の設定が可能
  • PowerShell v2.0しか使えない方はWin32_PrinterConfigurationを使うと幸せになれるかもしれない
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away