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

使用PowerShell按部分文件名查找文件并执行字符串替换的问题

批量修改OpenVPN配置文件服务器地址

我需要批量修改员工的OpenVPN配置文件,把其中的旧服务器地址x.x.x.x替换成新地址y.y.y.y。这些配置文件以用户名命名,存放在C:\Program Files\OpenVPN\config\路径下,手动修改单个文件可行,但要实现自动化避免重复操作,且操作需要管理员权限。

当前编写的脚本如下:

$path="C:\Program Files\OpenVPN\config\"
$ConfigFile = Get-ChildItem -Path $path -Recurse -Filter "*.ovpn" | select name
(Get-Content $ConfigFile) -replace 'x.x.x.x', 'y.y.y.y' | Set-Content $ConfigFile

脚本问题分析

  • select name仅提取了文件名,没有完整路径,Get-Content无法识别文件的实际位置
  • 未循环处理多个.ovpn文件,直接批量传入会导致执行报错

修正后的脚本

# 定义OpenVPN配置文件路径
$configPath = "C:\Program Files\OpenVPN\config\"

# 获取所有.ovpn配置文件的完整对象
$ovpnFiles = Get-ChildItem -Path $configPath -Recurse -Filter "*.ovpn"

# 循环处理每个配置文件
foreach ($file in $ovpnFiles) {
    # 读取文件内容,替换旧地址为新地址,指定UTF-8编码写入原文件避免乱码
    (Get-Content $file.FullName -Raw) -replace 'x.x.x.x', 'y.y.y.y' | Set-Content $file.FullName -Encoding UTF8
}

注意事项

  • 必须以管理员身份运行PowerShell执行此脚本
  • -Raw参数可一次性读取整个文件,提升处理效率
  • 指定-Encoding UTF8是为了匹配OpenVPN配置文件的默认编码,防止出现乱码

内容的提问来源于stack exchange,提问作者Eddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:45:20