You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell IIS ServerManager单服务器异常:GetSection读取配置文件失败

IIS脚本添加自定义请求头故障排查

我们有一个用于向IIS网站添加自定义请求头的PowerShell脚本,在多数服务器上运行正常,但某台服务器执行时出错:

脚本代码:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration") | Out-Null
$iis = new-object Microsoft.Web.Administration.ServerManager
$config = $iis.GetWebConfiguration('sitename.example.io')
$httpProtocolSection = $config.GetSection("system.webServer/httpProtocol")

故障服务器执行最后一行GetSection时抛出错误:

Exception calling "GetSection" with "1" argument(s): "Filename: redirection.config Error: Cannot read configuration file"

已知信息:

  • 脚本预期读取web.config而非redirection.config
  • 两台服务器上web.config和redirection.config的权限配置一致
  • 逐行执行脚本时,故障服务器的$config输出为空RootSectionGroup:
RootSectionGroup
----------------

正常服务器输出:

RootSectionGroup
----------------
Microsoft.Web.Administration.SectionGroup

排查步骤

1. 修复IIS管理组件完整性

故障服务器可能存在IIS管理核心组件缺失或损坏情况,运行以下命令修复:

DISM /Online /Cleanup-Image /RestoreHealth

完成后重启服务器,再测试脚本。

2. 验证站点名称准确性

确认sitename.example.io是故障服务器上完全匹配的站点名称(部分环境对大小写敏感),可通过以下命令列出所有站点名称:

Import-Module WebAdministration
Get-Website | Select-Object Name

若名称不匹配,修正脚本中的站点名称后重试。

3. 检查redirection.config文件状态

虽然权限一致,但文件可能损坏或被占用:

  • 打开%windir%\System32\inetsrv\config\redirection.config,检查XML格式是否正常
  • 对比正常服务器上的redirection.config内容,替换故障服务器的文件(替换前备份原文件)
  • 确认文件未被杀毒软件、其他进程锁定

4. 直接读取站点web.config测试

尝试绕开自动配置加载逻辑,直接读取站点物理路径下的web.config:

$site = $iis.Sites['sitename.example.io']
$webConfigPath = Join-Path $site.PhysicalPath "web.config"
$config = [Microsoft.Web.Administration.ConfigurationManager]::OpenWebConfiguration($webConfigPath)
$httpProtocolSection = $config.GetSection("system.webServer/httpProtocol")

若此方法成功,说明原GetWebConfiguration调用在故障服务器上的配置加载逻辑异常。

5. 验证应用程序池标识权限

即使文件权限一致,应用程序池运行标识可能无站点物理路径访问权限:

  • 打开IIS管理器,找到目标站点对应的应用程序池
  • 查看其“标识”设置,确认该标识对站点物理路径拥有读取权限
  • 可临时将标识改为LocalSystem测试(测试后恢复原配置)

6. 核对.NET Framework版本兼容性

Microsoft.Web.Administration组件依赖特定.NET版本,确认故障服务器与正常服务器的.NET版本一致:

Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | Get-ItemProperty -Name Version,Release -ErrorAction SilentlyContinue | Where-Object { $_.PSChildName -match '^(?!S)\p{L}' } | Select-Object Version,Release

若版本差异较大,安装对应版本的.NET Framework后重试。

7. 重置IIS清理配置缓存

运行以下命令重置IIS,清理配置缓存:

iisreset /restart

重置完成后重新运行脚本,观察是否恢复正常。

内容的提问来源于stack exchange,提问作者Luke Briner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:01:18