大量のRDP接続用のファイル、Pythonで作ってみた


はじめに

複数の端末に対してRDP接続する必要がある場合に、わざわざExcelのリストを見て手入力で接続するのは面倒、と思い、RDPファイルをまとめてPythonで作れるようにしてみました...!!

準備

入力情報、Pythonファイルを以下に示します。

入力情報

以下の2ファイルを作成します。
1. RDP接続先リスト(接続先リスト_sample.xlsx)
2. RDPテンプレート(template.rdp)

1. RDP接続先リスト(接続先リスト_sample.xlsx)

2. RDPテンプレート(template.rdp)

以下のように「コンピュータ名」を「ComputerAddress」に、「ユーザー名」を「UserName_for_RDP」として、「名前を付けて保存」を使って、template.rdpとして作業用ディレクトリに保存しておきます。

なお、RDP接続ファイル(template.rdp)はテキストエディタで開くと以下のようになっています。パスワードはRDPファイル自体には保存されないことが読み取れます。

template.rdp
screen mode id:i:2
use multimon:i:1
desktopwidth:i:1920
desktopheight:i:1080
session bpp:i:32
winposstr:s:0,1,759,0,980,270
compression:i:1
keyboardhook:i:2
audiocapturemode:i:0
videoplaybackmode:i:1
connection type:i:7
networkautodetect:i:1
bandwidthautodetect:i:1
displayconnectionbar:i:1
enableworkspacereconnect:i:0
disable wallpaper:i:0
allow font smoothing:i:0
allow desktop composition:i:0
disable full window drag:i:1
disable menu anims:i:1
disable themes:i:0
disable cursor setting:i:0
bitmapcachepersistenable:i:1
full address:s:ComputerAddress
audiomode:i:0
redirectprinters:i:1
redirectcomports:i:0
redirectsmartcards:i:1
redirectclipboard:i:1
redirectposdevices:i:0
autoreconnection enabled:i:1
authentication level:i:2
prompt for credentials:i:0
negotiate security layer:i:1
remoteapplicationmode:i:0
alternate shell:s:
shell working directory:s:
gatewayhostname:s:
gatewayusagemethod:i:4
gatewaycredentialssource:i:4
gatewayprofileusagemethod:i:0
promptcredentialonce:i:0
gatewaybrokeringtype:i:0
use redirection server name:i:0
rdgiskdcproxy:i:0
kdcproxyname:s:
drivestoredirect:s:
camerastoredirect:s:*
devicestoredirect:s:*
username:s:UserName_for_RDP

Pythonのファイル

RDP_File_Generator.py

# -*- coding: utf-8 -*-
"""
 RDPファイル作成PGM
"""

import tkinter, tkinter.filedialog, sys, os
import pandas as pd

dir1 = r"C:\Users\XXXXX\Desktop\xxxxxx"
# ↑「RDP接続先リスト」や「RDPテンプレート」を格納しているファイルパスを指定

## tkinterのお決まり。
root = tkinter.Tk()
root.withdraw()

msg1 = '接続先リストを選択してください'
typ1 = [('エクセルファイル','*.xlsx')] 
inFile1 = tkinter.filedialog.askopenfilename(title=msg1, filetypes = typ1, initialdir = dir1) 
if (not inFile1): #[キャンセル]クリック時の処理
  print('ファイルを選んでください。')
  sys.exit

input_book1 = pd.ExcelFile(inFile1)
input_sheet_name1 = input_book1.sheet_names
input_sheet_df1 = input_book1.parse(input_sheet_name1[0],header=3)
df_s = input_sheet_df1.iloc[:,2:]

msg2 = 'RDPファイルを選択してください'
typ2 = [('RDPファイル','*.rdp')] 
inFile2 = tkinter.filedialog.askopenfilename(title=msg2, filetypes = typ2, initialdir = dir1) 
if (not inFile1): #[キャンセル]クリック時の処理
  print('ファイルを選んでください。')
  sys.exit


path_name = os.path.dirname(inFile2)
output_folder_path = os.path.join(path_name,"output")
## RDPファイル出力先フォルダ作成(exist_ok:既存の場合はスキップ)
os.makedirs(output_folder_path,exist_ok = True)

## RDPテンプレートファイルをテキストファイルとして開く
with open(inFile2,encoding='utf_16') as f:
  s = f.read()

## 接続先リストにある接続先の数だけ、RDPファイルを生成する
for i in range(len(df_s)):
  temp = s
  temp = temp.replace("UserName_for_RDP", df_s["ユーザID"].iat[i])
  temp = temp.replace("ComputerAddress", df_s["IPアドレス"].iat[i])
  path_w = os.path.join(output_folder_path,df_s["ユーザID"].iat[i]+".rdp")
  with open(path_w,mode="w") as f:
    f.write(temp)

実行してみる

以下、実行イメージです。

まず、「RDP_File_Generator.py」を実行すると、tkinterによるダイアログが表示されるので、接続先リストを選択します。

次に、RDPファイルのテンプレートを選択します。

outputフォルダができ、その中にRDPファイルが一括で出力されています!成功です!!

おわりに

パスワードはRDPファイル内に埋め込まれたりすることはないので、初回接続時にパスワード入力して資格情報を接続元PCで保存する、という手間は残りますが、便利だと思うので、良かったら参考にしていただけると嬉しいです!