Я вызвал функцию .ps1 в пакетном файле и присвоил результат переменной $Value
:
for /f "delims = " %%a in ('powershell -ExecutionPolicy Bypass .\test.ps1 -TargetGroupArn "arn:aws:elasticloadbalancing:eu-west-1:570226278193:targetgroup/whocms-uat/cc28ab2765d2503c" -TargetId "i-01fab6896b4efa925" -state "healthy" -timeout 240') do Set "$Value=%%a"
При проверке с помощью эха выводится правильный результат: 09/13/2018 16:34:34 : healthy
Echo Value received from PowerShell : %$Value%
Но я не могу проверить, содержит ли результат подстроку:
set str1=%Value%
if not x%str1:healthy=%==x%str1% echo It contains healthy
Почему вы не можете использовать -match "healthy"
в своей команде PowerShell вместо того, чтобы запускать ее в цикле For
, сохраняя вывод как переменную, а затем расширяя / заменяя строку в переменной, чтобы определить, была ли она частью вывода?
Следует также отметить, что вы пропустили использование символа доллара с именем переменной в команде set
.
С окружающими кавычками ведущий x
больше не нужен для защиты от пустых значений ...
Решение довольно простое:
if not "%$Value:healthy=%" == "%$Value%" echo It contains healthy
Двойные кавычки вокруг двух строковых аргументов между оператором ==
приводят к интерпретации всего, что находится между "
, как буквальные символы с помощью ЕСЛИ. В противном случае пробел внутри строки значения интерпретируется как разделитель аргументов.
ЕСЛИ включает двойные кавычки при сравнении двух строк. Это означает, что при использовании "..."
для одного аргумента, "..."
также должен использоваться для другого аргумента, иначе две сравниваемые строки никогда не будут равны.
Для получения более подробной информации о том, как ЕСЛИ сравнивает строки или целые числа, см. Ответ на Символ, эквивалентный NEQ, LSS, GTR и т. д. В пакетных файлах Windows.
PS: $
не имеет особого значения для командного процессора Windows при использовании в имени переменной среды. Он интерпретируется как буквальный символ, например буква.
Вы должны заключить свои сравнения строк в двойные кавычки, чтобы защитить пробелы и специальные символы.
if not "x%str1:healthy=%"= = "x%str1%" echo It contains healthy