Powershell Try Catch 在外部脚本失败时停止
Powershell Try Catch which stops when external script fails
我有几个 powershell 脚本,我是 运行 来自一个 powershell 脚本。
我正在使用 try-catch 来停止错误。但这不适用于我正在调用的外部脚本。我不能使用点源,因为一些脚本需要 32 位版本的 PowerShell(与 QuickBooks API 调用需要 32 位有关)
所以我目前使用完整路径名调用它,所以我有这样的东西:
try {
# QB API requires powershell 32 bit: Open Sales Order by Item Report Call
& C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Unrestricted -file $ScriptDir\QB_API_Open_Sales_Orders_by_Item.ps1
# QB API requires powershell 32 bit: Inventory List Call
& C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Unrestricted -file $ScriptDir\QB_API_Inventory_List.ps1
# x64bit powershell: Convert QB_API Sales and Inventory Fiels from XML to CSV using XSLT
& C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Unrestricted -file $ScriptDir\transform_xml.ps1
# x64bit powershell: run vendor vs sales file to get final output
& C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Unrestricted -file $ScriptDir\Create_Sales_order_MPN_using_join.ps1
}
catch
{
Write-Warning $Error[0]
}
如果我点源脚本它工作正常,但外部调用它,它不。关于如何捕获错误并停止脚本的建议?
如果您希望 try-catch 在 PowerShell 会话中处理可执行文件,则必须执行以下操作:
- 设置
$errorActionPreference = 'stop'
以便所有错误都终止
- 将可执行调用的错误流重定向到别处 -> 2>$null 例如。
$EAPBackup = $ErrorActionPreference
$ErrorActionPreference = 'Stop'
try {
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Unrestricted -file $ScriptDir\QB_API_Open_Sales_Orders_by_Item.ps1 2>$null
} catch {
Write-Warning $error[0]
}
$ErrorActionPreference = $EAPBackup
我有几个 powershell 脚本,我是 运行 来自一个 powershell 脚本。
我正在使用 try-catch 来停止错误。但这不适用于我正在调用的外部脚本。我不能使用点源,因为一些脚本需要 32 位版本的 PowerShell(与 QuickBooks API 调用需要 32 位有关)
所以我目前使用完整路径名调用它,所以我有这样的东西:
try {
# QB API requires powershell 32 bit: Open Sales Order by Item Report Call
& C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Unrestricted -file $ScriptDir\QB_API_Open_Sales_Orders_by_Item.ps1
# QB API requires powershell 32 bit: Inventory List Call
& C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Unrestricted -file $ScriptDir\QB_API_Inventory_List.ps1
# x64bit powershell: Convert QB_API Sales and Inventory Fiels from XML to CSV using XSLT
& C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Unrestricted -file $ScriptDir\transform_xml.ps1
# x64bit powershell: run vendor vs sales file to get final output
& C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Unrestricted -file $ScriptDir\Create_Sales_order_MPN_using_join.ps1
}
catch
{
Write-Warning $Error[0]
}
如果我点源脚本它工作正常,但外部调用它,它不。关于如何捕获错误并停止脚本的建议?
如果您希望 try-catch 在 PowerShell 会话中处理可执行文件,则必须执行以下操作:
- 设置
$errorActionPreference = 'stop'
以便所有错误都终止 - 将可执行调用的错误流重定向到别处 -> 2>$null 例如。
$EAPBackup = $ErrorActionPreference
$ErrorActionPreference = 'Stop'
try {
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Unrestricted -file $ScriptDir\QB_API_Open_Sales_Orders_by_Item.ps1 2>$null
} catch {
Write-Warning $error[0]
}
$ErrorActionPreference = $EAPBackup