Замена текста - строки и пробелы - PullRequest
0 голосов
/ 18 января 2019

Моя компания развернула Splunk для сбора журналов и отчетов об изменениях в системе. Splunk использует два файла - input.conf и server.conf, чтобы отслеживать существующее имя хоста и сообщать об этом элементу управления Splunk.

Если имя хоста изменяется (обычно в нашей среде), система сообщает «Проверка нарушенного хоста», требуя, чтобы мы вошли в каждую систему и заменили старое имя хоста новым.

Это сложно с 1000 системами в полевых условиях.

Я хочу автоматизировать этот процесс, и у меня возникают проблемы с написанным мной сценарием (см. Ниже).

И входы, и сервер используют этот формат для файлов .conf (.conf - это просто текстовый файл с расширением .conf).

Host = systemname 

Сценарий, приведенный ниже, в данный момент будет читать текстовый файл, а затем вместо замены 'systemname' добавит изменения в конец существующего значения. то есть. вместо hostname1 & hArr; 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"

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Я бы использовал регулярное выражение, которое использует утверждение нулевой длины
сопоставить что-либо в строке после ключевого слова (даже буквальную звездочку)

Этот скрипт изменяется на месте, используя то же имя файла при сохранении.

## 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
0 голосов
/ 18 января 2019

Оператор -replace соответствует регулярному выражению. Итак, ваше совпадение выражений:

"host = *"

завершит свое совпадение после того, как совпадет с его первым «host =», не включая имя хоста, и это то, что будет заменено, оставив все без изменений после этого. Чтобы включить имя хоста в выражение соответствия, используйте это регулярное выражение:

"host = .*"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...