繁体   English   中英

将字符串替换为基于导入的 CSV 列的文件

[英]Replace string to a file based from an imported CSV column

如何根据外部 CSV 列将循环中的字符串替换为 myfile.xml?

myfile.xml 包含:

<User Name="USER1">
            <Option Name="Pass">45E4EDE</Option>
            <Option Name="Salt">P&amp;</Option>
            <Option Name="Group"></Option>
            <Option Name="Bypass server userlimit">0</Option>
            <Option Name="User Limit">0</Option>
            <Option Name="IP Limit">0</Option>
            <Option Name="Enabled">1</Option>
        /User>
<User Name="USER2">
            <Option Name="Pass">4533EDE</Option>
            <Option Name="Salt">P&/Option>
            <Option Name="Group"></Option>
            <Option Name="Bypass server userlimit">0</Option>
            <Option Name="User Limit">0</Option>
            <Option Name="IP Limit">0</Option>
            <Option Name="Enabled">1</Option>
        /User>
<User Name="USER3">
            <Option Name="Pass">733EDE</Option>
            <Option Name="Salt">P&/Option>
            <Option Name="Group"></Option>
            <Option Name="Bypass server userlimit">0</Option>
            <Option Name="User Limit">0</Option>
            <Option Name="IP Limit">0</Option>
            <Option Name="Enabled">1</Option>
        /User>

外部 mycsv.csv 包含:

Users,Comments,HomeDir
USER1,account1,c:\folder1
USER2,account2,c:\folder2
USER3,account3,c:\folder3

我需要在“用户”列中使用 foreach USER 将 myfile.xml 中的"Enabled">1替换为"Enabled">0 可能我需要一些像Select-String $_.Users -Context 0,7这样的代码,但我需要一个提示。 谢谢

一旦您修复了 XML 中的错误,您向我们展示了(没有根标签,各种结束标签没有开头< ,值P&应该是"P&amp;" ),您可以这样做:

使用区分大小写 XPath

[xml]$xml = @"
<root>
    <User Name="USER1">
        <Option Name="Pass">45E4EDE</Option>
        <Option Name="Salt">"P&amp;"</Option>
        <Option Name="Group"></Option>
        <Option Name="Bypass server userlimit">0</Option>
        <Option Name="User Limit">0</Option>
        <Option Name="IP Limit">0</Option>
        <Option Name="Enabled">1</Option>
    </User>
    <User Name="USER2">
        <Option Name="Pass">4533EDE</Option>
        <Option Name="Salt">"P&amp;"</Option>
        <Option Name="Group"></Option>
        <Option Name="Bypass server userlimit">0</Option>
        <Option Name="User Limit">0</Option>
        <Option Name="IP Limit">0</Option>
        <Option Name="Enabled">1</Option>
    </User>
    <User Name="USER3">
        <Option Name="Pass">733EDE</Option>
        <Option Name="Salt">"P&amp;"</Option>
        <Option Name="Group"></Option>
        <Option Name="Bypass server userlimit">0</Option>
        <Option Name="User Limit">0</Option>
        <Option Name="IP Limit">0</Option>
        <Option Name="Enabled">1</Option>
    </User>
</root>
"@
# loop though the usernames in the CSV, find the node and if found set Enabled to value '0'
foreach ($user in (Import-Csv -Path 'D:\Test\test.csv').Users) {
    $node = $xml.root.SelectSingleNode("//User[@Name='$user']/Option[@Name='Enabled']")
    if ($node) { $node.InnerText = '0' }
}
# save the updated xml file
$xml.Save("D:\Test\test.xml")

或使用不区分大小写的“dotted”方法

# loop though the usernames in the CSV, find the node and if found set Enabled to value '0'
foreach ($user in (Import-Csv -Path 'D:\Test\test.csv').Users) {
    $xml.root.User | Where-Object { $_.Name -eq $user } | ForEach-Object {
        ($_.Option | Where-Object { $_.Name -eq 'Enabled' }).'#text' = '0'
    }
}
# save the updated xml file
$xml.Save("D:\Test\test.xml")

这两种方法都会产生这个 XML 文件作为结果

<root>
  <User Name="USER1">
    <Option Name="Pass">45E4EDE</Option>
    <Option Name="Salt">"P&amp;"</Option>
    <Option Name="Group">
    </Option>
    <Option Name="Bypass server userlimit">0</Option>
    <Option Name="User Limit">0</Option>
    <Option Name="IP Limit">0</Option>
    <Option Name="Enabled">0</Option>
  </User>
  <User Name="USER2">
    <Option Name="Pass">4533EDE</Option>
    <Option Name="Salt">"P&amp;"</Option>
    <Option Name="Group">
    </Option>
    <Option Name="Bypass server userlimit">0</Option>
    <Option Name="User Limit">0</Option>
    <Option Name="IP Limit">0</Option>
    <Option Name="Enabled">0</Option>
  </User>
  <User Name="USER3">
    <Option Name="Pass">733EDE</Option>
    <Option Name="Salt">"P&amp;"</Option>
    <Option Name="Group">
    </Option>
    <Option Name="Bypass server userlimit">0</Option>
    <Option Name="User Limit">0</Option>
    <Option Name="IP Limit">0</Option>
    <Option Name="Enabled">0</Option>
  </User>
</root>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM