2015-11-06 120 views
0

我有一个Powershell脚本运行,它从一个点源.ps1文件调用一个函数。
在这个函数中,我做了一个exit 1,它终止了整个脚本(如预期的那样)。
当我现在看$?$LASTEXITCODE它说True0
不应该有False1
有什么我没有看到?从子功能终止时从powershell脚本退出代码

例子:
主脚本:

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 
     } 
    } 
} 
+0

显示您的代码。我尝试,描述你的内容,并在结果中得到'False'和'1'。 – PetSerAl

+0

已添加到原文 – user3322838

+1

请包括调用主脚本和检查'$?'和'$ LASTEXITCODE'的代码。在function.ps1中你有'Log-Finish',但在主脚本中调用'Log-Error'。 – PetSerAl

回答

0

你会发现一个解释你的 “问题” 在这个职位http://blogs.technet.com/b/heyscriptingguy/archive/2011/05/12/powershell-error-handling-and-why-you-should-care.aspx

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

GET-项目afilethatdoesntexist.txt

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

那么你能告诉我为什么$?设置为True?因为就Windows PowerShell而言,脚本已成功运行 。 脚本中的每一步都被执行 - 无论是否导致错误。而且 在脚本告诉Windows PowerShell执行的操作中取得了成功。 这并不一定意味着脚本内的命令不会产生任何错误。看看它变得有多混淆?而且我们还没有开始深入!