如何使用PowerShell在多台电脑上替换test.ini文件指定行的不同内容
解决方案
首先你需要建立设备名和对应替换值的映射,同时解决PowerShell远程会话的变量传递问题,另外如果需要严格只修改第10行的内容,还要调整原脚本的匹配逻辑,避免其他行的hello被误替换。
最终修改后的脚本
# 定义设备与对应替换值的映射表 $replaceMap = @{ "st1" = "hi" "st2" = "bye" } $devices = Get-Content "C:\script\device.txt" foreach ($computer in $devices) { # 跳过不在映射表内的设备,避免异常 if (-not $replaceMap.ContainsKey($computer)) { Write-Warning "设备 $computer 未配置替换规则,跳过执行" continue } # 取当前设备对应的替换值 $targetValue = $replaceMap[$computer] Invoke-Command -ComputerName $computer -ScriptBlock { $filePath = "C:\test\test.ini" $content = Get-Content -Path $filePath # 只修改第10行(数组索引从0开始,第10行对应索引9) if ($content.Count -ge 10) { $content[9] = $content[9] -replace 'hello', $using:targetValue $content | Set-Content -Path $filePath # 输出修改后的第10行确认结果 $content[9] } else { Write-Warning "设备 $env:COMPUTERNAME 的test.ini文件行数不足10行,跳过修改" } } }
关键修改说明
- 新增设备映射表
$replaceMap,后续新增设备规则直接在表内添加即可,无需改动核心执行逻辑 - 用
$using:targetValue把本地定义的替换值传入远程执行的脚本块,解决远程会话无法读取本地变量的问题 - 调整文件读取逻辑,不再用
-Raw参数读取整个文件为字符串,按行读取后仅修改第10行内容,避免其他行的hello被误替换 - 增加异常判断逻辑,覆盖文件行数不足、设备未配置规则等异常场景
如果需要替换规则可配置不写死在脚本里,也可以把映射关系存为单独的CSV文件,用Import-Csv "C:\script\replace_rule.csv"读取生成映射表即可。
内容的提问来源于stack exchange,提问作者Nick S
相关产品推荐
相关产品推荐

