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

Posted

技术标签:

【中文标题】如何使用 PowerShell 远程检查 Web 应用程序池的状态?【英文标题】:How to remotely check the status of a web application pool with PowerShell? 【发布时间】:2012-09-19 17:22:12 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

您可以使用 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

【讨论】:

@Kiquenet - 我不明白你的问题,你能详细说明一下吗? Get-WebAppPoolState 命令与 Get-WebItemState 命令有何不同?例如,$state = Get-WebItemState "IIS:\AppPools\$appPoolName";返回 $state.value;【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

以上是关于如何使用 PowerShell 远程检查 Web 应用程序池的状态?的主要内容,如果未能解决你的问题,请参考以下文章

powershell 用于服务器运行状况的Powershell GUI Tool v.1.3远程检查

如何在 Powershell 中自动执行 Telnet 端口检查?

在 Powershell 中检查范围

使用 powershell 访问远程计算机时出现审计错误

powershell 使用SDL Web CMS交叉检查登台网站上的XPM组件元数据。

powershell 使用SDL Web CMS交叉检查登台网站上的XPM组件元数据。