【问题标题】:Changing values in a xml file using powershell使用powershell更改xml文件中的值
【发布时间】:2020-03-16 20:57:23
【问题描述】:

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

尽管如此,我的任务是编写一个 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。

诚挚的问候,非常感谢

【问题讨论】:

    标签: xml powershell


    【解决方案1】:

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

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

    【讨论】:

    • 尊敬的 AdminOfThings,首先,感谢您的回答。看到我对“哪里”的处理方式并非完全错误,这有点令人欣慰。我将您添加到我的代码中并尝试运行它,但它会导致错误,或者更确切地说需要输入。下面的控制台输出:命令管道位置 2 处的 cmdlet ForEach-Object 为以下参数提供值: Process[0]:它显然需要某种形式的输入,但我还不知道为什么,或者是什么原因。你能告诉我吗?亲切的问候Tshuangtse
    猜你喜欢
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 2022-08-19
    • 2021-03-29
    • 2013-08-10
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多