如何使用 PowerShell 从 web.config 获取 IIS 中所有站点的提供程序信息?

How can I use PowerShell to get the providers information from web.config for all sites in IIS?

我需要确定允许跨企业所有主机进行 NTLM 身份验证的 IIS 站点。 PowerShell 已安装在每台主机上,因此 PowerShell 似乎是显而易见的解决方案。

我在 PowerShell 上花的时间不多,但这是我到目前为止想出的代码。它似乎正确地遍历了我的站点列表,并且我可以获得提供者元素,但是我无法检查 add 元素属性的值。

我还尝试使用“类似问题”功能查看其他问题和答案。

这是代码

$site_list = Get-IISSite
foreach($site in $site_list)
{
    $ConfigSection = Get-IISConfigSection("system.webServer/security/authentication/windowsAuthentication")
    foreach ($attribute in $ConfigSection.Attributes)
    {
        if($attribute.Name -eq "enabled")
        {
            Write-Host $site.Name : $attribute.Name : $attribute.Value
        }

    }
    
    foreach($element in $ConfigSection.ChildElements)
    {
        
        if ($element.ElementTagName -eq "providers")
        {
            Write-Host ChildElements.Count : $element.ChildElements.Count
            $element.Attributes
            $element|fl
            Write-Host Attributes Count : $element.Attributes.Count
            #$elem_attributes = $element.Attributes
            
            foreach ($elem_attr in $elem_attributes)
            {
                Write-Host $elem_attr
            }
        }
    }

}

我的 format-list 输出显示了一个子元素,其 ElementTagName 为 add,属性为 Value。但是,当我显示属性 属性 的 Count() 时,它显示 0。我认为 OOP 术语和 XML 元素和属性令人困惑,所以我的某些术语可能不正确.任何人可以提供的任何帮助或指导都会有所帮助。

这是元素格式列表的示例输出。

Attributes      : {value}
ChildElements   : {}
ElementTagName  : add
IsLocallyStored : True
Methods         : 
RawAttributes   : {[value, Negotiate]}
Schema          : Microsoft.Web.Administration.ConfigurationElementSchema

Attributes      : {value}
ChildElements   : {}
ElementTagName  : add
IsLocallyStored : True
Methods         : 
RawAttributes   : {[value, NTLM]}
Schema          : Microsoft.Web.Administration.ConfigurationElementSchema

我仍在使用旧版 WebAdministration cmdlet:

Get-WebSite | Foreach-Object {
    Write-Output $_.Name
    Get-WebConfigurationProperty -pspath "MACHINE/WEBROOT/APPHOST/$($_.Name)"  -filter "system.webServer/security/authentication/windowsAuthentication/providers/*" -name "." | Format-Table Value
}

这还将显示从服务器级别继承的提供程序。