2014-06-19 62 views
0

我有一个简短的PowerShell脚本:我将如何去处理在C#中的Powershell对象的错误处理?

$spName = $args[0] 
$filterList = $args[1] 
$destinationFile = $args[2] 
$server = $args[3] 
$user = $args[4] 
$password = $args[5] 
bcp "EXEC $spName @FilterList = $filterList" queryout "$destinationFile" -c -t"\0" -S $server -U $user -P $password 

我使用PowerShell的对象在.net中添加的参数,并调用Invoke方法。但是,当密码错误时,我遇到了问题。它锁定了数据库。非常尴尬。然而,从来没有出现过例外情况。我知道.Net Pipeline对象有一个返回错误集合的Error方法,但我不知道如何使用此脚本实现管道。是否有一个命令bcp?我只是将该脚本添加为命令?否则,有没有办法用powershell对象来实现错误处理?任何帮助你和gals可以提供将不胜感激。

回答

1

对于PowerShell中的错误处理,有一个类似于您可以实现的C#的try/catch mechanism

但是,只有在PowerShell异常的情况下才会出现这种情况。在这种情况下,我怀疑BCP是否会抛出任何异常,这就是为什么您的脚本没有错误地完成。相反,你需要依靠任何错误捕获机制bcp支持。在这种情况下,有一个couple of parameters看起来有用:

-m max_errors

指定语法错误和批量复制操作取消之前可能发生的编译错误的最大数量。

-e err_file

指定用于存储任何行BCP错误文件的完整路径是无法从文件传输到数据库中。

此外,如果BCP将在退出的错误代码,其中许多旧式命令行实用程序做的,也有一对抱最后执行的命令的结果预先定义的PowerShell变量:

$LastExitCode # Holds the actual error code 
$?   # Holds $True if $LastExitCode was 0, $False otherwise.