Итерация по узлам / объектам XML и передача переменных в Powershell - PullRequest
0 голосов
/ 04 октября 2019

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

Вот пример данных:

<applications>
  <size>75</size>
     <application>
        <name>Applications 1</name>
        <path>/Applications/Utilities/Application 1</path>
        <version>10.14</version>
     </application>
     <application>
        <name>Application 2</name>
        <path>/Applications/Utilities/Application 2</path>
        <version>6.3.9</version>
     </application>
</applications

IЯ смотрел на использование ForEach-Object при попытке вывести его, но безрезультатно.

[string]$applicationProperties = $API.applications.application| ForEach-Object {
    $_.name
    $_.path
    $_.version
}

Это работает, но помещает их все в одну строку, я хотел бы, чтобы они печатались на отдельных строках, но яНе удалось добавить префикс переменной $ _. Я новичок в POSH, как вы можете сказать.

например, поэтому я хотел бы сохранить данные имени / пути / версии в переменных

[string]$applicationProperties = $API.applications.application | ForEach-Object {
    [string]$name_var = $_.name 
    [string]$path_var = $_.path
    [string]$version_var = $_.variable
}

Это дает мне одно "приложение", но не все возможные объекты. Также упоминается, что даже когда я записываю $ name_var, он не обращается к этой переменной? Нужно ли что-то делать для доступа к этой переменной?

Буду признателен за любой совет.

1 Ответ

0 голосов
/ 04 октября 2019

Когда вы присваиваете выходные данные от ForEach-Object до [string]$applicationProperties, вы заставляете PowerShell преобразовывать все строки в одну строку из-за приведения к [string].

Что вам нужно сделать, так это создать новый объект для каждого application узла, для которого вы выполняете итерацию:

$appInformation = $API.applications.application | ForEach-Object {
    # Create a new custom objects with the values from the XML nodes
    [pscustomobject]@{
        Name = $_.name 
        Path = $_.path
        Version = $_.version
    }
}

Теперь $appInformation будет содержать массив объектов, каждый из которых имеет Name, Path и Version свойство. Затем вы можете в дальнейшем использовать и / или манипулировать этими объектами в своих сценариях, а не просто иметь набор строк:

$appInformation |ForEach-Object {
    Write-Host "Here is the version of application '$($_.Name)': $($_.Version)"
}

Если вы хотите, чтобы они выводились на консоль с каждым значением свойства наотдельной строкой просто перенаправьте массив в Format-List:

$appInformation |Format-List
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...