我试图在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来执行我想要的操作,所以我愿意接受有关如何修改此脚本的任何建议。
谢谢, 菲尔
答案 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