У меня есть 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 первой функции, но я не уверен, что делаю неправильно.
А что насчет команды kubectl
, которая всегда что-то возвращает? Положительный результат или сообщение об ошибке? В этом случае ваша функция IsPodRunning
никогда не вернет $false.
Почему бы просто не установить точку останова отладки и не выполнить ее?
Существует несколько причин такого конфликта функций 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))
После внесения изменений попробуйте проверить состояние работы модуля, как показано ниже, и у меня все сработало, как и ожидалось.
Как вы пришли к выводу, что «
WaitForPodStart -podName "podName1"
не вызывает вторую функцию»? Какие конкретные наблюдения вы сделали?