从子函数

时间:2015-11-06 14:27:10

标签: function powershell exit

我运行的Powershell脚本从点源.ps1文件中调用函数 在这个函数里面我做了一个exit 1来终止整个脚本(如预期的那样) 现在,当我查看$?$LASTEXITCODE时,它会显示True0
不应该有False1吗? 有什么我看不到的吗?

例:
主要脚本:

Log-Error -Error "some error" -exit $True

在function.ps1中:

Function Log-Finish {
    [CmdletBinding()]
    Param ([Parameter(Mandatory=$false)][boolean]$Exit)
    Process {
        " error "
        # If $Exit is $true, end calling script
        If(($Exit) -or ($Exit -eq $True)) {
            Exit 1
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您将在此帖http://blogs.technet.com/b/heyscriptingguy/archive/2011/05/12/powershell-error-handling-and-why-you-should-care.aspx

中找到对“问题”的解释
  

另外,请记住,当运行外部命令或脚本时,$?将   并不总是告诉你一个真实的故事。让我们看看为什么。创建一个脚本   只有一行 - 我们最喜欢的错误生成命令:

     

Get-Item afilethatdoesntexist.txt

     

现在运行脚本并查看输出。你会注意到主持人   显示错误。您还会注意到$ error包含   脚本中的命令生成的错误对象。但是$?   设置为TRUE!哦,不要按照我提到的顺序尝试这个   因为它会扭曲$?的结果。

     

那么你能告诉我为什么$?设置为True?因为你的脚本运行了   成功就Windows PowerShell而言。每一步   脚本已执行 - 是否导致错误。然后   成功地做了脚本告诉Windows PowerShell做的事情。   它并不一定意味着脚本中的命令没有   生成任何错误。看看它变得多么混乱?我们没有   开始变深了!