PowerShell中如何获取Hashtable类型环境变量的实际内容?
问题描述
执行PowerShell脚本 ./scriptName.ps1 -PAT ***** 时,尝试通过环境变量$env:Head获取脚本内的Hashtable类型变量$header,但控制台查看$env:Head时仅显示字符串System.Collections.Hashtable,无法查看Hashtable的实际内容(期望格式如下):
Name Value ---- ----- authorization Basic ********
脚本代码如下:
param ( [string]$PAT ) $Personal_Access_Token = "$PAT" $user = "" $token = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $Personal_Access_Token))) $header = @{authorization = "Basic $token"} $env:Head = $header.psobject.ImmediateBaseObject
解决方案
环境变量仅支持存储字符串,无法直接保留Hashtable的类型信息,因此需要通过序列化、直接输出或会话变量的方式传递内容,以下是三种可行方案:
方案1:序列化Hashtable为JSON存入环境变量
修改脚本,将Hashtable转换为JSON字符串存储到环境变量,外部再解析回Hashtable:
param ( [string]$PAT ) $Personal_Access_Token = "$PAT" $user = "" $token = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $Personal_Access_Token))) $header = @{authorization = "Basic $token"} # 将Hashtable序列化为压缩JSON字符串 $env:Head = $header | ConvertTo-Json -Compress
外部控制台解析命令:
# 解析JSON字符串为Hashtable $parsedHeader = $env:Head | ConvertFrom-Json -AsHashtable # 查看Hashtable内容 $parsedHeader
方案2:脚本直接输出Hashtable,外部捕获输出
若无需通过环境变量传递,可让脚本直接输出$header,外部执行时捕获输出结果:
修改脚本:
param ( [string]$PAT ) $Personal_Access_Token = "$PAT" $user = "" $token = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $Personal_Access_Token))) $header = @{authorization = "Basic $token"} # 直接输出Hashtable $header
外部执行并捕获:
$header = ./scriptName.ps1 -PAT ***** $header
方案3:使用PowerShell全局会话变量(同一会话内有效)
如果脚本与后续操作在同一个PowerShell会话中,可使用全局会话变量替代环境变量:
修改脚本:
param ( [string]$PAT ) $Personal_Access_Token = "$PAT" $user = "" $token = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $Personal_Access_Token))) $header = @{authorization = "Basic $token"} # 赋值给全局会话变量 $global:Head = $header
同一会话内直接访问:
$Head
内容的提问来源于stack exchange,提问作者samy KHEZNADJI
相关产品推荐
相关产品推荐

