- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑以下脚本
#requires -version 2.0
[CmdletBinding()]
param
(
)
$script:ErrorActionPreference = "Stop"
Set-StrictMode -Version Latest
function PSScriptRoot { $MyInvocation.ScriptName | Split-Path }
function ThrowFunction($i)
{
"ThrowFunction $i"
$someNonExistingVariable
}
@(1, 2, 3) | ForEach-Object -Process { ThrowFunction $_ }
当我们运行它时,我们得到
C:\dev> .\MyScript.ps1
ThrowFunction 1
ForEach-Object : The variable '$someNonExistingVariable' cannot be retrieved because it has not been set.
At C:\dev\MyScript.ps1:18 char:28
+ @(1, 2, 3) | ForEach-Object <<<< -Process { ThrowFunction $_ }
+ CategoryInfo : InvalidOperation: (someNonExistingVariable:Token) [ForEach-Object], RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined,Microsoft.PowerShell.Commands.ForEachObjectCommand
如您所见,它在第 18 行报告了问题
但实际问题在第 15 行
我发现如果我们更改第 8 行:
$script:ErrorActionPreference = "Continue"
我们得到
C:\dev> .\MyScript.ps1
ThrowFunction 1
The variable '$someNonExistingVariable' cannot be retrieved because it has not been set.
At C:\dev\MyScript.ps1:15 char:29
+ $someNonExistingVariable <<<<
+ CategoryInfo : InvalidOperation: (someNonExistingVariable:Token) [], RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined
ThrowFunction 2
The variable '$someNonExistingVariable' cannot be retrieved because it has not been set.
At C:\dev\MyScript.ps1:15 char:29
+ $someNonExistingVariable <<<<
+ CategoryInfo : InvalidOperation: (someNonExistingVariable:Token) [], RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined
ThrowFunction 3
The variable '$someNonExistingVariable' cannot be retrieved because it has not been set.
At C:\dev\MyScript.ps1:15 char:29
+ $someNonExistingVariable <<<<
+ CategoryInfo : InvalidOperation: (someNonExistingVariable:Token) [], RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined
您会看到,现在第 15 行已按预期报告。
现在的问题是如何获得正确的线路并具有“停止”行为。
我尝试了很多方法,但没有一个对我有用。
我试过了
trap { throw $_ }
trap { $_.InvocationInfo }
trap { Get-PSCallStack }
但他们都没有得到正确的线路
然后我尝试切换
$script:ErrorActionPreference = "Continue"
发现我一加trap就又报错行了。
所以我仍在寻找可行的解决方案...
最佳答案
感谢@Keith Hill,我找到了解决方案
魔法线是
trap { throw $Error[0] }
这个脚本
#requires -version 2.0
[CmdletBinding()]
param
(
)
$script:ErrorActionPreference = "Stop"
Set-StrictMode -Version Latest
function PSScriptRoot { $MyInvocation.ScriptName | Split-Path }
trap { throw $Error[0] }
function ThrowFunction($i)
{
"ThrowFunction $i"
$someNonExistingVariable
}
@(1, 2, 3) | ForEach-Object -Process { ThrowFunction $_ }
返回
C:\Dev> .\MyScript.ps1
ThrowFunction 1
The variable '$someNonExistingVariable' cannot be retrieved because it has not been set.
At C:\Dev\MyScript.ps1:17 char:29
+ $someNonExistingVariable <<<<
+ CategoryInfo : InvalidOperation: (someNonExistingVariable:Token) [], RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined
太棒了!
关于powershell - 如何使用 $ErrorActionPreference = "Stop"获得正确的错误行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27645848/
今天我第一次尝试使用 PowerShell (v3.0),并对它的一些错误处理概念的奇怪实现方式感到非常沮丧。 我编写了以下代码(使用远程注册表 PowerShell 模块) try { Ne
两者, $ErrorActionPreference 变量和 -ErrorAction cmdlet 参数应该定义 non-terminating errors 的行为. 由于变量是全局的并且参数特定
考虑以下脚本 #requires -version 2.0 [CmdletBinding()] param ( ) $script:ErrorActionPreference = "Stop" Set
我们将 PowerShell 用于一些自动化构建脚本。不幸的是,默认情况下,PowerShell 在出错后继续。 通常,我可以通过设置 $ErrorActionPreference = Stop 来改
我需要处理Powershell脚本中的非终止错误。最有效的方法是什么? 将$ErrorActionPreference变量设置为停止并使用try/catch $ErrorActionPreferenc
我希望我的模块中的所有函数都默认为 $ErrorActionPreference = 'Stop' .是否可以不修改所有功能? 我每个函数都有一个文件。 最佳答案 假设你的模块是一个脚本模块,即用Po
我有一些 powershell 脚本,其中包含以下内容: $ErrorActionPreference = "stop" trap { Write-Error $_.Exception; } 使用 p
默认情况下,环境的 $ErrorActionPreference 设置为“继续”。当 cmdlet 抛出错误时,脚本将继续。 我希望它“停止”并陷入我的 try-catch block 的捕获中。在我
问题:powershell 脚本由于使用 $ErrorActionPreference 时应由 try 块捕获的异常而停止 例子: $ErrorActionPreference = 'Stop' tr
将 -Verbose 添加到 Copy-Item 命令似乎会使该命令忽略 $ErrorActionPreference 的值。这是一个错误还是我不明白的东西? 我认为这个脚本应该在它显示“为什么这样显
我的情况: $ErrorActionPreference = "Stop"; "1 - $ErrorActionPreference;" Get-ChildItem NoSuchFile.txt -E
我已经在我的 windows 10 机器上安装了 Docker for Windows。当我尝试从“windows 容器”“切换到 linux 容器”时,出现错误。 Unable to start:
我是一名优秀的程序员,十分优秀!