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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:06:03