使用powershell更改xml文件中的值

使用powershell更改xml文件中的值,xml,powershell,Xml,Powershell,我目前正处于系统集成学徒期的第一年。因此,编程和脚本在我的日常工作中扮演着越来越小的角色。我提供这些信息是为了说明我的编程水平,或者说是缺乏编程能力 然而,我的任务是编写一个powershell脚本,它将从csv文件收集信息,然后根据所述输入操作xml文件 到目前为止,我的脚本能够读取csv文件并打开xml进行操作。 我的困难在于所述xml文件本身的结构。结构和摘录如下 结构: <UserIntentions mediaName="CODE\win_b64\renamed_file.med

我目前正处于系统集成学徒期的第一年。因此,编程和脚本在我的日常工作中扮演着越来越小的角色。我提供这些信息是为了说明我的编程水平,或者说是缺乏编程能力

然而,我的任务是编写一个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结构,其中标记(?)不会加倍

我需要能够更改单个入口,按名称选择。为了做到这一点,我尝试使用where对象,但没有效果,只有错误。 然后,我尝试了以下方法:

if($file.UserIntention.SetVariable.name -eq $intention)
{$file.UserIntention.SetVariable.value = $value}
然而,这也有同样的结果,因为条件只需要满足一次就可以改变

所以,我希望得到一个解释:我如何在上面的结构中改变一个单独的值,按名称过滤?请记住,我以前从未使用过xml,也几乎没有接触过powershell

向您致以亲切的问候和衷心的感谢

如果有多个符合条件的属性,您可以使用脚本块执行此操作。将允许您创建筛选条件

$file.UserIntentions.SetVariable | Where Name -eq $intention | Foreach-Object {
    $_.Value = $value
}

亲爱的管理员:首先,谢谢您的回答。看到我对“where”的理解并非完全错误,这多少让人感到安慰。我将您的答案添加到我的代码中并尝试运行它,但它会导致错误,或者更确切地说,需要输入。下面的控制台输出:位于命令管道位置2的cmdlet ForEach对象为以下参数提供值:进程[0]:它显然需要某种形式的输入,但我还不知道为什么,或者是什么原因。你能告诉我吗?向庄子致以亲切的问候
$file.UserIntentions.SetVariable | Where Name -eq $intention | Foreach-Object {
    $_.Value = $value
}