Строки файла Powershell с комментариями и комментариями .properties

#powershell

#powershell

Вопрос:

У меня есть файл test.properties, который имеет следующий формат:

 hostName=hostName1
#hostName=hostName2
portNum=portNum1
#portNum=portNum2
 

Я пытаюсь написать сценарий powershell, который при запуске будет комментировать любые имена хостов и номера портов и раскомментирует только тот новый, который я хочу передать.

Если бы у меня была переменная, которая была $hostNameToUncomment, тогда я бы хотел, чтобы поток говорил что-то вроде:

 $hostNameToUncomment=hostName1

$propertiesFile = Get-Content ($path) | ForEach-Object {
     if hostName anywhere is uncommented, comment it

     if hostName value = $hostNameToUncomment,
          Remove the '#' from that line
}

 

Как это можно сделать?

Комментарии:

1. Почему бы не настроить хэш-таблицу с именем хоста в качестве ключа и номером порта в качестве значения. Тогда вы можете просто передать имя хоста и использовать его для ссылки на порт #?

Ответ №1:

Вы можете использовать a switch для чтения файла и воспользоваться его -Regex переключателем:

 $toUncomment = 'hostname2'
$file = 'path/to/file.txt'

$result = switch -Regex -File($file)
{
    "^#hostname=$toUncommentb"
    {
        $Matches[0] -replace '^#'
    }
    "^[^#]w =(?!$toUncomment).*"
    {
        $Matches[0] -replace '^','#'
    }
    Default
    {
        $_
    }
}

$result | Out-File $file
 

См . https://regex101.com/r/sfhWz4/2 для объяснения обоих регулярных выражений используйте hostname2 в качестве примера.

Комментарии:

1. Это сработало отлично! Спасибо!

2. @BennyB рад помочь