使用非字符串作为$ env:变量

时间:2012-10-29 19:26:14

标签: powershell environment-variables hashtable

我想在一个环境变量中存储一个哈希表 - 在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返回。有人可以解释一下这种行为吗?

3 个答案:

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

仅使用一个反引号,我不知道如何仅显示一个反引号。

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