【问题标题】:Hashtable not returning value via used function哈希表不通过使用的函数返回值
【发布时间】:2020-10-27 09:47:25
【问题描述】:

我的 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

上面给出的代码是经过简化的,但与我正在尝试的代码基本相同。

我将不胜感激,因为我一直在努力让它工作一段时间。

【问题讨论】:

    标签: function powershell output hashtable


    【解决方案1】:

    @iRon 的回答绝对正确。我有一个不同的版本,您仍然使用整数作为哈希表中的键,但将索引计算为 int:

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

    【讨论】:

      【解决方案2】:

      Hash table 键的类型为 [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'}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-16
        • 1970-01-01
        • 1970-01-01
        • 2013-10-18
        • 2018-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多