xml - Powershell 搜索 ApplicationHost.config 文件并替换值
问题描述
我需要修改默认位于 c:\windows\System32\inetsrv\config 的 applicationHost.config 文件。
查看 XML 文件,配置中有许多位置条目。我只需要修改一个特定的。也许在修改它之前先检查它是否存在?
以下 XML 是我要修改的内容。嵌套在顶级配置下。如果发现为假,我只想更改一项,anonymousAuthentication enabled="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,它应该可以解决这个问题,但它不起作用。
解决方案
像这样的东西应该可以解决问题。我建议您创建 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)
- 建议使用 WebAdministration 模块,而不是直接修改 ApplicationHost.config 文件以避免意外后果。
参考
推荐阅读
- xcode - 运行反应本机模拟器ios的问题
- visual-studio-code - VSCode 从另一个文件夹添加已经存在的代码片段
- django - Django SuperUser 使用标准用户模型并让应用程序用户使用 CustomUser 模型
- reactjs - 有没有办法修复 yarn start 或 npm start 的编译错误,提示“没有这样的文件目录,stat ...”
- wpf - 在 Visual Studio 之外执行时应用程序没有获得焦点
- angular - 我有一个错误:属性“表单”没有初始化程序,并且没有在构造函数中明确分配
- ios - iOS 模拟器:移除设备顶部的控制栏
- python - 如何从文本文件中一一读取url来执行
- python - PyAudio 'unknown format: %r' 尝试播放 wav 文件时出错
- c++ - 将 const 引用绑定到另一种类型