我想实现一个简单的目标。在多个服务器上按定义的顺序停止某些服务,然后按相反的顺序启动它们。
所以第一步是定义一个有序的哈希表/字典。
$serviceServer = [ordered]@{
"service3" = @("server1")
"service1" = @("server2", "server3")
"service2" = @("server1", "server2", "server3")
}
但是如何反转服务重启的顺序呢?
在 php 中我会做一个 array_reverse ...没什么大不了的,但 Powershell 似乎有它自己的简单含义。
我以多种方式尝试了 Sort-Object,但顺序保持不变。
$reverseServices = $serviceServer | Sort-Object
您必须从原始有序哈希表中获取键作为数组,反转该数组,然后使用相反顺序的键构造一个新的有序哈希表:
$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] }
两种想法,一种是使用
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
都完好无损,但您可以按照此逻辑创建一个新的。
Не могу открыть ссылку на изображение в чём может быть причина что-то нужно поменять либо что-то нужно удалит в этой ссылке помогите https://tinki.vip/p/982ndfsh4n2l12fdsjsdf