Powershell, если функция вызывает другую функцию

У меня есть 2 функции, когда я вызываю вторую функцию из первой, всегда возвращает true, не имеет значения, имеет ли вторая функция false возврат:

function IsPodRunning($podName) {
  Write-Output "IsPodRunning $podName"
  return $false;
}

function WaitForPodStart($podName) {
  While ($true) {
    If (IsPodRunning -podName $podName) {
      Write-Output "WaitForPodStart IsPodRunning"
      Break
    }else {
      Write-Output "WaitForPodStart IsNotPodRunning"
    }
    Start-Sleep -Milliseconds 100
  }
}

Вторая функция работает так, как и ожидалось, если я вызываю ее напрямую, а не через другую функцию. IsPodRunning -podName "podName1" Работает как ожидалось

WaitForPodStart -podName "podName1" не вызывает вторую функцию

Проведя кучу тестов, я обнаружил, что проблема может быть в операторе if первой функции, но я не уверен, что делаю неправильно.

Как вы пришли к выводу, что «WaitForPodStart -podName "podName1" не вызывает вторую функцию»? Какие конкретные наблюдения вы сделали?

Mathias R. Jessen 25.07.2024 20:09

А что насчет команды kubectl, которая всегда что-то возвращает? Положительный результат или сообщение об ошибке? В этом случае ваша функция IsPodRunning никогда не вернет $false.

Theo 25.07.2024 20:33

Почему бы просто не установить точку останова отладки и не выполнить ее?

Daniel 25.07.2024 21:16
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
3
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Существует несколько причин такого конфликта функций PowerShell, которые необходимо проверить. Проверьте ниже, чтобы решить проблему.

Чтобы избежать проблем с возвращаемыми значениями функции, используйте Write-Host вместо Write-Output для вывода результатов на консоль. Write-Host записывает непосредственно в консоль, тогда как Write-Output отправляет выходные данные в конвейер, которые можно интерпретировать как часть возвращаемого значения функции.

Ссылка ТАК для получения соответствующей информации о разнице между ними.

function IsPodRunning($podName) {
  Write-Host "IsPodRunning $podName"
  return $false;
}

Альтернативно вы также можете удалить оператор return из функции PowerShell и изменить код, как показано ниже.

function IsPodRunning($podName) {
  Write-Host "IsPodRunning $podName"
  $false;
}

А также проверьте, правильно ли указано утверждение под WaitForPodStart:

If ($(IsPodRunning -podName $podName))

После внесения изменений попробуйте проверить состояние работы модуля, как показано ниже, и у меня все сработало, как и ожидалось.

Другие вопросы по теме

Powershell: добавлять новую строку после каждой строки, содержащей заданную строку
Как извлечь полный идентификатор производителя/поставщика монитора в Windows? (аналогично команде Linux hwinfo --monitor)
Создайте синопсис строки
Я не могу извлечь таблицы .sql CREATE TABLE для каждой таблицы в базе данных SQL Azure в репозитории Azure
Измените OuterXml данного узла, чтобы сохранить его в файле, но сделайте узел бесполезным
Возникает ошибка при попытке отключить конвейер Azure DevOps с помощью Powershell
Как просмотреть все видеофайлы (вид: видео) независимо от того, какое расширение имеют эти файлы (может быть .mkv/.mp4/.mov и т. д.)?
Как преобразовать вывод команды так, чтобы в powershell сохранялись только последние 1000 строк
Get-MgGroupMember по отображаемому имени вместо userID
Привести к сбою конвейера, если в журнале появляется определенное предложение. Найдите подстроку, но игнорируйте определенную подстроку

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

Как ограничить локальный доступ к определенным конечным точкам в архитектуре распределенной виртуальной сети с помощью VPN типа «сеть-сеть»?
Получить документы/файлы с диска Share Point
Получение «System.IO.FileNotFoundException: не удалось загрузить файл или сборку Azure.Core, версия = 1.38.0.0» в приложении-функции Azure
Построитель выражений фабрики данных Azure: ошибка структурирования JSON с помощью вложенных массивов и объектов
Конвейер ci, создающий артефакт для приложения-функции, не содержит функций
Как я могу вызвать доверенную подпись Azure из ОС Linux?
Создать пул в пакетном режиме Azure с назначенным пользователем управляемым удостоверением
Как создать идентификатор непрерывной последовательности независимо от запусков в Databricks
Функция Azure с проблемой сети речи Azure AI (WS_OPEN_ERROR_UNDERLYING_IO_OPEN_FAILED)
Я не могу извлечь таблицы .sql CREATE TABLE для каждой таблицы в базе данных SQL Azure в репозитории Azure