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

Yev*_*niy 5 powershell hashtable environment-variables

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

这是我测试的方法:

$env:test = @{}
$env:test
$env:test|gm
Run Code Online (Sandbox Code Playgroud)

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

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 被返回。有人可以解释这种行为吗?

Cod*_*Org 1

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

PowerShellScriptFile-1.ps1

$global:hashtableVariable = @{
   'key1' = 'value1'
   'key2' = 'value2'
}
Run Code Online (Sandbox Code Playgroud)

PowerShellScriptFile-2.ps1

$global:hashTableVariable.GetEnumerator() | ForEach-Object {
       Write-Host "$($_.Key):$($_.Value)"
}
Run Code Online (Sandbox Code Playgroud)