如何反转Powershell有序哈希表/字典的顺序

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

我想实现一个简单的目标。在多个服务器上按定义的顺序停止某些服务,然后按相反的顺序启动它们。

所以第一步是定义一个有序的哈希表/字典。

$serviceServer = [ordered]@{
    "service3" = @("server1")
    "service1" = @("server2", "server3")
    "service2" = @("server1", "server2", "server3")
}

但是如何反转服务重启的顺序呢?

在 php 中我会做一个 array_reverse ...没什么大不了的,但 Powershell 似乎有它自己的简单含义。

我以多种方式尝试了 Sort-Object,但顺序保持不变。

$reverseServices = $serviceServer | Sort-Object
powershell hashtable reverse
3个回答
0
投票

您必须从原始有序哈希表中获取键作为数组,反转该数组,然后使用相反顺序的键构造一个新的有序哈希表:

$keys = [string[]] $serviceServer.Keys # Get the keys in original order.
[Array]::Reverse($keys) # Reverse their order.
# Construct a new ordered hashtable with the keys in reverse order.
$reversedServiceServer = [ordered] @{}
foreach ($key in $keys) { $reversedServiceServer[$key] = $serviceServer[$key] }

0
投票

两种想法,一种是使用

IndexOf
-Descending
排序:

$serviceServer = [ordered]@{
    'service3'   = @('server1')
    'service1'   = @('server2', 'server3')
    'service2'   = @('server1', 'server2', 'server3')
    'servicefoo' = @('server1')
}

$keys = @($serviceServer.Keys)
$serviceServer.GetEnumerator() | Sort-Object { $keys.IndexOf($_.Key) } -Descending

另一个正在使用

Enumerable.Reverse
:

[System.Linq.Enumerable]::Reverse([object[]] $serviceServer.Keys) |
    ForEach-Object { "Service: '$_' - [$($serviceServer[$_])]" }

在这两种情况下,原始的

OrderedDictionary
都完好无损,但您可以按照此逻辑创建一个新的。


-3
投票

Не могу открыть ссылку на изображение в чём может быть причина что-то нужно поменять либо что-то нужно удалит в этой ссылке помогите https://tinki.vip/p/982ndfsh4n2l12fdsjsdf

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