リモートデスクトップに自動でログインする
きっかけ
業務上、仮想マシンに接続する機会が増えてきました。
頻繁に接続する仮想マシンであればIPアドレス
orホスト名
、ユーザー名とパスワードそれぞれを覚えていますが、そうでないものに関しては忘れてしまいます・・・。
そんなことにならないように、いっそのことbat
ファイル化して 忘れてもいいようにしよう! 効率よくRDP接続してみよう!と思ったのがきっかけです。
成果物
set
コマンドにそれぞれの値を入力後にbat
ファイルを実行するとIPアドレス
orホスト名
の指定と資格情報の入力を飛ばすことができるようになります。
SERVER
:接続したい仮想マシンのIPアドレスorホスト名
USERNAME
:ログインするユーザー名
PASSWORD
:ログインユーザーのパスワード
WAITTIME
:資格情報削除までの待機時間
@echo off
set SERVER=xxx.xxx.xxx
set USERNAME=userName
set PASSWORD=password
set WAITTIME=10
cmdkey /generic:TERMSRV/%SERVER% /user:%USERNAME% /pass:%PASSWORD%
start mstsc /v:%SERVER%
timeout %WAITTIME%
cmdkey /delete:TERMSRV/%SERVER%
set
コマンドにそれぞれの値を入力後にbat
ファイルを実行するとIPアドレス
orホスト名
の指定と資格情報の入力を飛ばすことができるようになります。
処理している内容とコマンドについて
基本的にはWindowsアクセサリのリモートデスクトップ接続と処理している流れは同じです。
- 資格情報の入力
コマンド
cmdkey
引数
/generic:
・・・コンピュータに汎用資格情報を追加
/user
・・・資格情報を追加するアカウント名
/pass:
・・・資格情報を追加するアカウントのパスワード - RDP接続
コマンド
mstsc
引数
/v:
・・・接続する仮想マシン - 資格情報の削除
コマンド
cmdkey
引数
/delete:
・・・指定したユーザー名とパスワードを削除
おまけ
上記内容だと仮想マシンごとにbat
ファイルが必要になってきます。
bat
ファイルを探すのに時間をかけてしまったらこのbatを作成した意味が薄れてしまうので、1つのbatにまとめました。
@echo off
echo 接続する仮想マシン名を入力
set /p machineName=
setlocal enabledelayedexpansion
set WAITTIME=10
goto PC_!machineName!
:PC_A
set SERVER=xxx.xxx.xxx.xxx
set USERNAME=name_A
set PASSWORD=pas_A
goto LINK
:PC_B
set SERVER=yyy.yyy.yyy.yyy
set USERNAME=name_B
set PASSWORD=pas_B
goto LINK
:LINK
cmdkey /generic:TERMSRV/!SERVER! /user:!USERNAME! /pass:!PASSWORD!
start mstsc /v:!SERVER!
goto DELETE
:DELETE
cmdkey /delete:TERMSRV/!SERVER!
endlocal
このbatでは、以下の処理を行っています。
- PC名の入力
コマンド
set
引数
/p:
・・・入力を受け付けて変数に代入する - RDP接続
(省略) - 資格情報の削除
(省略)
goto
コマンドは指定したラベル処理を飛ばすコマンドです。
画面の入力にA
を入力された例を紹介します。
- PC名の入力
(入力):A - ラベル
:PC_A
へ処理を飛ばす。
set
コマンドで仮想マシン名、ユーザー名、パスワードをセット。 - ラベル
:LINK
へ処理を飛ばす。
RDP接続。 - ラベル
:DELETE
へ処理を飛ばす。
資格情報の削除
set
コマンドセットした値を各ラベルで使用したいため、setlocal ~ endlocal
で全体を囲っています。
これは遅延環境変数という変数を使用しています。
詳しくは以下ををご覧ください。
最後に
記事の最初に「効率よくRDP接続したい!」なんて書きましたが、先輩がbatを使って接続しているのを見て自分でも作ってみたいと思ったのが始まりです。
batはもっと難しいイメージを持っていましたが思っていたよりも早く作ることができました(調べながらで15~20分程度)。
むしろ記事を書く方が時間がかかりました・・・。
おまけについては、ここまで作りこむならC#などでツール化して方が便利かなと思いつつ作りました。後悔はしていません。
小さなツールからコツコツ挑戦してみることは大切ですね。それではノシ。
Discussion