运行 If 语句后 PowerShell 脚本停止

运行 If 语句后 PowerShell 脚本停止

我被难住了。我在开发时在 2012 R2 机器上运行了下面的代码。这部分代码所做的就是获取主机名,从末尾抓取数字,运行一个函数来查看它是奇数还是偶数,然后根据该数字设置存储位置。

由于某种原因,在 If 语句返回值后,脚本就停止运行,就像脚本已经结束一样。正如您所见,我添加了 write-debug“消息 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”语句。摘要如下:

返回: 这会返回上一个调用点。如果您从脚本(任何函数之外)调用此命令,它将返回到 shell。如果您从 shell 调用此命令,它将返回到 shell(这是从 shell 运行的单个命令的上一个调用点)。如果您从函数调用此命令,它将返回到调用该函数的位置。

返回到调用点之后的任何命令的执行都将从该点继续。如果从 shell 调用脚本,并且该脚本在任何函数之外包含 Return 命令,那么当它返回到 shell 时,将不再运行任何命令,因此以这种方式使用的 Return 本质上与 Exit 相同。

所以,您必须从“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
}

相关内容