Преобразование значений numeri c в альтернативные значения в Powershell - PullRequest
0 голосов
/ 19 июня 2020

У меня есть две переменные, $audience и $prodType, которые будут содержать значения 1-3 и 1-4 соответственно. Я хотел бы создать своего рода таблицу для преобразования значений numeri c в слова, которые пользователь может прочитать и понять. Например, если $audience = '1' я хотел бы, чтобы сценарий был Write-Host "audience is set to New York", а если $prodType = '3', сценарий был бы Write-Host "prodType is set to Sandwiches".

Я хотел бы более чистый способ сделать это, тогда серия elseif заявления.

If($audience = '1'){
  Write-Host "audience is set to New York"
}
elseif($audience = '2'){
  Write-Host "audience is set to Los Angeles"
}

Может ли кто-нибудь помочь мне построить такой модуль?

1 Ответ

3 голосов
/ 19 июня 2020

Есть несколько способов добиться этого, но в зависимости от вашего сценария самый простой - с хэш-таблицами :

$audienceLocation = @{
  '1' = 'New York'
  '2' = 'Berlin'
  '3' = 'Beijing' 
}

$audience = '1'

Write-Host "audience is set to $($audienceLocation[$audience])"

В вашем случае входные значения - это все строки - но если бы они были числовыми, и вы не возражали против преобразования в строковую метку без пробелов, и enum тип также был бы вариантом.

Перечисления - это просто наборы строк метки, связанные с некоторым базовым целым числом, и могут быть преобразованы в любом направлении с помощью простого преобразования:

enum AudienceLocation
{
  NewYork = 1
  Berlin  = 2
  Beijing = 3
}

$audience = 1
$location = [AudienceLocation]$audience

Write-Host "audience is set to $location"

Хорошая особенность enum в том, что это правильный тип, поэтому вы можете неявно преобразовать ввод функции к указанному параметру типа c enum:

function Do-Something
{
  param([AudienceLocation]$Audience)

  Write-Host "audience is set to $Audience"
}

Do-Something -Audience 1 # will automatically turn `$Audience` into `'NewYork"` in a string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...