首页 > 解决方案 > 从类型为 system.string 的变量中读取值

问题描述

$gh我有一个带有以下输出的变量。我的意思是当我输入$gh. 我将得到如下值。

PS C:\Windows\system32>$gh

No.  Department Name          Environment Id           Location Name   Ready Status          Machine Pure Status   
1    EMA-MET-CAT5-KY04        Environment-k2345             EMA               Enabled                  GREEN         
2    EMA-MET-CAT5-KY03        Environment-k89               EMA               Enabled                  GREEN         
3    EMA-EFT-JIU-FC           Environment-k3456             EMA               Enabled                  GREEN         
4    EMA-MET-CAT5-KY08        Environment-k7890             EMA               Not Ready                UNKNOWN       
5    EMA-MET-CAT5-KY02-ED      Environment-k9                EMA               Enabled                  GREEN         

$gh的类型System.String如 所示$gh.GetType().fullname

我想从部门名称和环境 ID 中获取值到一个数组或变量中,这样如果我查询 EMA-MET-CAT5-KY08,我可以获得环境 ID Environment-k7890。

标签: powershell

解决方案


假设部门名称和环境 ID 中没有空格,我将使用正则表达式 (regex) 查找行首的模式(数字、空格、名称、空格、id)并将它们放入哈希表中。

PS C:\> $lookup = @{}
PS C:\> [regex]::matches($gh, '(?m)^\d+\s+([^\s]+)\s+([^\s]+)').foreach{
    $lookup[$_.groups[1].value] = $_.groups[2].value
}
PS C:\> $lookup

Name                           Value
----                           -----
EMA-EFT-JIU-FC                 Environment-k3456
EMA-MET-CAT5-KY02-ED           Environment-k9
EMA-MET-CAT5-KY04              Environment-k2345
EMA-MET-CAT5-KY03              Environment-k89
EMA-MET-CAT5-KY08              Environment-k7890


PS C:\> $lookup['EMA-MET-CAT5-KY08']
Environment-k7890

推荐阅读