如何用PowerShell/Python脚本写入并添加配置到RDP文件?
用PowerShell和Python处理RDP文件:修改与添加配置
PowerShell 实现方案
你的现有代码已能替换指定配置项,但要添加缺失配置且避免重复,可按以下方式改进:
改进后的脚本
# 定义需要添加的配置内容 $newConfigLines = @' screen mode id:i:2 use multimon:i:1 desktopwidth:i:800 desktopheight:i:600 session bpp:i:32 winposstr:s:0,3,0,0,800,600 compression:i:1 keyboardhook:i:2 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 '@ -split "`n" # 遍历所有RDP文件 Get-ChildItem "C:\Users\user\Desktop\*.rdp" -Recurse | ForEach-Object { # 读取现有文件内容,过滤空行 $existingContent = Get-Content $_.FullName -Raw -ErrorAction Stop | Where-Object { $_ -match '\S' } # 替换已有配置项的值(比如use multimon) $updatedContent = $existingContent -replace "use multimon:i:\d", "use multimon:i:1" # 将现有内容转为哈希集合,快速检查配置是否存在 $existingLines = [System.Collections.Generic.HashSet[string]]::new($updatedContent -split "`n", [System.StringComparer]::OrdinalIgnoreCase) # 只添加缺失的配置行 foreach ($line in $newConfigLines) { $configKey = $line -split ":i:|:s:" | Select-Object -First 1 $existingMatch = $existingLines | Where-Object { $_ -like "$configKey:*" } if (-not $existingMatch) { $updatedContent += "`n$line" $existingLines.Add($line) | Out-Null } } # 写回文件,用ASCII编码保证兼容性 $updatedContent | Set-Content $_.FullName -Force -Encoding ASCII }
核心逻辑说明
- 先批量定义需添加的配置,避免重复编写
- 过滤空行保证文件内容整洁
- 优先替换已有配置项的目标值
- 通过哈希集合快速判断配置项是否存在,避免重复添加相同键的配置
- 采用ASCII编码写入,确保RDP文件能被系统正确识别
Python 实现方案
如果偏好Python,可使用以下脚本实现相同功能:
Python 脚本
import glob # 定义需要添加的配置行 new_config_lines = [ "screen mode id:i:2", "use multimon:i:1", "desktopwidth:i:800", "desktopheight:i:600", "session bpp:i:32", "winposstr:s:0,3,0,0,800,600", "compression:i:1", "keyboardhook:i:2", "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" ] # 递归查找所有RDP文件 for rdp_path in glob.glob(r"C:\Users\user\Desktop\*.rdp", recursive=True): # 读取现有内容,过滤空行 with open(rdp_path, 'r', encoding='utf-8') as f: existing_lines = [line.strip() for line in f if line.strip()] # 替换use multimon的配置值 updated_lines = [] for line in existing_lines: if line.startswith("use multimon:i:"): updated_lines.append("use multimon:i:1") else: updated_lines.append(line) # 提取现有配置的键,用于去重 existing_keys = {line.split(":i:")[0].split(":s:")[0] for line in updated_lines} # 添加缺失的配置行 for line in new_config_lines: config_key = line.split(":i:")[0].split(":s:")[0] if config_key not in existing_keys: updated_lines.append(line) existing_keys.add(config_key) # 写回文件,用ASCII编码保证兼容性 with open(rdp_path, 'w', encoding='ascii') as f: f.write('\n'.join(updated_lines) + '\n')
核心逻辑说明
- 用
glob递归遍历目标路径下的所有RDP文件 - 读取时过滤空行,保持文件内容整洁
- 优先替换指定配置项的目标值
- 通过集合存储已有配置的键,避免重复添加相同配置项
- 采用ASCII编码写入,确保RDP文件的系统兼容性
内容的提问来源于stack exchange,提问作者work_Q
相关产品推荐
相关产品推荐

