Хеш-таблица не возвращает значение через используемую функцию

#function #powershell #output #hashtable

#функция #powershell #вывод #хэш-таблица

Вопрос:

У меня проблема с моим кодом Powershell. В настоящее время я пытаюсь использовать хэш-таблицу для присвоения определенного вывода заданному входному значению, но функция не отображает желаемый результат.

 $ComponentHashTable = @{
1 = 'Test1';
10 = 'Test10';
100 = 'Test100'}

function Output-Status ($Entry)
{
    Write-Host ($Entry   $ComponentHashTable.($Entry.Substring(($Entry.LastIndexOf("."))   1)))
}

$Entry = '10.10.10.10'

Output-Status ($Entry)
Read-Host
  

Насколько я понимаю, он должен выдавать следующий вывод:
10.10.10.10 Test10

Вместо этого он возвращает только следующее: 10.10.10.10

Приведенный выше код упрощен, но в основном идентичен коду, который я пытаюсь заставить работать.

Я был бы признателен за любую помощь в этом, поскольку я уже некоторое время пытаюсь заставить это работать.

Ответ №1:

Ответ @iRon абсолютно правильный. У меня есть другая версия, в которой вы по-прежнему используете целые числа в качестве ключей в хеш-таблице, но вычисляете индекс как int:

 function Output-Status ($Entry)
{
    $key = [int]$Entry.Substring(($Entry.LastIndexOf("."))   1)
    Write-Host $Entry $ComponentHashTable[$key]
}
  

Ответ №2:

Ключи хэш-таблицы имеют тип [object] .
Значение целого числа 1 — это другой ключ, а не строка '1' (и вы можете иметь оба разных объектных ключа в одной хэш-таблице):

 $Hashtable = @{}
$Hashtable.Add(1, 'Int')
$Hashtable.Add('1', 'String')
$Hashtable

Name                           Value
----                           -----
1                              String
1                              Int
  

В вашем случае вам необходимо использовать строковые ключи, чтобы иметь возможность сравнивать их с другими строковыми ключами:

 $ComponentHashTable = @{
'1' = 'Test1';
'10' = 'Test10';
'100' = 'Test100'}