Windows
コマンドプロンプト

リモートデスクトップの接続元コンピュータのIPアドレスを取得

Windowsサーバーに接続している端末のIPアドレスをログオン時点で取得したいが、

下記のリンクにあるように、ログオンスククリプトを使っている時は%CLIENTNAME%などの環境変数が使えないようだ。

リモートデスクトップの接続元コンピュータのIPアドレスを取得する方法

と言うわけで、

【初心者向け】各OSのTCPポート番号からプロセス/サービス調査コマンド入門

にあるようにnetstat コマンドを使ってIPアドレス情報を取得することができる。


netstat -n -p tcp | find ":3389"

IPアドレスだけを変数に代入したい場合は、下記のコマンドを打てば取得できる。

for /f "tokens=2 delims=:" %i in ('netstat -n -p tcp ^| find ":3389"') do set a=%i

set b=%a:~4%
set c=%b: =%
echo %c%

BATファイルで使用したい場合は、%はエスケープする必要があるので、%%に変換して、下記のようにする

for /f "tokens=2 delims=:" %%i in ('netstat -n -p tcp ^| find ":3389"') do set a=%%i

set b=%a:~4%
set c=%b: =%

これ、パッと見ただけだと何やっているかわかり難い。

一つずつ分解して説明すると

まず、下記のnetstatコマンドを使って、取得した接続一覧からRDPの3389ポートを持つ行をfindコマンドで抽出する。

netstat -n -p tcp | find ":3389"

次にforコマンドで、

()の中の出力結果を「:」で区切った結果の2番目を変数aにセットする。「|」はエスケープするため「^」を前に入れる。

for /f "tokens=2 delims=:" %i in ('netstat -n -p tcp ^| find ":3389"') do set a=%i

変数aから4文字目以降を取得する。

BATファイルで文字列の切り出し

set b=%a:~4%

変数bから空白を削除する。%V:c1=c2%  文字c1を文字c2に置換する。

set c=%b: =%