如何使用PowerShell远程检查Web应用程序池的状态?

17

我看到很多关于在运行IIS7的Web服务器上回收应用程序池的脚本,但是有没有一种方式可以使用PowerShell检查Web应用程序池是正在运行还是已停止?我似乎无法找到一种远程获取Get-WebAppPoolState返回应用程序池状态的方法,我的谷歌搜索也没有找到替代方法。我可以远程使用gwmi来重新启动或启动我的应用程序池,但是理想情况下,我只想在应用程序池实际停止时才运行此命令。

我需要使用PSExec解决这个问题,还是有其他替代方法类似于gwmi,并且只需要一行命令即可调用IIS7服务器上的应用程序池并向我返回状态?

3个回答

27

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

$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

@Kiquenet - 我不明白你的问题,能否详细说明一下? - dugas
Get-WebAppPoolState命令和Get-WebItemState命令有什么区别?例如,$state = Get-WebItemState "IIS:\AppPools$appPoolName"; 返回$state.value; - Kiquenet

4

如果您想要美化输出,可以使用此功能:

Invoke-Command -ComputerName RemoteHostName -ScriptBlock { Get-WebAppPoolState | % {  return  @{($_.itemxpath -split ("'"))[1]="$($_.value)" } }}

0

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

$items = get-wmiobject -namespace 'root\MicrosoftIISv2' -computername $server -class 'IIsApplicationPoolSetting'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接