我如何包装PowerShell&打电话来检查退货代码?

时间:2012-07-04 11:09:39

标签: powershell command-line

我有一个命令行可执行文件,我需要在PowerShell中使用不同的选项重复调用。

在每个场合,我都想检查退出代码是否为0。

有没有办法将调用和参数包装为函数?

& bob.bat -b
... error handling
& bob.bat -a -m "a path"
... error handling

改为:

function callBob ($paramList)
{
    & bob.bat $paramList
    ... error handling
}

callBob -b
callBob -a -m "a path"
etc...

不幸的是,上面的代码似乎没有处理多个参数 - 我不能像第二个那样工作,因为callBob只接受一个参数,所以我最终不得不传入一个字符串这似乎被引用传递给& bob.bat。

3 个答案:

答案 0 :(得分:1)

您可以使用$ args访问参数:

function callBob
{
    Write-Host "Length: $($args.Length)"
    Write-Host "arg0: $($args[0])"
    Write-Host "arg1: $($args[1])"
    Write-Host "arg2: $($args[2])"
}

callBob -b
callBob -a -m "a path"

答案 1 :(得分:1)

您可以这样做:

function callBob{

bob.bat $args

}

callBob -b

另外,如果你想要(来自PSAKE),请试试这个包装器:

function Exec
{
    [CmdletBinding()]
    param(
        [Parameter(Position=0,Mandatory=1)][scriptblock]$cmd,
        [Parameter(Position=1,Mandatory=0)][string]$errorMessage = ($msgs.error_bad_command -f $cmd)
    )
    & $cmd
    if ($lastexitcode -ne 0) {
        throw ("Exec: " + $errorMessage)
    }
}

答案 2 :(得分:0)

有几种方法可以做到。

1)创建批处理文件并从中调用powershell脚本。

2)创建一个exe然后从中调用powershell。您可以在WPF应用程序中获取退出代码,然后进行验证。

这取决于您的应用程序的复杂性和需求。我已经使用WPF应用程序来包装powershell,因为我们不希望其他人通过执行powershell并执行来运行脚本。我们还在WPF应用程序中提供了安全登录。

如果您决定使用WPF Applicaiton,请告诉我您是否需要帮助。