どのように機能するか混乱して-Passthru
います。
私の理解では-Passthru
、コマンドレット自体が結果を生成しなくても、コマンドレットの結果をパイプラインに渡すためにパラメーターが使用されます。
Restart-WebAppPool
最初にこれらのコードを記述しようとしました: (コマンドレットを使用せずに IIS アプリケーション プールをリサイクルしようとしています)
Stop-WebAppPool -Name Foo
Start-WebAppPool -Name Foo
予想どおり、IIS ApplicationPool を停止するには時間がかかります。また、PowerShell はコマンドレットがジョブを完了するのを待たないためStop-WebAppPool
、アプリケーション プールを停止して戻ります。アプリケーション プールを開始する準備ができていないため、Start-WebAppPool
が呼び出され、エラーがスローされます。
そこで、コードを次のように変更しました。
Stop-WebAppPool -Name Foo
Start-Sleep -Seconds SomeValueNeedToGetMeasuredAndChanged
Start-WebAppPool -Name Foo
それは機能しますが、非常に優雅で柔軟ではありません。
次に、両方のコマンドレットに追加-Passthru
すると、次のようになります。
Stop-WebAppPool -Name Foo -Passthru
Start-WebAppPool -Name Foo -Passthru
すべてがうまくいき、エラーはスローされません。
私の場合、次のようになります。
アプリケーション プールが実際に停止または開始されるまで、Stop/Start-WebAppPool コマンドレットは結果を生成しません。パイプラインに何かを渡す必要があるため-Passthru
、PowerShell はコマンドレットが結果を生成するのを待ちます。この場合、アプリケーション プールが停止/開始され、次のものが実行されます。
-Passthru
またはのどちらにも有用なマニュアルが見つからStop-WebAppPool
ないので、この場合はそうしてもよろしいですか?