投稿者 まこ  (社会人) 投稿日時 2022/2/19 00:38:22
環境:Windows10、WindowsFormアプリ、.NET4.8

Windows既定のプリンターの変更と用紙サイズの変更をVB.NETから行いたいです。
調査したら↓のPowerShellを使った方法が見つかったのですが、PowerShellも
使ったことがないので、コードから利用するのに苦戦しています。

https://qiita.com/arachan@github/items/438f4cd806d445aa8ce5

試行錯誤して以下のような所まで自分でやってみたのですが、
ここから先に進めません。お助けください。
System.Management.Automationの参照はできています。


【既定のプリンターの変更】
PowerShellからは↓で変更できました。プリンタはとりあえず「DocuWorks Printer」という仮想プリンタにしています。
ここはインストールされているプリンタからComboBox等で選べるようにするつもりです。
 
$Printer=Get-WmiObject Win32_Printer | Where-Object Name -eq "DocuWorks Printer"
$Printer.SetDefaultPrinter()

デバッガで確認すると、変数printerはコレクションで1つだけ要素が格納されていました。
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim runspaceInvoke As RunspaceInvoke = New RunspaceInvoke()
        Dim printer As Object = runspaceInvoke.Invoke("Get-WmiObject Win32_Printer | Where-Object Name -eq ""DocuWorks Printer""")
        printer.SetDefaultPrinter() '★ここでエラー printer(0).SetDefaultPrinter()でもNG 
    End Sub

【用紙サイズの変更】
こちらはPowerShellからは↓でもNG。
確認は[設定]  > [デバイス] > [プリンターとスキャナー] で該当プリンタの「印刷設定」で確認しました。
できればA3からA4に縮小印刷する場合の設定方法があれば、それも教えて欲しいです。
 
$Printers=Get-WmiObject Win32_Printer
$Printer=$Printers | Where-Object Name -eq "DocuWorks Printer"
$Printer.DefaultPaperType="A3"
$Printer.Put()