Странное поведение основного сценария Powershell

У меня есть небольшой сценарий. Что я хочу проверить с помощью «If, else statement». У меня такие же значения переменных, но когда я пытаюсь их сравнить, это дает другое условие, но оно должно давать истинное условие. Ниже приведены мои вары с результатами.

$ASE1=Get-Content -path "C:\Program Files\Kratos\Tools\ASE\cnf\_ASE.cnf" | out-string -Stream | Select-String "VERSION"

Версия 85

$ASE2=Get-Content -path "C:\ProgramData\Kratos\Tools\NaCl\Files\xASE.cnf"| out-string -Stream | Select-String "VERSION"

Версия 85

if ($ ASE1 -eq $ ASE2) { эхо "равно"} else { echo "not equal"}

Этот небольшой скрипт выше возвращает мне условие "not equal", но в действительности эти переменные равны друг другу. Вы знаете, что я делаю не так?

0
задан 26 June 2019 в 15:32
2 ответа

Select-String возвращает не строку, а объект Microsoft.PowerShell.Commands.MatchInfo

  • Поскольку эти объекты различаются ] ожидается ваш результат. (см. вывод $ ASE1, $ ASE2 )
  • И Get-Content, и Out-String из вашего примера являются лишними.
  • Поскольку шаблон основан на RegEx, вы можете использовать (группа захвата ), чтобы просто получить цифры своей версии.
$Pattern = 'Version (\d+)'
$ASE1 = Select-String -Pattern $Pattern -Path "C:\Program Files\Kratos\Tools\ASE\cnf\_ASE.cnf"
$ASE2 = Selcet-String -Pattern $Pattern -Path "C:\ProgramData\Kratos\Tools\NaCl\Files\xASE.cnf"
if($ASE1.Matches.Groups[1].Value -eq $ASE2.Matches.Groups[1].Value) { 
    "equal"
} else {
    "not equal"
}
0
ответ дан 23 November 2019 в 23:15

-readcount 0 работает так же, как конвейерная передача в исходную строку.
Передача по конвейеру из строки или получения содержимого в строку выбора создает узкое место в вашем скрипте.

$ASE1 = Get-Content "C:\Program Files\Kratos\Tools\ASE\cnf\_ASE.cnf" -ReadCount 0
$ASE2 = Get-Content "C:\ProgramData\Kratos\Tools\NaCl\Files\xASE.cnf" -ReadCount 0
[regex]$Pattern = 'Version\s\d+'
if ($Pattern.Matches($ASE1).value -eq $Pattern.Matches($ASE2).value) { 
    "equal"
}
else {
    "not equal"
}
0
ответ дан 23 November 2019 в 23:15

Теги

Похожие вопросы