【问题标题】:How do I enumerate IIS websites using Powershell and find the app pool for each?如何使用 Powershell 枚举 IIS 网站并找到每个网站的应用程序池?
【发布时间】:2014-09-25 04:04:29
【问题描述】:

我可以使用以下方式搜索网站:

Get-WmiObject -Namespace "root\WebAdministration" -Class Site -Authentication PacketPrivacy -ComputerName $servers

我可以使用以下方法列出应用程序池:

Get-WmiObject -computer $servers -Namespace root\MicrosoftIISv2 -Class IIsApplicationPoolSetting -Impersonation Impersonate -Authentication PacketPrivacy

如何将这些链接在一起以查找哪个应用程序池与哪个网站相关联?这是一个带有 IIS 7.5 的 Windows Server 2008 R2 服务器。

【问题讨论】:

  • 查看WebAdministration 模块。它比 WMI 更容易使用

标签: powershell iis wmi


【解决方案1】:

使用网络管理模块:

Import-Module WebAdministration

dir IIS:\Sites # Lists all sites
dir IIS:\AppPools # Lists all app pools and applications


# List all sites, applications and appPools

dir IIS:\Sites | ForEach-Object {

    # Web site name
    $_.Name

    # Site's app pool
    $_.applicationPool

    # Any web applications on the site + their app pools
    Get-WebApplication -Site $_.Name
}

【讨论】:

  • 主题发起者要求与变量 $servers 进行远程连接。您的解决方案似乎没有提供远程连接选项。
【解决方案2】:

尝试以下方法:

[Void][Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration")
$sm = New-Object Microsoft.Web.Administration.ServerManager
foreach($site in $sm.Sites) {
    foreach ($app in $site.Applications) {
        [PSCustomObject]@{
            Application = $site.Name + $app.Path
            Pool = $app.ApplicationPoolName
        }
    }
}

上面的脚本列出了服务器上的每个站点,并打印了每个站点的根应用程序池名称。

【讨论】:

    【解决方案3】:

    如果您不想使用 IIS:\ 路径,这里还有一个选项。

    $site = Get-IISSite -Name 'my-site'
    $appPool = Get-IISAppPool -Name $site.Applications[0].ApplicationPoolName
    

    【讨论】:

    • 您导入了 WebAdministration 模块,然后使用了 IISAdministration cmdlet?去掉“Import-Module WebAdministration”,你的回答会更有意义。
    • 嗯,我几年前回答过这个问题,所以不确定我在做什么:) 很好。
    猜你喜欢
    • 2012-12-23
    • 1970-01-01
    • 2011-01-01
    • 2015-04-12
    • 2010-11-26
    • 2011-03-28
    • 2012-01-06
    • 1970-01-01
    • 2018-11-04
    相关资源
    最近更新 更多