如何使用PowerShell获取IIS所有站点web.config的NTLM认证配置信息
问题根因
- 原代码调用
Get-IISConfigSection时未指定站点上下文,循环遍历所有站点时读取的都是全局IIS配置,而非每个站点的独立配置 - providers节点本身没有自定义属性,你需要遍历providers下的所有
add类型子元素,再读取这些子元素的value属性即可拿到身份验证提供程序名称
修正后可用代码
# 导入IIS管理模块 Import-Module IISAdministration # 获取所有IIS站点 $site_list = Get-IISSite foreach($site in $site_list) { # 获取当前站点的Windows身份验证配置段 $ConfigSection = Get-IISConfigSection -SectionPath "system.webServer/security/authentication/windowsAuthentication" -Location $site.Name $winAuthEnabled = $ConfigSection.Attributes | Where-Object {$_.Name -eq "enabled"} | Select-Object -ExpandProperty Value Write-Host "站点名称:$($site.Name),Windows身份验证启用状态:$winAuthEnabled" # 定位providers配置节点 $providersNode = $ConfigSection.ChildElements | Where-Object {$_.ElementTagName -eq "providers"} if($null -ne $providersNode) { Write-Host "配置的身份验证提供程序列表:" # 遍历providers下的所有add子元素 foreach($addElement in $providersNode.ChildElements) { # 读取add元素的value属性获取提供程序名称 $providerName = Get-IISConfigAttributeValue -ConfigElement $addElement -AttributeName "value" Write-Host "- $providerName" # 检测是否启用NTLM if($providerName -eq "NTLM") { Write-Host "* 检测到该站点启用NTLM身份验证" } } } Write-Host "================================" }
运行说明
- 必须以本地管理员权限启动PowerShell执行脚本,否则无权限读取IIS站点配置
- 脚本会依次输出所有站点的Windows身份验证启用状态、配置的提供程序列表,同时自动标记启用了NTLM的站点
- 如需批量跨主机执行,可结合
Invoke-Command远程调用该脚本即可
内容的提问来源于stack exchange,提问作者Joshua K
相关产品推荐
相关产品推荐

