nordz0r
@nordz0r

Как в powershell изменять только первое найденное значение?

Добрый вечер, подскажите, как мне модифицировать код, чтобы изменялось только первое найденое совпадение (а не все после -match)

$VPNServer = "vpn.domain.ru"
$ConfigVPN = "$env:APPDATA\Microsoft\Network\Connections\Pbk\rasphone.pbk"
$output = (Get-Content ("$ConfigVPN") -Raw) -split '(?=\[[^\]]+\])' | 
foreach {
   if ($_ -match "$VPNServer"){
   $tmp = $_
   $tmp = $tmp -replace 'ExcludedProtocols=\d+','ExcludedProtocols=8'
   $tmp = $tmp -replace 'DisableClassBasedDefaultRoute=\d+','DisableClassBasedDefaultRoute=1'
   $tmp = $tmp -replace 'PreferredHwFlow=\d+','PreferredHwFlow=1'
   $tmp = $tmp -replace 'PreferredProtocol=\d+','PreferredProtocol=1'
   $tmp = $tmp -replace 'PreferredCompression=\d+','PreferredCompression=1'
   $tmp = $tmp -replace 'PreferredSpeaker=\d+','PreferredSpeaker=1'
   $tmp = $tmp -replace 'AutoTiggerCapable=\d+','AutoTiggerCapable=1'
   $tmp } else {$_}
}
$output = $output -join ''
$output
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 2
@MaxKozlov Куратор тега PowerShell
Мне кажется, вам стоит пойти по более общему пути.
раз rasphone.pbk - это фактически ini, стоит поискать что-нибудь про чтение ini файлов на powershell
например, вот это - классика
https://devblogs.microsoft.com/scripting/use-power...
Ответ написан
Комментировать
hekkaaa
@hekkaaa
C#/.NET Developer
Привет.
Если хочешь решение именно в своем коде, то тебе просто не хватает break в условии if.
Вот простенький пример с демонстрацией:

$hostPC = ("ya.ru", , "ya.ru", "ya.ru", "google.ru","docs.microsoft.com")
foreach ($item in $hostPC) {
   if($item -eq "ya.ru"){
       Write-Host("MEOW");
       break;
   }
}

Если не понятно, запусти код с break и без него.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы