powershell - 遍历哈希表,找到小于数字的值,并将其添加到新的哈希表中
问题描述
我有一个服务器名称作为键,它的可用空间作为它的值,例如:
$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)
循环完成后,我想遍历列表并将空间小于 80 的服务器添加到另一个表中
$badServers = foreach($entry in $serverSpace){
if($entry.Keys -le 80){
$badServers.add($entry)
}}
但我的输出最终将每台服务器放入 $badServers。就好像这些值实际上不是列出的。不知道我做错了什么。
解决方案
假设您的哈希表的值是 type [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
推荐阅读
- asp.net-core - Azure AD extract role claim from acesses token and pass it on to the controller
- java - 在 Selenium 中使用 OR 运算符显式等待两个元素
- ajax - 将数据加载到表单:使用 Ajax 在 Laravel 中选择
- ruby - 计算 Ruby 中多个值的总和
- php - 在php中通过用户输入值创建数据库表
- mysql - 如何使用 MySQL 拆分每个有空格的数据或字符串?
- java - 如何从 Map 中获取对象值?
- react-native - 如何从 react-native-element 获取输入值
- go - Terraform Custom Provider:如果远程 URL 不可用,如何避免 TF 状态文件更新?
- python - Python 类型提示以匹配不同的类,具有共同的行为