В настоящее время я учусь на первом курсе по системной интеграции. Таким образом, программирование и создание сценариев играли меньшую роль в моей повседневной жизни. Я предоставляю эту информацию, чтобы проиллюстрировать свой уровень программирования или, скорее, его отсутствие.
Тем не менее мне было поручено написать скрипт 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.
С уважением и большим спасибо