String 文本替换-字符串和;空间

String 文本替换-字符串和;空间,string,powershell,text,replace,String,Powershell,Text,Replace,我的公司部署了Splunk来收集日志,并报告系统更改。 Splunk使用两个文件inputs.conf和server.conf跟踪现有主机名并将其报告给Splunk控件 如果主机名发生更改(在我们的环境中很常见),系统会报告“断开的主机健全性检查”,要求我们登录到每个系统并用新主机名替换旧主机名 这对于现场的1000个系统来说是困难的 我想自动化这个过程,但我写的脚本有问题(见下文) 输入和服务器对.conf文件都使用这种格式(.conf只是一个扩展名为.conf的txt文件) -replace

我的公司部署了Splunk来收集日志,并报告系统更改。 Splunk使用两个文件inputs.conf和server.conf跟踪现有主机名并将其报告给Splunk控件

如果主机名发生更改(在我们的环境中很常见),系统会报告“断开的主机健全性检查”,要求我们登录到每个系统并用新主机名替换旧主机名

这对于现场的1000个系统来说是困难的

我想自动化这个过程,但我写的脚本有问题(见下文)

输入和服务器对.conf文件都使用这种格式(.conf只是一个扩展名为.conf的txt文件)


-replace
运算符基于正则表达式进行匹配。所以你的匹配表达式:

"host = *"
"host = .*"
将在匹配其第一个“host=”后结束匹配,不包括主机名,这就是将被替换的内容,之后保留所有内容不变。要在匹配表达式中包含主机名,请使用以下正则表达式:

"host = *"
"host = .*"

我会使用一个正则表达式,它使用
匹配关键字后一行中的任何内容(即使是文字星号)

此脚本在原地更改,保存时使用相同的文件名

## Q:\Test\2019\01\18\SO_54259368.ps1

Push-Location "C:\Program Files\SplunkUniversalForwarder\etc\system\local"

$Clie = "inputs.conf"
$Serv = "server.conf"

(Get-Content $Clie) -replace "(?<=^host = ).*$",$Env:COMPUTERNAME | Set-Content $Clie
(Get-Content $Serv) -replace "(?<=^serverName = ).*$",$Env:COMPUTERNAME | Set-Content $Serv

Pop-Location
##Q:\Test\2019\01\18\SO_54259368.ps1
推送位置“C:\Program Files\SplunkUniversalForwarder\etc\system\local”
$Clie=“inputs.conf”
$Serv=“server.conf”

(获取内容$clie)-替换“(.<代码> -替换< /代码>)使用正则表达式。您的<代码> $Server Orth/<代码>不是正则表达式。使用<代码> ServNeals**** <代码>第一部分代码>替换< /代码> @ MadManuel,如果您发现答案已解决了您所考虑的问题。