未从嵌套哈希表中获取值

问题描述 投票:0回答:1

我没有得到下面的“开始时间”值,知道我错过了什么吗?下面的代码片段是大脚本的一部分。当我运行“$_”时,我确实获得了正确的键值对,但无法根据键名称获取值。遍历哈希表的最佳方法是什么?

$clusterstats = @{
    server1 = @{
                         'NPC Netapp napsdccp138v_prod'= @{
                                                              'nolongerneeded' =  ''
                                                              'status' =  'kRunning'
                                                              'starttime' =  '01/14/2023 08=00PM'
                                                              'clients' =  {

                                                                          }
                                                          }
                         'napsdccp500v_CIFS_new_prod'= @{
                                                            nolongerneeded =  ''
                                                            status =  'kRunning'
                                                            starttime =  '01/13/2023 07=00PM'
                                                            clients =  {

                                                                        }
                                                        }
                         'NPC Netapp napsdccp137v_prod'= @{
                                                              nolongerneeded =  ''
                                                              'status'=  'null'
                                                              'starttime'=  '01/11/2023 09=00PM'
                                                              'clients'=  @{
                                                                              'wfs_prod_home'=  99
                                                                          }
                                                          }
                         'NPC Netapp napsdccp500v_prod'= @{
                                                              'nolongerneeded'=  ''
                                                              'status'=  'kRunning'
                                                              'starttime'=  '01/13/2023 10=00PM'
                                                              'clients'=  {

                                                                          }
                                                          }
                         'NPC Netapp napsdccp352v_prod'=  @{
                                                              'nolongerneeded'=  ''
                                                              'status'=  'kRunning'
                                                              'starttime'=  '01/14/2023 07=00PM'
                                                              'clients'=  {

                                                                          }
                                                          }
                     }


    server2 = @{
                        'NPC Netapp napsdccp353v_prod'=  @{
                                                              'nolongerneeded'=  ''
                                                              'status'=  'kRunning'
                                                              'starttime'=  '01/15/2023 07=00PM'
                                                              'clients'=  {

                                                                          }
                                                          }
                }
    server3 = @{


               }
}

                $clusterstats.GetEnumerator()|sort-object -Property {$_.key} |foreach {  
                                    $server = $_.key
                                    $jobs = @() 
                                foreach ($job in $_.value.keys){
                                                $jobs += $job
                
                                                        }                                                      
                                if ($jobs.count -gt 0){
                                foreach ($job in $jobs){
     
                                $clusterstats.$($server).$($job).GetEnumerator()|ForEach-Object {
                                           $starttime = $_.value.starttime
                                           $starttime 
                                                                                               }

                                                       }
                                                         }
                                                         }

为什么 $starttime 没有显示?

powershell hash
1个回答
1
投票

我认为这可能是一个有点复杂的结构,但这应该可以帮助你开始:

foreach($server in $clusterstats.GetEnumerator()) {
    foreach($service in $server.Value.GetEnumerator()) {
        if($service.Value.ContainsKey('starttime')) {
            [pscustomobject]@{
                Server    = $server.Key
                Service   = $service.Key
                StartTime = $service.Value['starttime']
            }
        }
    }
}

使用示例数据,输出将是:

Server  Service                      StartTime
------  -------                      ---------
server1 napsdccp500v_CIFS_new_prod   01/13/2023 07=00PM
server1 NPC Netapp napsdccp352v_prod 01/14/2023 07=00PM
server1 NPC Netapp napsdccp137v_prod 01/11/2023 09=00PM
server1 NPC Netapp napsdccp500v_prod 01/13/2023 10=00PM
server1 NPC Netapp napsdccp138v_prod 01/14/2023 08=00PM
server2 NPC Netapp napsdccp353v_prod 01/15/2023 07=00PM

除非您确实需要使用哈希表的哈希表,否则我认为这并没有利用

IDictionary
的优良品质,因为您需要枚举所有键值对,从这个意义上说,可以通过简单地使用来简化此任务
PSCustomObject

© www.soinside.com 2019 - 2024. All rights reserved.