Скрипт PowerShell останавливается после выполнения оператора If

Скрипт PowerShell останавливается после выполнения оператора If

Я в тупике. Я запускаю код ниже на коробке 2012 R2, пока разрабатываю его. Все, что делает эта часть, это получает имя хоста, берет номер с конца, запускает функцию, чтобы проверить, является ли он четным или нечетным, а затем устанавливает место хранения на основе этого.

По какой-то причине после того, как оператор If возвращает значение, скрипт просто прекращает работу, как будто скрипт завершился. Как видите, я добавил write-debug "message 3", и он просто даже не регистрируется. Кто-нибудь знает какие-нибудь подводные камни PS для такого сценария? Или я где-то допустил ошибку. На сервере работает WMF 4.0.

function check-oddOrEven($number)
{
    If([bool]!($number%2))
    {
       $OddEvnResult = "Even"
       return $OddEvnResult
    }
    Else
    {
       $OddEvnResult = "Odd"
       return $OddEvnResult
    }
}

Write-Debug "message1" -debug

$oddStrgPath = "C:\ClusterStorage\Volume1"
$evnStrgPath = "C:\ClusterStorage\Volume2"

$hostname = $env:computername
#$hostname = "testN02"
$OddEvnSplit = $hostname.split('N')[1]

Write-Debug "message2" -debug

$OddEvnResult = check-oddOrEven $OddEvnSplit
if ($OddEvnResult -eq "Odd")
{
    write-host "Odd number in hostname detected (1,3,5..etc). Setting storage path to" $oddStrgPath
    #set-vmhost -VirtualHardDiskPath $oddStrgPath -VirtualMachinePath $oddStrgPath
    $OEresult= $oddStrgPath
    return $OEresult
}
else
{
    write-host "Even number in hostname detected (2,4,6..etc). Setting storage path to" $evnStrgPath
    #set-vmhost -VirtualHardDiskPath $evnStrgPath -VirtualMachinePath $oddStrgPath
    $OEresult= $evnStrgPath
    return $OEresult
}

Write-Debug "message3" -debug

Я пробовал write-host и write-output, но безуспешно. Вот вывод из консоли:

DEBUG: message1
DEBUG: message2
Even number in hostname detected (1,3,5..etc). Setting storage path to C:\ClusterStorage\Volume2
C:\ClusterStorage\Volume2

решение1

Пожалуйста прочтиэтот пост из StackOverflowо заявлении «возврат». Вот резюме:

Возвращаться: Это будетвернуться к предыдущей точке вызова. Если вы вызовете эту команду из скрипта (вне каких-либо функций), она вернется в оболочку. Если вы вызовете эту команду из оболочки, она вернется в оболочку (которая является предыдущей точкой вызова для одной команды, запущенной из оболочки). Если вы вызовете эту команду из функции, она вернется туда, откуда была вызвана функция.

Выполнение любых команд после точки вызова, в которую он возвращается, будет продолжено с этой точки. Если скрипт вызывается из оболочки и содержит команду Return вне каких-либо функций, то при возврате в оболочку больше нет команд для выполнения, что делает Return, используемый таким образом, по сути тем же самым, что и Exit.

Так,вам нужно удалить оператор return из ваших «if» и «else», оставив только переменную для отображения ее содержимого.

Пример:

    if ($OddEvnResult -eq "Odd")
{
    write-host "Odd number in hostname detected (1,3,5..etc). Setting storage path to" $oddStrgPath
    #set-vmhost -VirtualHardDiskPath $oddStrgPath -VirtualMachinePath $oddStrgPath
    $OEresult= $oddStrgPath
    $OEresult
}
else
{
    write-host "Even number in hostname detected (2,4,6..etc). Setting storage path to" $evnStrgPath
    #set-vmhost -VirtualHardDiskPath $evnStrgPath -VirtualMachinePath $oddStrgPath
    $OEresult= $evnStrgPath
    $OEresult
}

Связанный контент