[英]How can I use jq to get the key value pairs only and set as environment variable?
下面是 vault 命令生成的 vault output
保險庫 kv 獲取 kv/環境 | jq
{
"request_id": "8498e5e4-050a-51e9-deaf-64a06a0",
"lease_id": "",
"lease_duration": 0,
"renewable": false,
"data": {
"data": {
"test": "test123",
"test1": "test1234"
},
"metadata": {
"created_time": "2022-11-17T12:2214.93229792Z",
"custom_metadata": null,
"deletion_time": "",
"destroyed": false,
"version": 1
}
},
"warnings": null
}
我無法找到一種方法來僅獲取 test 和 test1 並將其設置為 powershell 中的環境變量。問題是我只想提取 test 和 test1,但它位於 data/data 下,就像子列表一樣,無法找到提取方法。 請幫助
我已經提供了如下刪除路徑但不確定它是否有效循環
vault kv get kv/Env | jq 'del(.data.metadata, .request_id, .lease_id, .lease_duration, .renewable, .warnings)'
我想得到 output 類似下面的東西,我可以循環並設置為變量。
test=test123
test1=test1234
提供knittl 有用的jq
answer的全 PowerShell 替代方案,它還解決了設置環境變量的問題:
(vault kv get kv/Env | ConvertFrom-Json).data.data.psobject.Properties |
% { Set-Item Env:$($_.Name) $_.Value }
ConvertFrom-Json
將輸入 JSON 解析為一個 object 圖(基於類型[pscustomobject]
),以便可以使用常規的 OO 點表示法深入查看該圖,例如本例中的.data.data
。
然后使用內在psobject
屬性的.Properties
集合來反映 .data.data 中包含的.data.data
的屬性
%
( ForEach-Object
cmdlet 的內置別名)然后處理每個屬性並使用Set-Item
和Env:
驅動器(代表所有進程內環境變量)為每個屬性的名稱和值設置環境變量。
您可以使用 .data.data 訪問嵌套的.data.data
。 您可以使用to_entries
將 object 轉換為鍵值對列表。 那么就只剩下加入的問題了:
vault ... | jq -r '.data.data | to_entries[] | join("=")'
Output:
test=test123
test1=test1234
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.