我很困惑如何-Passthru
工作。
据我了解,该-Passthru
参数用于将 cmdlet 的结果传递给管道,即使 cmdlet 本身不会产生任何结果。
我尝试先编写这些代码:(我正在尝试在不使用Restart-WebAppPool
cmdlet 的情况下回收 IIS 应用程序池)
Stop-WebAppPool -Name Foo
Start-WebAppPool -Name Foo
正如我所料,停止 IIS 应用程序池需要时间,并且由于 PowerShell 不等待 cmdlet 完成其工作,因此Stop-WebAppPool
停止应用程序池并返回。由于应用程序池尚未准备好启动,因此Start-WebAppPool
会调用 并引发错误。
所以我把我的代码改成了这些:
Stop-WebAppPool -Name Foo
Start-Sleep -Seconds SomeValueNeedToGetMeasuredAndChanged
Start-WebAppPool -Name Foo
它有效,但不是很优雅和灵活。
然后我添加-Passthru
到这两个 cmdlet,它变成:
Stop-WebAppPool -Name Foo -Passthru
Start-WebAppPool -Name Foo -Passthru
一切正常,没有错误被抛出。
就我而言,我想:
在应用程序池真正停止/启动之前,Stop/Start-WebAppPool cmdlet 不会产生任何结果。由于-Passthru
需要将某些内容传递给管道,因此 PowerShell 等待 cmdlet 产生其结果,在这种情况下,应用程序池停止/启动,以执行下一个。
-Passthru
我在或上都找不到任何有用的手册Stop-WebAppPool
,所以在这种情况下可以这样做吗?