Сравните результат передачи строки выбора со строкой - PullRequest
0 голосов
/ 27 января 2019

Я хочу сравнить grep a like результат Select-String со строкой и вернуть логическое значение true или false, но я не могу найти правильный синтаксис, когда помещаю все в выражения if / else.

Вывод ошибки, который я получаю:

В строке: 1 символ: 102 + ... Объект {$ _ |Пакеты Select-String 1 найдены.}) -Eq 1 пакетов найдено.) ... + ~~~~~~~~ Неожиданные «пакеты» токена в выражении или выражении.В строке: 1 символ: 102 + ... Объект {$ _ |Пакеты Select-String 1 найдены.}) -Eq Найдено 1 пакетов.) ... + ~~~~~~~~ Отсутствует закрытие ')' после выражения в операторе if.В строке: 1 символ: 117 + ... $ _ |Пакеты Select-String 1 найдены.}) -Eq Найдено 1 пакетов.) {Echo ... + ~ Неожиданный токен ')' в выражении или операторе.В строке: 1 символ: 184 + ... rometheus-wmi-exporter уже установлен, пропуская.} else {c: / pr ... + ~~~~ Неожиданный токен 'else' в выражении или утверждении.+ CategoryInfo: ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId: UnexpectedToken

Если я запускаю содержимое первого выражения, я получаю результат, как я ожидаю, но мне не удается вернуть логическое значениеtrue или false, когда я помещаю его в часть выражения if.

powershell -NoProfile -ExecutionPolicy unrestricted -Command --% "if ((choco list prometheus-wmi-exporter | Where-Object {$_ | Select-String "1 packages found."}) -eq "1 packages found.") { echo "prometheus-wmi-ex
porter is already installed, skipping." } else { c:/programdata/chocolatey/bin/choco.exe install --force -y prometheus-wmi-exporter.install }"

Моя конечная цель - получить совпадение, чтобы вернуть true, иначе вернуть false и выполнить оператор false.

Ответы [ 2 ]

0 голосов
/ 27 января 2019
  1. ваша команда не проверяет, что вы ожидаете, она просто повторяет, если такой пакет существует,
    нет, если он установлен -local
  2. вопрос помечен [powershell], но вы вызываете powershell? Это должно бежать из партии? Если так, то почему бы просто не использовать clist.exe (ярлык для списка choco) и найти для проверки?
clist -local|find /i "prometheus-wmi-exporter" &&(echo installed)||(echo not installed)
  1. команда слишком сложна, и если при проверке вывода choco с -(not)match должно быть достаточно.
if((clist -local) -match 'prometheus-wmi-exporter'){"installed"}else{"not installed"}
  1. перед переносом команды проверьте его напрямую
0 голосов
/ 27 января 2019

Попробуйте переписать так:

powershell -NoProfile -Command "if (choco prometheus-wmi-exporter | Select-String '1 packages found.') { echo 'prometheus-wmi-exporter is already installed, skipping.' } else { c:/programdata/chocolatey/bin/choco.exe install --force -y prometheus-wmi-exporter.install }"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...