Конвейерные объекты PowerShell XML после объявления пространства имен - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть этот фрагмент кода PowerShell, который работает.

$xml = [xml](gc '.\test.xml')
$ns = New-Object Xml.XmlNamespaceManager $xml.NameTable
$ns.AddNamespace("ns", "randomnamespace")

$nodes = $xml.SelectNodes("//ns:tag", $ns)

# print all nodes
foreach ($node in $nodes) {
    Write-Host $node.anotherTag " - " $node.anotherTag.Substring(0,7)
}

Я хочу поместить его в одну строку, чтобы использовать в качестве команды PowerShell, потому что не могу изменить политику выполнения.

Я попробовал следующее:

$xml = [xml](gc '.\test.xml') | $ns = New-Object Xml.XmlNamespaceManager $_.NameTable | $ns.AddNamespace('ns', 'tag') | $xml.selectNodes('//ns:anotherTag', $ns) | foreach {Write-Host $_.anotherTag' - ' $_.anotherTag(0,7)}"

но я получаю сообщение об ошибке

Выражения допускаются только в качестве первого элемента в конвейере ... NameTable | $ Ns.AddNamespace ( 'нс', ..)

и я не могу объявить пространство имен перед чтением файла XML.

Есть ли способ заставить это работать?

1 Ответ

0 голосов
/ 07 сентября 2018

Не используйте трубу |, используйте точку с запятой ; вместо

...