使用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
相关产品推荐
相关产品推荐

