@NewDevLab

Как правильно проверить возврат функции?

Почему не срабатывает первый IF?
[string] $pathToProjectFile = "C:\AnyProject.csproj";

function TestPath($Path) {
    return (Test-Path -Path $Path -PathType leaf)
}

$Result = TestPath($pathToProjectFile);
$Result.GetType().FullName
$Result

# Проверка наличия файла проекта
if (TestPath($pathToProjectFile) -eq $false) {
    Write-Host "1. Файл проекта '$pathToProjectFile' не существует!" -foregroundcolor red
    exit;
}

# Проверка наличия файла проекта
if ($Result -eq $false) {
    Write-Host "2. Файл проекта '$pathToProjectFile' не существует!" -foregroundcolor red
    exit;
}
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
@MaxKozlov
потому что первый IF должен выглядеть как
if ((TestPath $pathToProjectFile) -eq $false) {
В Powershell надо весь вызов брать в скобки, а не аргументы
ваши "-eq $false" становятся длполнительными аргументами функции, а не операторами сравнения
В этом можно убедиться, если вашу функцию записать как
function TestPath($Path) {
    Write-Host -fore Green "Args: $args"
    return (Test-Path -Path $Path -PathType leaf)
}

И тогда вы увидите
Args: -eq False
Зелёного цвета
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@BeatHazard
В условии первого IFа вынесите TestPath($pathToProjectFile) за пределы условия, загоните его в переменную, а в IF вставьте эту переменную, типа такого:
$TestPath = TestPath($pathToProjectFile)
if ($TestPath -eq $false)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы