powershell中的正则表达式用空值替换完整的XML节点

时间:2015-11-27 06:28:54

标签: .net powershell

这是我的web.config文件和内容。

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
  </dependentAssembly>
</assemblyBinding>
</runtime>

这是我的power shell脚本,用于从标记中删除所有内容...

(Get-Content C:\Temp\web.config) | 
Foreach-Object {$_ -replace '<dependentAssembly>[\s\S]*?<\/dependentAssembly>', ''} | 
Set-Content C:\Temp\web.config

脚本正在运行,但它没有删除任何东西。任何人都可以帮助我。我在上面的代码中犯了什么错误。

预期产出:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    </assemblyBinding>
</runtime>

1 个答案:

答案 0 :(得分:2)

不要使用正则表达式来执行此操作。 PowerShell为您提供处理XML所需的一切。

$xml = [xml] @"
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
  </dependentAssembly>
</assemblyBinding>
</runtime>
"@

$xml.runtime.assemblyBinding.RemoveAll()

$xml.Save("c:\temp\test.xml")