首页 > 解决方案 > 使用 powershell 更改 xml 文件中的值

问题描述

我目前是系统集成学徒的第一年。因此,编程和脚本在我的日常生活中扮演着较小的角色。我提供这些信息是为了说明我的编程水平,或者说缺乏编程水平。

尽管如此,我的任务是编写一个 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-object,但没有任何效果,但出现错误。然后,我尝试了以下方法:

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

然而,这具有相同的结果,因为条件只需要满足一次就可以改变。

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

亲切的问候和非常感谢

标签: xmlpowershell

解决方案


如果有多个属性符合条件,您可以使用Foreach-Object脚本块来执行此操作。Where将允许您创建过滤条件。

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

推荐阅读