Powershell搜索ApplicationHost.config文件并替换值

时间:2019-05-24 20:24:34

标签: xml powershell

我需要修改默认情况下位于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,应该可以解决该问题,但是它无法正常工作。

1 个答案:

答案 0 :(得分:0)

类似的事情应该可以解决。 我建议您创建Applicationhost的备份副本,以便在需要时可以还原。

您需要以管理员身份运行该脚本。

诀窍是利用SelectNodesSelectSingleNode并定位您感兴趣的特定节点。我使用您提供的代码指定我在寻找您感兴趣的节点,但仅在位置路径对应于“默认网站/ 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)
    建议使用
  • WebAdministration模块,而不要直接修改ApplicationHost.config文件,以免造成意外后果。

参考

Select Nodes Using XPath Navigation