配置更新 - PowerShell
Config Update - PowerShell
希望有人能指出我正确的方向。
背景:
环境是 Windows 10 -
我需要为我们的用户更新配置文件中的一行,从数字 IP 到字符串。这被限定到的每个设备都有可能在脚本的定义路径内有多个配置文件,并且存在不同的先前用户配置文件。为此,我将脚本作为通配符来更新所有找到的配置,以更新相同的行,因此它是统一的并避免部署后发生冲突。
目前该脚本用于替换值,但是当脚本选择其他配置时,它们将被组合并为找到的每个配置重新输入。
当前形式的脚本
((Get-Content -Path "C:\Program Files\ProgramX\config\brand-protocol-port-*-config.ext" -Raw) -replace 'X.X.X.X','VALUE') |
Set-Content -Path " C:\Program Files\ProgramX\config\brand-protocol-port-*-config.ext "
Get-Content -Path " C:\Program Files\ProgramX\config\brand-protocol-port-*-config.ext "
结果是,如果有 John Smith 和 John Walker 的配置文件 - 在脚本 运行 之后,文件会按预期更新,但不会更新 2 个单独的配置文件,而是更新它们然后在每个实例中将更新的文件添加在一起。
不胜感激!
你需要的是使用一个循环,这样每个文件都可以单独处理:
# since we're using the regex `-replace` operator, the dots need to be escaped
$ipToFind = [regex]::Escape('X.X.X.X')
$replaceWith = 'VALUE'
Get-ChildItem -Path 'C:\Program Files\ProgramX\config' -Filter 'brand-protocol-port-*-config.ext' -File | ForEach-Object {
(Get-Content -Path $_.FullName -Raw) -replace $ipToFind, $replaceWith | Set-Content -Path $_.FullName
}
希望有人能指出我正确的方向。
背景:
环境是 Windows 10 - 我需要为我们的用户更新配置文件中的一行,从数字 IP 到字符串。这被限定到的每个设备都有可能在脚本的定义路径内有多个配置文件,并且存在不同的先前用户配置文件。为此,我将脚本作为通配符来更新所有找到的配置,以更新相同的行,因此它是统一的并避免部署后发生冲突。 目前该脚本用于替换值,但是当脚本选择其他配置时,它们将被组合并为找到的每个配置重新输入。
当前形式的脚本
((Get-Content -Path "C:\Program Files\ProgramX\config\brand-protocol-port-*-config.ext" -Raw) -replace 'X.X.X.X','VALUE') |
Set-Content -Path " C:\Program Files\ProgramX\config\brand-protocol-port-*-config.ext "
Get-Content -Path " C:\Program Files\ProgramX\config\brand-protocol-port-*-config.ext "
结果是,如果有 John Smith 和 John Walker 的配置文件 - 在脚本 运行 之后,文件会按预期更新,但不会更新 2 个单独的配置文件,而是更新它们然后在每个实例中将更新的文件添加在一起。
不胜感激!
你需要的是使用一个循环,这样每个文件都可以单独处理:
# since we're using the regex `-replace` operator, the dots need to be escaped
$ipToFind = [regex]::Escape('X.X.X.X')
$replaceWith = 'VALUE'
Get-ChildItem -Path 'C:\Program Files\ProgramX\config' -Filter 'brand-protocol-port-*-config.ext' -File | ForEach-Object {
(Get-Content -Path $_.FullName -Raw) -replace $ipToFind, $replaceWith | Set-Content -Path $_.FullName
}