IIS - overrideModeDefault 在 PowerShell 中强制执行,而不是在 IIS UI 中

IIS - overrideModeDefault 在 PowerShell 中强制执行,而不是在 IIS UI 中

我正在尝试修改已安装的 IIS Web 应用程序并更改身份验证方法。设置Default Web Site为合金匿名,并禁用其他所有内容。当我在 PowerShell 中使用以下行时:

Write-Host "Enabling Basic Authentication"
Set-WebConfigurationProperty -Filter /system.webServer/security/authentication/basicAuthentication -Name enabled -Value true -PSPath "IIS:\Sites\Default Web Site\$app_name"

我收到以下错误,但没有任何变化。

Enabling Basic Authentication
Set-WebConfigurationProperty : This configuration section cannot be used at this path. This happens when the section is locked at a parent level. 
Locking is either by default (overrideModeDefault="Deny"), or set explicitly by alocation tag with overrideMode="Deny" or the legacy allowOverride="false".
At E:\web_iis_applications\web_application\ps_Install_web_application.ps1:61 char:1
+ Set-WebConfigurationProperty -Filter /system.webServer/security/authe ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Set-WebConfigurationProperty], FileLoadException
    + FullyQualifiedErrorId : System.IO.FileLoadException,Microsoft.IIs.PowerShell.Provider.SetConfigurationPropertyCommand

但是,我可以直接进入 UI 并通过右键单击修改这些条目,然后就完成了。但是,当我必须在 2 或 3 台服务器上进行 20 次安装时,这没有什么用。我知道我不应该更改设置Default Web SiteoverridgeModeDefault这就是为什么我尝试在默认网站下逐页进行更改。

我不是这些应用程序的开发人员,所以我不确定这些选项是否可以在 web.config 中设置,或者是否可以在每个应用程序中设置。

答案1

这将释放配置的access和部分的锁:ipSecurity

$assembly = [System.Reflection.Assembly]::LoadFrom("$env:systemroot\system32\inetsrv\Microsoft.Web.Administration.dll")
$serverManager = new-object Microsoft.Web.Administration.ServerManager
$hostConfiguration = $serverManager.GetApplicationHostConfiguration()
$hostConfiguration.RootSectionGroup.SectionGroups["system.webServer"].SectionGroups['security'].Sections['access'].OverrideModeDefault = "Allow"
$hostConfiguration.RootSectionGroup.SectionGroups["system.webServer"].SectionGroups['security'].Sections['ipSecurity'].OverrideModeDefault = "Allow"
$serverManager.CommitChanges()

现在您可以进行如下调用:

Set-WebConfiguration -PSPath "IIS:\sites\Default Web Site" -Filter 'system.webserver/security/access' -Value 'Ssl,SslNegotiateCert,SslRequireCert'

例如,我想要对某些向外部公开的页面要求客户端证书身份验证,但对其余“内部”页面放置 IP 过滤器:

Set-WebConfiguration -PSPath "IIS:\sites\Default Web Site" -Filter 'system.webserver/security/access' -Value 'Ssl,SslNegotiateCert,SslRequireCert'
Set-WebConfiguration -PSPath "IIS:\sites\Default Web Site\InternalApi" -Filter 'system.webserver/security/access' -Value 'None'
Set-WebConfiguration -PSPath "IIS:\sites\Default Web Site\InternalApi" -Filter 'system.webserver/security/ipSecurity' -Value @{allowUnlisted="False"}
Add-WebConfigurationProperty -Filter 'system.webServer/security/ipSecurity' -PSPath "IIS:\sites\Default Web Site\InternalApi" -Name "." -Value @{ipAddress="172.16.1.0";allowed="true";subnetMask="16";}

相关内容