哈希表不通过使用的函数返回值

Hashtable not returning value via used function

我的 Powershell 代码有问题。 我目前正在尝试使用散列 table 将某个输出分配给给定的输入值,但该函数未显示所需的输出。

$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

上面给出的代码经过了简化,但与我尝试使用的代码基本相同。

对于这方面的任何帮助,我将不胜感激,因为我已经尝试让它工作了一段时间。

Hash table 键的类型为 [object].
意思是整数 1 与字符串 '1' 是不同的键(并且您可以在一个散列 table 中同时拥有两个不同的对象键):

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

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

在您的情况下,您需要使用字符串键才能将它们与其他字符串键进行比较:

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

@iRon 的回答完全正确。我有一个不同的版本,您仍然使用整数作为散列中的键 table,但将索引计算为 int:

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