powershell - 如何将冒号分隔的字符串存储在哈希表中?
问题描述
我有一个脚本可以从另一个脚本作为 JSON 获得响应,
$resp = & ".\script1.ps1" | ConvertFrom-Json
$resp[1]
我得到以下输出:
abc : 1234
defghjk: 897
klm : something12
现在我想将它们作为键/值存储在哈希表中
$hash = @{}
$($resp[1]) | ForEach-Object {
# Split each pair into key and value
$key,$value = $_.Split(':')
# Populate $hash
$hash[$key] = $value
}
return $hash
我收到以下错误:
方法调用失败,因为 [System.Management.Automation.PSCustomObject] 不包含名为“Split”的方法
和
索引操作失败;数组索引评估为 null。在 $hash[$key] = $value
更新:有了这个我可以输出键、值和名称
$resp[1].PSObject.Properties | Foreach { $hash[$_.Key] = $_.Value }
return $hash
我回来了:
Key : abc
Value : 1234
Name: abc
Key : defghjk
Value : 897
Name: defghjk
等等...
假设我有一个如下的 SQL 表
我有以下查询来获取 ID:
$DB_ID = Query "select ID from table where DB = 'cube1'" | Select -ExpandProperty ID;
如何根据$DB_ID
与键/名称的匹配获取值并将值存储在变量中$password
?
换句话说,我正在寻找这样的东西:
$password = $hash.value where $hash.key -match `$DB_ID`
那么这种情况下的密码(cube1)将是:1234,因为密钥 abc 将匹配表中的 abc
UPDATE2:现在我想起来了,我可能甚至不需要对响应进行哈希处理。也许我可以做这样的事情,对吧?:
$password = $resp[1].PSObject.Properties.value where $resp[1].PSObject.Properties.key -match $DB_ID
解决方案
APSCustomObject
基本上已经是键和值,它是一个适当的对象 - 它只:
是以一种友好的方式输出,以向您显示信息。左边:
是键,右边是值。但是,如果您希望它成为正确的哈希表,则必须像这样遍历属性:
$myHash = @{}
$resp[1].PSObject.Properties | Foreach { $myHash[$_.Name] = $_.Value }
它的工作方式是PSCustomObject
具有一个PSObject
属性,您可以从中获取属性。遍历 上的每个属性PSCustomObject
,并将属性名称设置为 中的键$myHash
,并将相同属性的值设置为 中该键的值$myHash
。
更新响应
您将访问如下内容:$myHash['cube1']
和$myHash['cube2']
.
如果您已经$DB_ID
提前知道目标,并且从该脚本返回的所需对象已经将数据库组织到一个 ID,您可以这样做$myHash[$DB_ID]
:
实际上,您甚至不需要将其转换为哈希表即可。您可以简单地使用PSCustomObject
从 JSON 转换而来的原始文件,如下所示:
$resp[1].$DB_ID
或者$resp[1]."$DB_ID"
推荐阅读
- javascript - 寻找所有 Javascript(BOM、DOM、内置)对象的官方文档
- python - Keras/Tensorflow-gpu 模糊错误
- python - tensorflow:输入管道的默认值
- python - 如何编写包含持久 C++ 对象的 TensorFlow 自定义操作?
- java - 如何将 appium 连接到 android 上现有正在运行的应用程序
- python - 使用 Python 从 REST API 获取大型分页数据
- oracle - ORA-06550 带有 alter 语句
- excel - ActiveX 命令按钮,如果输入值,则在单元格旁边取消隐藏,如果单元格为空,则隐藏
- jms - IBM MQ - 如何使用多个连接名称连接到队列管理器(一个是故障转移)
- haskell - 在 Haskell 中更改映射中多个键的值