从文件保存和检索字典对象

时间:2019-04-03 12:24:02

标签: powershell

我创建了一个字典,并填充了该字典。还将字典的内容保存到文件中。

$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

现在,我想创建另一个字典对象,并使用该文件的内容填充该字典。找不到合适的方法来做到这一点。当我尝试从文件中读取内容时,将其读取为数组。

2 个答案:

答案 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