捕获电源外壳工作流中的错误



我对Powershell脚本相对较新,所以我一直在根据我在网上看到的多个示例进行编码。

我有一个并行执行多个批处理文件的脚本,每个批处理文件都包含一个要执行的 bcp 命令。 我正在尝试捕获运行批处理文件时可能发生的任何错误,但它没有按预期工作。 我特别通过具有无效的选择语法在产品上强制.bat错误。

workflow Test-Workflow 
{
Param ([string[]] $file_names)
$file_names = Get-Content "D:/EDW/data/informatica/ming/Powersh/bcplist.lst"
foreach -parallel ($line in $file_names) 
{
try
{
Write-Output ("processing... " + $line + ".bat")
start-process D:/EDW/data/informatica/ming/Powersh/$line.bat -ErrorAction Stop -wait
}
catch
{
$ErrorMessage = $_.Exception.Message
$FailedItem = $_.Exception.ItemName
Write-Output $line : $ErrorMessage  $FailedItem
}
}
}
bcplist.lst:
ing_channel
ing_product
ing_channel:
bcp "SELECT  * FROM CHANNEL" queryout ing_channel.txt -T -S99.999.999.9,99999 -t"t" -c -q
ing_product:
bcp "SELT  * FROM PRODUCT" queryout ing_product.txt -T -S99.999.999.9,99999 -t"t" -c -q

任何帮助或建议将不胜感激。

仅在引发终止错误时引发/捕获异常,这些错误仅在 cmdlet、.NET 库或本机代码运行时引发P/Invoke。为了使用外部命令处理故障,例如检查batexe是否成功,您需要自己检查$LASTEXITCODE$LASTEXITCODE相当于cmd.exe中的%ERRORLEVEL%的PowerShell。下面是一些基本样板代码的示例,用于检查 ping 命令的这一点:

&ping nonexistant.domain.tld
if( $LASTEXITCODE -ne 0 ){
# Handle the error here
# This example writes to the error stream and throws a terminating error
Write-Error "Unable to ping server, ping returned $LASTEXITCODE" -EA Stop
}

请注意,-ErrorAction参数的简写为-EA,因此长形式或短形式都可以使用。

相关内容

最新更新