Изменение значений в файле xml с помощью powershell - PullRequest
0 голосов
/ 16 марта 2020

В настоящее время я учусь на первом курсе по системной интеграции. Таким образом, программирование и создание сценариев играли меньшую роль в моей повседневной жизни. Я предоставляю эту информацию, чтобы проиллюстрировать свой уровень программирования или, скорее, его отсутствие.

Тем не менее мне было поручено написать скрипт powershell, который будет собирать информацию из csv-файла и затем манипулировать xml файл на основе указанного ввода.

На данный момент мой скрипт может считывать файл csv и открывать xml для манипуляции. Моя борьба лежит в структуре самого указанного файла xml. Структура и выдержка ниже

Структура:

<UserIntentions mediaName="CODE\win_b64\renamed_file.media" mediaVersion="421">
<SetVariable name="component_one" value="true"/>
<SetVariable name="component_two" value="3DPASS_TOMEE_PORT"/>
<SetVariable name="component_three" value="CERTIFICATES_DIR"/>

Код:

[xml]$file = Get-Content -Path $PSScriptRoot"\req\targetfile_Template.xml"
$file.UserIntentions.SetVariable.Value = $value

Как видите, тег повторяется снова и снова. Таким образом, по крайней мере, насколько я понимаю, я не могу работать с чем-то, как показано выше, так как я бы изменил все значения сразу.

Я пробовал, конечно, Google раньше, но все примеры, с которыми я сталкивался, имели больше точная xml структура, где теги (?) не удваиваются.

Мне нужно иметь возможность изменять отдельные записи, выбранные по имени. Для этого я попытался использовать объект where, но безрезультатно, кроме ошибок. Затем я попробовал следующее:

if($file.UserIntention.SetVariable.name -eq $intention)
{$file.UserIntention.SetVariable.value = $value}

Это, однако, дает тот же результат, поскольку условие должно быть выполнено только один раз, чтобы все изменились.

Итак, что я надеюсь чтобы получить объяснение: как я могу изменить индивидуальное значение в моей структуре выше, отфильтрованное по имени? Пожалуйста, имейте в виду, что я никогда раньше не работал с xml и едва касался PowerShell.

С уважением и большим спасибо

1 Ответ

0 голосов
/ 16 марта 2020

Это можно сделать с помощью блока сценариев Foreach-Object , если есть несколько атрибутов, соответствующих критериям. Где позволит вам создать условие фильтра.

$file.UserIntentions.SetVariable | Where Name -eq $intention | Foreach-Object {
    $_.Value = $value
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...