#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'}