首页 > 解决方案 > 如何为下面的代码编写一个循环以显示直到 n 出现在 .json 文件中的值,而不是尝试检索每个值的结果

问题描述

如何为以下代码编写一个循环以一次检索文件中存在的所有值,而不是使用它来检索文件中每个 {0} {1}.. 的值。

$data = Get-Content -Path 'C:\Users\Username\Downloads\ScheduledJobs1.json' | ConvertFrom-Json

$Status1 = $("{0:N1}" -f $data.value.CompletedJobs.State.Name)
$Asset1 = $("{0:N1}" -f $data.value.Application.Asset.Name)
$Application1 = $("{0:N1}" -f $data.value.Application.Name)

$Status2 = $("{1:N1}" -f $data.value.CompletedJobs.State.Name)
$Asset2 = $("{1:N1}" -f $data.value.Application.Asset.Name)
$Application2 = $("{1:N1}" -f $data.value.Application.Name)

$Status3 = $("{2:N1}" -f $data.value.CompletedJobs.State.Name)
$Asset3 = $("{2:N1}" -f $data.value.Application.Asset.Name)
$Application3 = $("{2:N1}" -f $data.value.Application.Name)

$Status4 = $("{3:N1}" -f $data.value.CompletedJobs.State.Name)
$Asset4 = $("{3:N1}" -f $data.value.Application.Asset.Name)
$Application4 = $("{3:N1}" -f $data.value.Application.Name)

$Status5 = $("{4:N1}" -f $data.value.CompletedJobs.State.Name)
$Asset5 = $("{4:N1}" -f $data.value.Application.Asset.Name)
$Application5 = $("{4:N1}" -f $data.value.Application.Name)

标签: powershellpowershell-3.0

解决方案


当 you 时ConvertFrom-Json,您将获得$data一个结构化的 powershell 对象。我看到您正在尝试根据您的要求优化该对象的值。理想情况下,您希望另一个对象中的精炼值在其他地方使用。

    $data = Get-Content -Path 'C:\Users\Username\Downloads\ScheduledJobs1.json' | ConvertFrom-Json

    $Result = for ($i = 0; $i -lt $maxCount; $i++)
    {
        $Obj = [PScustomObject]@{
            Status = $("{$i`:N1}" -f $data.value.CompletedJobs.State.Name)
            Asset = $("{$i`:N1}" -f $data.value.Application.Asset.Name)
            Application = $("{$i`:N1}" -f $data.value.Application.Name)
        }
        $Obj
    }

    $Result | ft

$maxcount您的情况 4 中,或者如果您的 Json 中有更多数据,它可能是$data.Count. 那是你的责任去弄清楚。

这将在每次迭代中创建一个$obj具有 3 个属性的对象并将其添加到$result.

所以$Result会有你最终的合并对象。这样做:$result | ft看看这是否是你想要的。


推荐阅读