12

我正在尝试在 PowerShell 中执行此操作:

XDocument document = XDocument.Load(@"web.config");

var comments = document.Descendants("client").DescendantNodes().OfType<XComment>().ToArray();

foreach (var comment in comments)
{
    XElement unCommented = XElement.Parse(comment.Value);
    comment.ReplaceWith(unCommented);
}

我试过这样的事情:

$xDoc = [System.Xml.Linq.XDocument]::Load("web.config")

[System.Collections.Generic.IEnumerable[System.Xml.Linq.XElement]] $enum = $xDoc.Descendants("client")
       
$clients = [System.Xml.Linq.Extensions]::DescendantNodes($enum)

但我收到一个错误消息

使用 1 个参数调用 DescendantNodes 的异常:值不能为空

4

2 回答 2

27

我得到了这个工作,(从一个xml文档中取消注释)在powershell中使用linq:

[Reflection.Assembly]::LoadWithPartialName("System.Xml.Linq") | Out-Null

$xDoc = [System.Xml.Linq.XDocument]::Load("web.config")
$endpoints = $xDoc.Descendants("client") | foreach { $_.DescendantNodes()}               
$comments = $endpoints | Where-Object { $_.NodeType -eq [System.Xml.XmlNodeType]::Comment -and $_.Value -match "net.tcp://localhost:9876/RaceDayService" }        
$comments | foreach { $_.ReplaceWith([System.Xml.Linq.XElement]::Parse($_.Value)) }

$xDoc.Save("web.config")
于 2012-05-21T13:32:22.823 回答
4

如果您要编写 PowerShell Modules,您将创建一个Manifest文件,该文件将在调用时加载类似的依赖项Import-Module MyModule

# Comma-separated assemblies that must be loaded prior to importing this module
RequiredAssemblies = @("System.Xml.Linq")

对于编写模块的人来说,这是推荐的方式。

于 2016-03-17T18:43:28.187 回答