我没有得到下面的“开始时间”值,知道我错过了什么吗?下面的代码片段是大脚本的一部分。当我运行“$_”时,我确实获得了正确的键值对,但无法根据键名称获取值。遍历哈希表的最佳方法是什么?
$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 没有显示?
我认为这可能是一个有点复杂的结构,但这应该可以帮助你开始:
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
。