5

我想将哈希表存储在环境变量中——这在 Powershell 中可行吗?

这是我测试的方法:

$env:test = @{}
$env:test
$env:test|gm

并且感到困惑,因为输出是:

System.Collections.Hashtable

类型名称:System.String

名称 MemberType 定义

---- ---------- ---------- 克隆方法 System.Object Clone()
CompareTo 方法 int CompareTo(System.Object value), int CompareTo(string strB) 。 ..

...因此,当我直接返回 $env:test 时,我得到了 'Hashtable',但是当我通过管道将它传递给 get-member 时,返回了 system.string。有人可以解释这种行为吗?

4

3 回答 3

1

环境变量($env:stringVariable)是字符串。但是,您似乎希望将哈希表类型的非字符串变量设为全局变量。这可以通过使用全局修饰符 ($global:hashtableVariable)来完成。这将允许您从另一个脚本文件中的一个脚本文件访问变量,如此处所示

PowerShellScriptFile-1.ps1

$global:hashtableVariable = @{
   'key1' = 'value1'
   'key2' = 'value2'
}

PowerShellScriptFile-2.ps1

$global:hashTableVariable.GetEnumerator() | ForEach-Object {
       Write-Host "$($_.Key):$($_.Value)"
}
于 2016-07-12T05:33:54.113 回答
0

知道了。“System.Collections.Hashtable”是分配给 $env:test 的字符串值

于 2012-10-29T20:06:29.533 回答
0

晚了一点,但是现在您可以这样做了,尽管由于环境变量是严格的字符串,您需要将它分配给代码中的其他内容,并且您需要使用该Microsoft.PowerShell.Utility模块。

import-module Microsoft.PowerShell.Utility 
$hash = ConvertFrom-StringData -StringData $env:myvar

您将需要适当地格式化您的环境变量,例如:

$env:myvar = "Fname = John ``n Lname= Smith ``n DOB = 01/01/1980"

只使用一个反引号,我不知道如何只让一个显示正确。

请参阅https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/convertfrom-stringdata?view=powershell-7

于 2020-03-31T17:26:45.990 回答