У меня есть небольшой сценарий. Что я хочу проверить с помощью «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", но в действительности эти переменные равны друг другу. Вы знаете, что я делаю не так?
Select-String возвращает не строку, а объект Microsoft.PowerShell.Commands.MatchInfo
объекты
различаются ] ожидается ваш результат. (см. вывод $ ASE1, $ ASE2
) $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"
}
-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"
}