当您有一个格式错误的 web.config 并尝试在 GUI 中编辑它的一部分时,它会弹出一个框,说明情况并告诉您它在哪一行中断了。
有没有办法通过 cmd/powershell 访问此功能?
答案1
您可以使用如下代码:
$site = "Default Web Site"
try
{
Get-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location "$site" -filter "system.webServer" -name . | Out-Null
Write-Output "All is Well"
}
catch [System.Exception]
{
Write-Output $_
}
输出可能包括:
Get-WebConfigurationProperty : Filename: \\?\C:\inetpub\wwwroot\web.config
Line number: 7
Error: Configuration file is not well-formed XML
或者
Get-WebConfigurationProperty : Filename: \\?\C:\inetpub\wwwroot\web.config
Line number: 5
Error: The configuration section 'foo' cannot be read because it is missing a section declaration
答案2
不幸的是@Peter Hahndorf 的答案只会检查语法问题,它不会捕捉到多级配置之间存在冲突的情况。
我已经创建了一个解决此问题的函数,完整答案在这里:https://stackoverflow.com/questions/68260818/how-do-i-validate-an-iis-web-config-in-powershell/68260819#68260819
但它的要点是你必须找到所有的“过滤器”并单独测试它们。