我有一些软件可以解析.xml文件以获取登录信息(用户名和密码)。在过去,我们一直在为这个软件使用相同的用户名和密码,数百个用户,这已经成为一个安全问题。我可以使用新的登录信息轻松替换此.xml文件,但我需要一些帮助,以便为数百名用户创建用户名。
到目前为止,我已为每台需要复制的计算机生成了一个XML文件。
例如:
Computer1.xml
Computer2.xml
Computer3.xml
...
Computer290.xml
XML文件本身就是这样的:
<?xml version="1.0" encoding="utf-8"?>
<settings>
<server default="true">
<connection ssl="false">
<address>fax.servername.com</address>
<login>USERNAME</login>
<password>PASSWORD</password>
</connection>
<about>
<model>MODELNUMBER</model>
<version>VERSIONNUMBER</version>
</about>
<user>
<contact_url>http://contacturl/users/username</contact_url>
<username>USERNAME</username>
<name>JOHN DOE</name>
<organization>Company Name</organization>
<default_cover_page_enabled>false</default_cover_page_enabled>
<default_cover_page_name></default_cover_page_name>
<priority>3</priority>
<max_attempts>3</max_attempts>
<interval>300</interval>
<receipt>failure</receipt>
<receipt_attachment>pdf</receipt_attachment>
</user>
</server>
</settings>
我知道以纯文本格式存储密码是一个糟糕的想法,但遗憾的是该软件已经过时并且不支持其他方法。
我有一个包含用户名的csv文件以及他们使用的计算机。
e.g。 (编辑:更改为CSV文件格式)
User1,Computer1 User2,Computer2 User3,Computer3
如何获取这些用户名并将其弹出到xml文件中,以便它们与正确的计算机名称相对应?
答案 0 :(得分:0)
让我们考虑一下这个user-computer.csv:
UserName,ComputerName
User1,Computer1
User2,Computer2
User3,Computer3
然后您可以尝试以下操作(使用正确的正确路径进行修改,使用此演示中的当前目录):
Import-Csv -Path .\user-computer.csv | ForEach-Object {
#$_ is the current object
#Your "xml" is not a valid xml file as it doesn't have a root element, so we should use text replacement to modify the files.
(Get-Content -Path ".\$($_.ComputerName).xml") -replace '(?<=<username>)(.*?)(?=<\/username>)', $_.UserName | Set-Content -Path ".\$($_.ComputerName).xml"
}
答案 1 :(得分:0)
如果您只是想根据CSV中的列表验证计算机/用户配对,我会从CSV创建一个哈希表:
$csv = @{}
Import-Csv 'C:\path\to\your.csv' | % {
$csv[$_.ComputerName] = $_.UserName.Trim()
}
然后像这样进行验证:
Get-ChildItem 'C:\path\to\*.xml' | % {
[xml]$xml = Get-Content $_.FullName
$username = $xml.SelectSingleNode('//username').'#text'.Trim()
if ($username -ne $csv[$_.BaseName]) {
"[{0}] User mismatch: {1}, {2}" -f $_.BaseName, $username, $csv[$_.BaseName]
}
}