0

我有一个命令行可执行文件,我需要在 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。

4

3 回答 3

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"
于 2012-07-04T11:19:14.477 回答
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)
    }
}
于 2012-07-04T11:19:40.747 回答
0

有几种方法可以做到这一点。

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

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

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

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

于 2012-07-04T11:54:42.330 回答