16

我在运行 IIS7 的 Web 服务器上看到很多用于回收应用程序池的脚本,但是有没有办法使用 PowerShell 检查 Web 应用程序池是运行还是停止?我似乎无法找到远程让 Get-WebAppPoolState 返回应用程序池状态的方法,而我的 Google-fu 也无法找到替代品。我可以远程让 gwmi 工作并回收或启动我的应用程序池,但理想情况下,我只想在应用程序池实际停止时运行它。

我是否需要使用 PSExec 解决这个问题,或者是否可以使用类似于 gwmi 的替代方法并使用一行命令来调用 IIS7 服务器上的应用程序池并提供状态?

4

3 回答 3

25

您可以使用 Invoke-Command 在远程计算机上调用 Get-WebAppPoolState cmdlet。

$appPoolStatus = Invoke-Command -ComputerName RemoteHostName {Import-Module WebAdministration; Get-WebAppPoolState DefaultAppPool}
$appPoolStatus.Value

请注意,如果您要使用在调用机器上本地定义的变量,则必须根据规则处理它们。这个链接是一个很好的解释它们的帖子:

http://blogs.msdn.com/b/powershell/archive/2009/12/29/arguments-for-remote-commands.aspx

例子:

$appPoolName = "SomeAppPoolName"
$appPoolStatus = Invoke-Command -ComputerName RemoteHostName { param($apn) Import-Module WebAdministration; Get-WebAppPoolState $apn} -Args $appPoolName
于 2012-09-27T22:30:55.820 回答
4

如果你想要漂亮,你可以使用它:

Invoke-Command -ComputerName RemoteHostName -ScriptBlock { Get-WebAppPoolState | % {  return  @{($_.itemxpath -split ("'"))[1]="$($_.value)" } }}
于 2016-01-25T13:19:52.267 回答
0

对于旧版本的 IIS(版本 8 之前):

$items = get-wmiobject -namespace 'root\MicrosoftIISv2' -computername $server -class 'IIsApplicationPoolSetting'
于 2021-01-21T22:28:13.150 回答