【发布时间】:2021-08-09 10:45:47
【问题描述】:
这里的最终目标是获取基于最新版本 Nessus Agent 的 x64.msi 下载链接。我需要一种方法来获取具有“Nessus Agent”字符串匹配的第一个键,然后迭代下面的所有对象,直到找到 file 参数中的值的匹配项。
请注意,““Nessus Agents - 8.2.4”是动态的,因为版本号会随时间变化,因此此 key 值不能硬编码。
我是 Powershell 的新手,找不到任何有关如何执行此操作的示例,任何帮助都会很棒! :)
以下 JSON 对象示例:
{
"releases":{
"latest":{
"Plugins Archive":[
{
"file":"Agent_plugins_expires_2021-05-23.tgz",
"version":"null",
"size":585141662,
"release_date":"05/19/2021",
"product_release_date":"05/19/2021",
"md5":"d001d04decd3ddc0689590c24cd70b4f",
"sha256":"a642b52c428b9ffd7214a76de65a895b2b1b863a9156223e7a80561c1538e766",
"file_url":"https://www.tenable.com/downloads/api/v2/pages/nessus-agents/files/Agent_plugins_expires_latest.tgz"
}
],
"Nessus Agents - 8.2.4":[
{
"file":"NessusAgent-8.2.4-amzn.x86_64.rpm",
"version":"8.2.4",
"size":17067122,
"release_date":"03/31/2021",
"product_release_date":"04/08/2021",
"md5":"00f3d1be5355f256621f9b1241cf0c05",
"sha256":"5c6c3478e35296331e971278eabeaf693c3691f1ebf734adcae3cfbf6c6c23fa",
"file_url":"https://www.tenable.com/downloads/api/v2/pages/nessus-agents/files/NessusAgent-latest-amzn.x86_64.rpm"
},
{
"file":"NessusAgent-8.2.4-debian6_amd64.deb",
"version":"8.2.4",
"size":16824112,
"release_date":"03/31/2021",
"product_release_date":"04/08/2021",
"md5":"c888f6e4ab60b4a2bd85f0b291d44171",
"sha256":"c3655308cb3adbd1319a6eb77210c4eb2c031f5d2288d9affbc103ea0939f220",
"file_url":"https://www.tenable.com/downloads/api/v2/pages/nessus-agents/files/NessusAgent-latest-debian6_amd64.deb"
},
{
"file":"NessusAgent-8.2.4-es5.x86_64.rpm",
"version":"8.2.4",
"size":19471101,
"release_date":"03/31/2021",
"product_release_date":"04/08/2021",
"md5":"c72ca4c47b44067204e394c6d131bb7b",
"sha256":"06f70cf0fbd5d0622367042550d24c48545f61ea7f0856532ae2efa70475a06f",
"file_url":"https://www.tenable.com/downloads/api/v2/pages/nessus-agents/files/NessusAgent-latest-es5.x86_64.rpm"
},
{
"file":"NessusAgent-8.2.4-es6.x86_64.rpm",
"version":"8.2.4",
"size":19407452,
"release_date":"03/31/2021",
"product_release_date":"04/08/2021",
"md5":"3b87ee638758201570adf66cbc369b67",
"sha256":"56e7c130c38d915332093a287cdab39d402777b69f39afd7e1f476423b477af1",
"file_url":"https://www.tenable.com/downloads/api/v2/pages/nessus-agents/files/NessusAgent-latest-es6.x86_64.rpm"
},
{
"file":"nessus-agent-updates-8.2.4.tar.gz",
"version":"8.2.4",
"size":590396412,
"release_date":"03/31/2021",
"product_release_date":"04/08/2021",
"md5":"4348bcf458acfb826c447ff8b5176057",
"sha256":"0130b16ad01d9e189faaf8f51a9ebf824da69977d39b58e50460a24d2dc480a6",
"file_url":"https://www.tenable.com/downloads/api/v2/pages/nessus-agents/files/nessus-agent-updates-latest.tar.gz"
}
我的代码以:
开头$output = "C:\nessus_releases.json";
$jout = Get-Content -Path $output -raw | ConvertFrom-Json;
作为测试,如果我运行以下命令,它会返回“Nessus-Agents - 8.2.4”键下的第二个对象:
Write-Output($jout.releases.latest.'Nessus Agents - 8.2.4'.Item(1));
但是,尝试以下方法来获取 key 值,不会返回任何内容:
$jout.releases.latest | ForEach-Object {
Write-Output($_.key);
};
又试了下,没有返回任何东西:
$version = $jout.releases.latest | Where-Object {$_ -match "Nessus Agents"}
Write-Output($version)
更新:
我认为我有一种方法似乎可以获取密钥名称:
$properties = $jout.releases.latest |
Get-Member -MemberType Properties |
Select-Object -ExpandProperty Name
$version = $properties | Where-Object {$_ -match "Nessus Agents"}
Write-Output($version)
这会返回:
Nessus Agents - 8.2.4
【问题讨论】:
-
你已经研究和尝试了什么?
-
@Ash 我尝试过以下
$jout.releases.latest | ForEach-Object { Write-Output($_.key); }也尝试过:$keys = $jout.releases.keys foreach ($key in $keys) { Write-Output($json[$key]) }但它们什么也没返回。作为测试,只需执行以下操作:Write-Output($jout.releases.latest.'Nessus Agents - 8.2.4'.Item(1))确实返回第二个代理对象。所以数据是可读的。我只是不知道如何获取以“Nessus Agents*”开头的第一个键名 -
对不起,我应该声明上述是在加载 json 文件后尝试的:
$jout = Get-Content -Path $output | ConvertFrom-Json -
请编辑您的问题并将您尝试过的内容放入其中。在问题中更容易阅读。这可以帮助人们添加您迄今为止所做的工作,或建议一种新方法。它还使可能与您遇到相同问题的人更容易理解。
-
对不起@Ash。我已经用我尝试过的代码更新了问题。
标签: json powershell