4

自分自身を呼び出すこのPowerShellスクリプトがあります(スクリプトのステージ1はGACにアセンブリをロードするため、AppDomainを更新する必要があるため)。スイッチパラメータを自分自身に渡すにはどうすればよいですか。現在、私はこれを行っています:

if ($provisionsites -eq $true)
{
    powershell $currentDirectory/Deploy.ps1 -reload:$true -env:$env -provisionsites
}
else
{
    powershell $currentDirectory/Deploy.ps1 -reload:$true -env:$env
}

私には冗長すぎるようです。私がこれを試してみると:

powershell $currentDirectory/Deploy.ps1 -reload:$true -env:$env -provisionsites:$provisionsites

それは失敗します:

値「System.String」をタイプ「System.Management.Automation.SwitchParameter」に変換できません

4

1 に答える 1

3

おそらく、の呼び出しpowershell.exeはまったく必要ありません。演算子に置き換えます&。つまり、同じセッションでスクリプトを呼び出し、パラメーターの変換や関連する問題を回避します。問題は解決可能ですが、そもそも回避する方がよいでしょう。つまり、

& $currentDirectory/Deploy.ps1 -reload:$true -env:$env -provisionsites:$provisionsites

問題については。外部アプリケーションに渡す前に、文字列(または、notまたは)に$provisionsites変換されます。したがって、結果の実際の引数はのようになります。次に、新しいPowerShellセッションで、そのような引数をスクリプトに渡します。文字列または予期されていないために失敗します。ブール値が予期されます。TrueFalse$true$false-provisionsites:TrueDeploy.ps1TrueFalse

考えられる回避策は、エスケープを追加することです$

powershell $currentDirectory/Deploy.ps1 ... -provisionsites:`$$provisionsites

powershellしかし、の呼び出しとその問題を削除することを検討してください。

于 2012-10-23T10:09:48.523 に答える