[英]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&</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&"
),您可以這樣做:
使用區分大小寫 XPath
[xml]$xml = @"
<root>
<User Name="USER1">
<Option Name="Pass">45E4EDE</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="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>
</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&"</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&"</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&"</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.