我需要修改默认情况下位于c:\ windows \ System32 \ inetsrv \ config的applicationHost.config文件。
在查看XML文件时,有许多条目在配置中。我只需要修改一个。也许在修改之前先检查它是否存在?
以下XML是我要修改的。嵌套在顶级配置下。我只想更改一个条目,如果发现为false,则启用username身份验证=“ =” true“。
<location path="Default Web Site/MyWebsite/SiteA">
<system.webServer>
<security>
<authentication>
<digestAuthentication enabled="false" />
<basicAuthentication enabled="false" />
<anonymousAuthentication enabled="false" />
<windowsAuthentication enabled="true">
<providers>
<clear />
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
</security>
</system.webServer>
</location>
旁注。我确实看到我可以使用set-webconfigurationproperty。但是,当我这样做时,它告诉我不能在此路径上使用配置节。当节锁定在父级时,会发生这种情况。我正在使用PSPath,应该可以解决该问题,但是它无法正常工作。
答案 0 :(得分:0)
类似的事情应该可以解决。 我建议您创建Applicationhost的备份副本,以便在需要时可以还原。
您需要以管理员身份运行该脚本。
诀窍是利用SelectNodes
或SelectSingleNode
并定位您感兴趣的特定节点。我使用您提供的代码指定我在寻找您感兴趣的节点,但仅在位置路径对应于“默认网站/ MyWebsite / SiteA”
$InetConfigPath = 'c:\windows\System32\inetsrv\config\applicationHost.config'
$xml = [xml](get-content -Path $InetConfigPath -Raw)
$Nodes = $xml.SelectNodes('//location[@path="Default Web Site/MyWebsite/SiteA"]/system.webServer/security/authentication/anonymousAuthentication')
foreach ($Node in $nodes) {
if ($Node.enabled -eq $false) {
$Node.enabled = 'true'
}
}
$xml.Save($InetConfigPath)
参考