雑記+備忘録

OS中心の技術情報と趣味について(最近は主に将棋)。備忘録なのでここに書かれたことを試すのは自己責任でお願いします。

コマンド(バッチファイル)、PowerShellで共有プリンタの追加

プリンタサーバーに公開されている共有プリンタを
クライアントにコマンドで追加する。
VDIのクライアント等で、スタートアップスクリプトログオンスクリプト
ロケールごとに追加するプリンタを変える、などの場面で使える。

以下、クライアント側で実行する。
例として"192.168.1.2\TestP01"でネットワーク共有されているプリンタを
クライアントのプリンタとして追加する場合

○コマンド
> rundll32 printui.dll,PrintUIEntry /in /n "192.168.1.2\TestP01"

PowerShell
PS > (New-Object -ComObject WScript.Network).AddWindowsPrinterConnection("192.168.1.2\TestP01")

どちらもWindows7 64bitで動作確認済み。
PowerShellについては、Windows8.1以降はAdd-Printerコマンドレットが使えるようだ(未調査)。
また、PowerShellについて、ローカルにプリンタドライバをインストールする方法はいくつか見られたが、
ネットワーク共有プリンタを追加するコマンドは英語のサイトしか見つからなかった。

  • - - - - - - - - - - - - - -

(2015/10/22追記)
> VDIのクライアント等で、スタートアップスクリプト
> ロケールごとに追加するプリンタを変える、などの場面で使える。

とか書いたが、
いざスタートアップスクリプトを作って仕掛けてみると、
どうも共有プリンタにアクセスできないようだ。
スタートアップスクリプトの実行権限は「Local System」なのでそのためか。
直前にnet useで接続するように記載してもだめ。

そこでふと気づいたが、
プリンターは、ユーザーごとに設定を持つのでは?
調べてみると、ネットワークプリンタの設定は、ユーザープロファイルに含まれるようだ。
https://msdn.microsoft.com/ja-jp/library/cc781142(v=ws.10).aspx

つまり、ログオンスクリプトで実行するのが本筋。
強引にスタートアップスクリプトで実行しても、
ユーザーでログインした時に追加された状態で残っているか怪しいし、
残っていたとしてもスクリプトで接続したユーザーしか使えない。

ログオンスクリプトで実行したところ、すんなり共有プリンタが追加できました。

  • - - - - - - - - - - - - - -

(2017/3/29追記)
MSの「ユーザー プロファイルに保存される設定」のリンクが切れていました。
こちらの方のブログで一覧を確認できます。
ユーザープロファイル | Windowsインフラ管理者への道