我目前正在尝试构建一个powershell脚本,它可以读取特定的XML文件并提取某些单词。这些单词将位于标签之间。
目前该文件看起来像这样。我们称之为events.xml:
<Computer>Hostname</Computer><Other>Random Text</Other<Other>More Random Text</Other><FilePath>notepad.exe</FilePath>
我想要做的是,使用Powershell脚本在<Computer></Computer>
和<FilePath></FilePath>
标记之间提取单词并将其回显给Powershell。
到目前为止,我有这个:
gc events.xml | % { [regex]::matches( $_ , '(?<=<Computer>)(.*?)(?=</Computer>)' ) } | select -expa value
这在某种程度上起作用,因为它打印出<Computer></Computer>
标签之间所有字符的列表完美无瑕。但是,当尝试使脚本工作时,挑战就出现了,因此它将在BOTH(<Computer></Computer>
和<FilePath></Filepath>
)行之间打印出来。所以它会出现:
主机名
Notepad.exe的
等等。
有任何想法或建议吗?
谢谢!
答案 0 :(得分:1)
你应该尝试这样的事情:
首先,使用以下命令加载XML目标文件:
$xdoc = new-object System.Xml.XmlDocument
$file = resolve-path(".\<name_file>.xml")
$xdoc.load($file)
$xdoc = [xml] (get-content ".\<name_file>.xml")
/!\小心,你必须在好的目录中使用。\
然后,如您所知,XML文档的结构,您应该尝试这个:
$Couples = $xdoc.[name_of_the_tag]
选择<Computers></Computers>
和<FilePath></FilePath>
标记上方的标记。
然后,一个计数器,在while循环中使用它(开发你的xml):
$CouplesCount = $Couples.Count
在while循环中:
$i = 0
while($i -ne $CouplesCount ){
$computer = $Couples.Computer
$FilePath = $Couples.FilePath
Write-Host $computer
Write-Host $FilePath
$i++
}
您应该拥有使用<Computers></Computers>
和<FilePath></FilePath>
的值打印XML文件的内容。
答案 1 :(得分:0)
感谢您通过XML解析向我指出正确的方向。
我通过这样做解决了我的脚本:
bash
这导致了一个漂亮,干净的清单。
干杯!