У меня есть этот фрагмент кода 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.
Есть ли способ заставить это работать?