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

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

# 準備
入力情報、Pythonファイルを以下に示します。
## 入力情報
以下の2ファイルを作成します。
1. RDP接続先リスト(接続先リスト\_sample.xlsx)
2. RDPテンプレート(template.rdp)
### 1. RDP接続先リスト(接続先リスト\_sample.xlsx)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330628/2756edec-dfa0-539f-eaff-d4674b99f75e.png)

### 2. RDPテンプレート(template.rdp)
以下のように「コンピュータ名」を「ComputerAddress」に、「ユーザー名」を「UserName\_for\_RDP」として、「名前を付けて保存」を使って、template.rdpとして作業用ディレクトリに保存しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330628/33311fe2-4d59-0d30-f9f6-8d6db68c806e.png)

なお、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によるダイアログが表示されるので、接続先リストを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330628/45de70fb-64e9-041a-6904-0a41e7f420c7.png)

次に、RDPファイルのテンプレートを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330628/2d953f7a-c35c-09bd-ddd8-3664edb1082b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330628/26ac4d92-ef2a-83c9-382c-5c90c37bdbb9.png)

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


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