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...

残念ながら、上記のコードは複数のパラメーターを処理していないようです-2番目のようなものを機能させることはできません。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アプリケーションで終了コードを取得し、それを確認できます。

それはあなたのアプリケーションの複雑さと必要性に依存します。他のユーザーがPowerShellにアクセスして実行することでスクリプトを実行することを望まなかったため、WPFアプリケーションを使用してPowerShellをラップしました。また、WPFアプリケーションでセキュリティログインを提供しました。

WPFアプリケーションを使用することにした場合、サポートが必要な場合はお知らせください。

于 2012-07-04T11:54:42.330 に答える