1

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

По какой-то причине после того, как оператор If возвращает значение, сценарий просто останавливается, как если бы сценарий завершился. Как вы можете видеть, я добавил запись-отладку "сообщение 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

Я попытался написать-хост и запись-вывод, но безуспешно. Вот вывод из консоли:

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

1 ответ1

3

Пожалуйста, прочитайте этот пост от StackOverflow об операторе return. Вот резюме:

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

Выполнение любых команд после точки вызова, в которую она возвращается, будет продолжено с этой точки. Если скрипт вызывается из оболочки и содержит команду 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
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .