簡體   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