В вашем примере $ _. Node.employee.salary.value - это просто массив строк, поэтому cmd не может ссылаться на какие-либо свойства, а $ basic и $ allowance в итоге остаются пустыми.Кроме того, foreach работает только один раз, потому что есть только один отдел.
Таким образом, вы уже работаете с множеством сотрудников, а не с одним отделом.Я также получаю свойство узла с пути.$ basic и $ allowance по-прежнему являются объектами со свойствами value и #text.Я выводю объект сотрудника, который соответствует.Это похоже на то, что вы пытались сделать.Сравнение должно быть [int], иначе «500» больше, чем «4000».
(Select-Xml /department/employee salary.xml).node |
ForEach {
$basic = $_.salary | where value -eq basic
$allowance = $_.salary | where value -eq allowance
if([int]$allowance.'#text' -ge $basic.'#text') {
$_ | select name,
@{n='basic'; e={$basic.'#text'}},
@{n='allowance'; e={$allowance.'#text'}}
}
}
name basic allowance
---- ----- ---------
ABC 5000 8000