You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 13:40:33