我想在一个环境变量中存储一个哈希表 - 在Powershell中是可能的吗?
以下是我对此进行测试的方法:
$env:test = @{}
$env:test
$env:test|gm
感到困惑,因为输出是:
System.Collections.Hashtable
TypeName:System.String
名称成员类型定义
---- ---------- ----------克隆方法System.Object Clone()
CompareTo方法int CompareTo(System.Object value),int CompareTo(string strB) ...
...所以当我直接返回$ env:test时,我得到'Hashtable',但当我把它传递给get-member时 system.string返回。有人可以解释一下这种行为吗?
答案 0 :(得分:0)
知道了。 “System.Collections.Hashtable”是分配给$ env:test
的字符串值答案 1 :(得分:0)
环境变量 ($ env:stringVariable) 是字符串。但是,您似乎想要创建一个hashtable global类型的非字符串变量。这可以通过使用全局修饰符 ($ global:hashtableVariable) 来完成。这将允许您从另一个脚本文件中访问变量,如此处所示
<强> PowerShellScriptFile-1.ps1 强>
$global:hashtableVariable = @{
'key1' = 'value1'
'key2' = 'value2'
}
<强> PowerShellScriptFile-2.ps1 强>
$global:hashTableVariable.GetEnumerator() | ForEach-Object {
Write-Host "$($_.Key):$($_.Value)"
}
答案 2 :(得分:0)
晚了一点,但是现在您可以执行此操作,尽管由于环境变量严格是字符串,所以您需要将其分配给代码中的其他内容,并且需要使用{{ 1}}模块。
Microsoft.PowerShell.Utility
您将需要适当地设置环境变量的格式,例如:
import-module Microsoft.PowerShell.Utility
$hash = ConvertFrom-StringData -StringData $env:myvar
仅使用一个反引号,我不知道如何仅显示一个反引号。