遍历哈希 table,找到一个小于数字的值,并将其添加到新的哈希 table
Looping through a hash table, finding a value less than a number, and adding that to a new hashtable
我有一个服务器名称作为键,它的可用 space 作为它的值,如:
$hash= @{}
#in the loop I get the server name and then I get the space as an integer and add it to the table like:
$hash.add($server,$space)
循环完成后,我想遍历列表并将 space 小于 80 的服务器添加到不同的 table 使用
$badServers = foreach($entry in $serverSpace){
if($entry.Keys -le 80){
$badServers.add($entry)
}}
但我的输出最终将每台服务器放入 $badServers。就好像这些值实际上没有列出。不知道我做错了什么。
假设您的哈希表的值是 [int]
类型,例如:
PS /> $hash
Name Value
---- -----
SERVER0 93
SERVER1 87
SERVER2 84
SERVER3 92
SERVER4 83
SERVER5 58
SERVER6 95
SERVER7 62
SERVER8 81
SERVER9 84
SERVER10 59
你可以这样做:
$result = foreach($key in $hash.Keys)
{
if($hash[$key] -lt 80)
{
[pscustomobject]@{
Server = $key
Space = $hash[$key]
}
}
}
看看 $result
你会得到这样的东西:
PS /> $result
Server Space
------ -----
SERVER5 58
SERVER7 62
SERVER10 59
如果值存储为 [string]
但保存的是实际整数 您需要稍微更改条件:
if([int]$hash[$key] -lt 80){ ... }
编辑备注:
实际上,我的问题在这里,PowerShell 足够聪明,知道如何比较持有数字的 string
和 integer
。不需要投[int]
.
并且,例如,如果散列包含 123 Gb
之类的值,即:
PS /> $hash
Name Value
---- -----
SERVER0 94 Gb
SERVER1 80 Gb
SERVER2 82 Gb
SERVER3 89 Gb
...
...
你可以这样做:
if([regex]::Match($hash[$key],'\d+').Value -lt 80){ ... }
这会产生:
PS /> $result
Server Space
------ -----
SERVER5 52 Gb
SERVER6 53 Gb
SERVER8 69 Gb
SERVER9 72 Gb
SERVER10 65 Gb
我有一个服务器名称作为键,它的可用 space 作为它的值,如:
$hash= @{}
#in the loop I get the server name and then I get the space as an integer and add it to the table like:
$hash.add($server,$space)
循环完成后,我想遍历列表并将 space 小于 80 的服务器添加到不同的 table 使用
$badServers = foreach($entry in $serverSpace){
if($entry.Keys -le 80){
$badServers.add($entry)
}}
但我的输出最终将每台服务器放入 $badServers。就好像这些值实际上没有列出。不知道我做错了什么。
假设您的哈希表的值是 [int]
类型,例如:
PS /> $hash
Name Value
---- -----
SERVER0 93
SERVER1 87
SERVER2 84
SERVER3 92
SERVER4 83
SERVER5 58
SERVER6 95
SERVER7 62
SERVER8 81
SERVER9 84
SERVER10 59
你可以这样做:
$result = foreach($key in $hash.Keys)
{
if($hash[$key] -lt 80)
{
[pscustomobject]@{
Server = $key
Space = $hash[$key]
}
}
}
看看 $result
你会得到这样的东西:
PS /> $result
Server Space
------ -----
SERVER5 58
SERVER7 62
SERVER10 59
如果值存储为 [string]
但保存的是实际整数 您需要稍微更改条件:
if([int]$hash[$key] -lt 80){ ... }
编辑备注:
实际上,我的问题在这里,PowerShell 足够聪明,知道如何比较持有数字的 string
和 integer
。不需要投[int]
.
并且,例如,如果散列包含 123 Gb
之类的值,即:
PS /> $hash
Name Value
---- -----
SERVER0 94 Gb
SERVER1 80 Gb
SERVER2 82 Gb
SERVER3 89 Gb
...
...
你可以这样做:
if([regex]::Match($hash[$key],'\d+').Value -lt 80){ ... }
这会产生:
PS /> $result
Server Space
------ -----
SERVER5 52 Gb
SERVER6 53 Gb
SERVER8 69 Gb
SERVER9 72 Gb
SERVER10 65 Gb