我运行的Powershell脚本从点源.ps1文件中调用函数
在这个函数里面我做了一个exit 1
来终止整个脚本(如预期的那样)
现在,当我查看$?
和$LASTEXITCODE
时,它会显示True
和0
。
不应该有False
和1
吗?
有什么我看不到的吗?
例:
主要脚本:
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 :(得分:0)
另外,请记住,当运行外部命令或脚本时,$?将 并不总是告诉你一个真实的故事。让我们看看为什么。创建一个脚本 只有一行 - 我们最喜欢的错误生成命令:
Get-Item afilethatdoesntexist.txt
现在运行脚本并查看输出。你会注意到主持人 显示错误。您还会注意到$ error包含 脚本中的命令生成的错误对象。但是$? 设置为TRUE!哦,不要按照我提到的顺序尝试这个 因为它会扭曲$?的结果。
那么你能告诉我为什么$?设置为True?因为你的脚本运行了 成功就Windows PowerShell而言。每一步 脚本已执行 - 是否导致错误。然后 成功地做了脚本告诉Windows PowerShell做的事情。 它并不一定意味着脚本中的命令没有 生成任何错误。看看它变得多么混乱?我们没有 开始变深了!