【发布时间】:2015-08-31 21:48:12
【问题描述】:
我正在编写一个脚本来读取一个 XML 文件,例如下面的 XMLFILE.XML 内容。如果每个任务之前的所有验证都通过了各自的检查,脚本需要解析每个任务并执行可执行文件和参数。每个验证标记中的属性执行以下操作:类型告诉脚本它将检查什么信息,开关告诉验证是真还是假。有关正在验证的项目的信息包含在验证元素中。下面的可用空间验证将被解释为“如果 C 驱动器有 200 MB 可用空间继续,否则失败”。我遇到的问题是,当我解析 XML 文件以获取验证时,我一次获得所有验证,而不是一次获得一个我可以处理的验证。对于一次解析一个验证的方法,我将不胜感激。
<?xml version="1.0"?>
<Tasks>
<Task Name="Test task 1">
<Validation Type="Freespace" Switch="True">C|200|MB</Validation>
<Validation Type="Registry Key" Switch="False">HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{342C9BB8-65A0-46DE-AB7A-8031E151AF69}</Validation>
<Validation Type="Registry Value" Switch="False">HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{342C9BB8-65A0-46DE-AB7A-8031E151AF69}|DisplayVersion|4.6.1.20870</Validation>
<Validation Type="Service" Switch="True">ccmexec|running</Validation>
<Executable>notepad.exe</Executable>
<Arguments></Arguments>
</Task>
<Task Name="Test Task 2">
<Validation Type="Registry Key" Switch="False">HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{342C9BB8-65A0-46DE-AB7A-8031E151AF69}</Validation>
<Validation Type="Registry Value" Switch="False">HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{342C9BB8-65A0-46DE-AB7A-8031E151AF69}|DisplayVersion|4.6.1.20870</Validation>
<Validation Type="Service" Switch="True">ccmexec|running</Validation>
<Validation Type="Freespace" Switch="True">C|200|MB</Validation>
<Executable>CMD.EXE</Executable>
<Arguments>/C "ping 127.0.0.1 & EXIT 33"</Arguments>
</Task>
</Tasks>
通常,要读取 XML 文件并解析其内容,我会执行类似于以下的操作:
[XML]$XMLALL = Get-Content ".\XMLFILE.XML"
$Tasks = $XMLALL.Tasks
Foreach ($item in $Tasks.Task){
$Name = $item.Name
$Validation = $item.Validation
$Executable = $item.Executable
$Arguments = $item.Arguments
Write-host "`n Task Name: " $Name
Write-host "Validation: " $Validation
Write-host "Executable: " $Executable
}
这给出了以下输出:
任务名称:测试任务 1 验证: 可执行文件:notepad.exe
任务名称:测试任务 2 验证: 可执行文件:CMD.EXE
【问题讨论】:
-
XMLALL.tasks.task[0].Validation是一个数组。您必须在foreach循环中评估每个Validation元素。
标签: xml powershell