【发布时间】:2019-06-13 00:53:05
【问题描述】:
我的公司已部署 Splunk 来收集日志并报告系统更改。 Splunk 使用两个文件 - inputs.conf 和 server.conf 来跟踪现有主机名并将其报告给 Splunk 控制。
如果主机名发生更改(在我们的环境中很常见),系统会报告“Broken Host Sanity check”,要求我们登录每个系统并将旧主机名替换为新主机名。
在现场有 1000 个系统时,这很困难。
我想自动化这个过程,但我编写的脚本有问题(见下文)。
输入和服务器都对 .conf 文件使用这种格式(.conf 只是一个带有 .conf 扩展名的 txt 文件)。
主机 = 系统名下面的脚本当前将读取文本文件,而不是替换“systemname”,而是将更改附加到现有值的末尾。 IE。而不是hostname1 ⇔ hostname2 它是Hostname2Hostname1。
$InputsOLD = "host = *"
$InputsNEW = "host = $Env:COMPUTERNAME"
Get-Content "C:\Program Files\SplunkUniversalForwarder\etc\system\local\inputs.conf" |
Foreach-Object {$_ -replace "$InputsOLD","$InputsNEW"} |
Set-Content "C:\Program Files\SplunkUniversalForwarder\etc\system\local\inputs_1.conf"
$ServerOLD = "serverName = *"
$ServerNew = "serverName = $Env:COMPUTERNAME"
Get-Content "C:\Program Files\SplunkUniversalForwarder\etc\system\local\server.conf" |
Foreach-Object {$_ -replace "$ServerOLD","$ServerNew"} |
Set-Content "C:\Program Files\SplunkUniversalForwarder\etc\system\local\server_1.conf"
【问题讨论】:
-
-replace使用正则表达式。您的$ServerOld不是正则表达式。使用'servername\s*=.*'作为-replace的第一部分
标签: string powershell text replace