1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-11-15

はじめに

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

準備

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

入力情報

以下の2ファイルを作成します。

  1. RDP接続先リスト(接続先リスト_sample.xlsx)
  2. RDPテンプレート(template.rdp)

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

image.png

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

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

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

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

おわりに

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?