我创建了一个字典,并填充了该字典。还将字典的内容保存到文件中。
$PasswordDictionary = New-Object 'system.collections.generic.dictionary[string,string]'
$PasswordDictionary["abc"] = "xyz"
$PasswordDictionary["pqr"] = "efg"
$PasswordDictionary | out-string | set-content "C:\Passwords\Passwords.txt"
Password.txt看起来像这样
Key Value
--- -----
abc xyz
pqr efg
现在,我想创建另一个字典对象,并使用该文件的内容填充该字典。找不到合适的方法来做到这一点。当我尝试从文件中读取内容时,将其读取为数组。
答案 0 :(得分:2)
最好在保存之前序列化数据。例如,您可以将其转换为Json:
$PasswordDictionary.GetEnumerator() | ConvertTo-Json | Out-File "C:\Passwords\Passwords.txt"
将为您提供以下文件内容:
[
{
"Key": "abc",
"Value": "xyz"
},
{
"Key": "pqr",
"Value": "efg"
}
]
您可以使用ConvertFrom-Json
cmdlet将其读回到Powershell:
$restored = (Get-Content "C:\Passwords\Passwords.txt" | ConvertFrom-Json)
在这种情况下,您没有得到字典,而是得到了一个对象数组。您仍然可以像下面这样迭代:
$restored | ForEach-Object { "{0} - {1}" -f $_.key, $_.value }
abc - xyz
pqr - efg
答案 1 :(得分:1)
另一种方法是将哈希表与json一起使用。它们的作用类似于字典。
要保存json:
$PasswordDictionary = @{}
$PasswordDictionary["abc"] = "xyzz"
$PasswordDictionary["pqr"] = "efg"
$PasswordDictionary | ConvertTo-Json | set-content "C:\Passwords\Passwords.txt"
将数据读回哈希表:
$hashtable = @{}
$json = Get-Content "C:\Passwords\Passwords.txt" | Out-String
(ConvertFrom-Json $json).psobject.properties | Foreach { $hashtable[$_.Name] = $_.Value }
从哈希表中获取值将类似于字典
$hashtable["abc"]
xyzz