2020年11月3日火曜日

リモートデスクトップ時のプリンタ(リダイレクト番号)の取得方法について

リモートデスクトップでプリンタの共有を有効にしている場合、リモートデスクトップ先のプリンタの一覧には、リモートデスクトップ先に設定されているプリンタとリモートデスクトップ元に設定されているプリンタが表示されます。


リモートデスクトップの設定

 プリンタの例

プログラムではプリンタを指定して印刷したい場合があります。
しかしその時、この「(リダイレクト:番号)」の文字が邪魔でプリンタを指定できないことが多いです。
特にRemoteAppや複数人が同時にリモートデスクトップできるようになっているコンピュータでは番号が増えてしまい毎回番号が変わりうまく指定ができないです。

この値を調べるには2つの方法があります。
※以降の画像で見られてはまずいところは編集されています。

①コマンドで調べる。
コマンドプロンプトで「query session」で調べることができます。
以下の画像で「>」がついているところが自分です。IDの部分がリダイレクトの番号です。
「query session ユーザ名」で指定したユーザだけを表示することもできます。

場号だけを表示するには以下のようなコマンドです。
 for /f "tokens=3-4" %a in ('query session %username%') do @if "%%b"=="Active" echo %a
 ※batファイルの場合は以下の通り
 for /f "tokens=3-4" %%a in ('query session %username%') do @if "%%b"=="Active" echo %%a

PowerShell でも調べることができると思うのですが、調べた限り標準ではなさそうです。
参考までに「Get-UserSession」というコマンドのモジュールをインストールすることで「query session」と同じ情報を取得できるようです。(未検証)

https://www.powershellgallery.com/packages/Get-UserSession/1.0.2

②環境変数から調べる。
「SET」コマンドで環境変数の一覧を取得できます。
その中に直接格納されていれば楽なのですが、格納されていません。
しかし、「TMP」または「TEMP」の最後の番号が①の「query session」と同じ番号です。

 ただし、この場合は「TMP」または「TEMP」の情報を取得した後に番号だけを取得するようにテキストの編集が必要です。

 

【参考】

なお、グループポリシーでプリンタのリダイレクトを無効にすることもできます。
以下を無効にすれば表示できなくなります。

ローカル コンピューター ポリシー\コンピュータの構成\管理用テンプレート\リモートデスクトップ サービス リモートデスクトップ セッションホスト\プリンターのリダイレクト\
「クライアント プリンターのリダイレクトとを許可しない 」