читать значения из переменной типа system.string - PullRequest
2 голосов
/ 02 апреля 2019

У меня была переменная $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.

Я хотел бы получить значения из названия отдела и средыидентификатор в массив или переменную, чтобы при запросе EMA-MET-CAT5-KY08 я мог получить идентификатор среды Environment-k7890.

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Предполагая, что в имени отдела и идентификаторе среды нет пробелов, я бы использовал регулярное выражение (регулярное выражение) для поиска шаблона в начале строки (число, пробел, имя, пробел, идентификатор) и поместил их вхеш-таблица.

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
0 голосов
/ 03 апреля 2019
  • Другой подход - разделить таблицу на столбцы
    , заменив два или более пробелов запятой
  • , так как у вас есть подходящие заголовки, которые вы затем можете ConvertFrom-Csv и
  • Select-Object требуемые свойства

$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        
"

$Data = $gh -split [environment]::newline | ForEach-Object {
    $_ -replace ' {2,}',','
} | ConvertFrom-csv | Select-Object "Department Name","Environment Id"

$Data | Where-Object 'Department Name' -eq 'EMA-MET-CAT5-KY08'

Пример вывода:

Department Name   Environment Id
---------------   --------------
EMA-MET-CAT5-KY08 Environment-k7890 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...