通过PowerShell运行可执行文件并正确返回可执行文件的错误代码

时间:2017-01-18 22:07:58

标签: powershell executable remote-access

我试图在PowerShell中使用来自远程计算机的参数运行可执行文件,虽然我已经让PowerShell命令工作,但是它没有正确处理可执行文件抛出的错误。

因此,只要文件$ filename指向存在,下面的脚本就会按预期执行,但如果文件不存在,脚本也会成功执行,这会导致调度程序出现问题我试图将其绑定到。我的期望是PowerShell会抛出错误,例如"找不到文件"但是这种情况没有发生。那么我可以添加到此脚本中以使该行为发生吗?

$ErrorActionPreference = "stop"
$rSession = New-PSSession -ComputerName ServerName
$fileName = c:\file.txt
Invoke-Command -ScriptBlock {Start-Process -FilePath "D:\CAMRA\PFX\PFLNS.EXE" -ArgumentList " /SD:\CAMRA\CAMINI\Z_PRODNP_SQL_TEST.INI GLSWEEP 50 {DN}~$fileName~{T}" -Wait} -Session $rSession
Remove-PSSession $rSession

我也可能没有通过PowerShell正确调用.exe来执行我想要的操作,所以我愿意接受有关如何修改此脚本的任何建议。

谢谢, 菲尔

2 个答案:

答案 0 :(得分:1)

我认为这就像你想要的那样。

首先,我将命令分成一个单独的脚本块,以便我们可以添加一些额外的代码来捕获错误的退出代码。

其次,为了捕获退出代码,您的<link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet"/> <link href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/css/bootstrap-datetimepicker.css" rel="stylesheet"/> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/js/bootstrap-datetimepicker.min.js"></script> <div class="input-group date" id="PickDate"> <input type="text" class="form-control" /> <span class="input-group-addon"> <span class="glyphicon glyphicon-calendar"></span> </span> </div>需要具有Start-Process参数。一旦我们可以捕获退出代码,我们将对其进行评估,如果它不是0(良好),则会抛出一个错误,该错误将导致较高的Invoke-Command崩溃。

第三,我们必须使用特殊的-PassThru变量来捕获前一个命令(Invoke-Command)是否成功,如果它不成功,它将抛出一个错误,可能会被捕获调度程序。

$?

答案 1 :(得分:0)

您是否将参数传递给脚本块?将$FileName替换为$($Args[0]),并将-ArgumentList $FileName添加到Invoke-Command的参数中。

... GLSWEEP 50 {DN}~$($args[0])~{T}" -Wait} -ArgumentList $FileName -Session $rSession