0

我正在尝试使用比较两个 .json 文件

# Compare two files 
$BLF = (Get-Content -Path C:\Users\...\Documents\Android1.json)
$CLF =  (Get-Content -Path C:\Users\...\Documents\Android2.json)

$aUnsorted = Compare-Object -ReferenceObject $BLF -DifferenceObject $CLF -IncludeEqual 

我编写了代码来比较常规变量,例如下面的“passcodeBlockSimple”,并将值注册在一个文件与另一个文件中。我想对括号内定义的值做同样的事情:

"variableName": [ 
                     "99"
                ]

当两个文件具有相同的值时,我有一个解决方案,方法是添加该值直到找到结束括号]。这给出了“variableName”:[“99”]。请参阅下面的变量“roleScopeTagIds”作为此类变量的示例。

我想在它们不同时找到值,但是 Compare-Object 的输出逐行列出了差异。下面的示例,当两个文件中的变量“restrictedApps”不同时,我丢失了有关变量“restrictedApps”的信息(File1 的值为“1”,File2 的值为“2”)。

InputObject                                               SideIndicator
-----------                                               -------------
"@odata.type":  "#microsoft.graph.iosCompliancePolicy",   ==           
    "roleScopeTagIds":  [                                 ==           
                            "0"                           ==           
                        ],                                ==           
    "version":  1,                                        ==           
    "passcodeMinutesOfInactivityBeforeScreenTimeout":  1, ==           
    "managedEmailProfileRequired":  false,                ==           
    "restrictedApps":  [                                  ==           
                       ],                                 ==           
        "passcodeBlockSimple":  false,                    =>           
                        "2"                               =>           
"passcodeBlockSimple":  true,                             <=           
                        "1"                               <= 

这些文件是,文件 1:

"@odata.type":  "#microsoft.graph.iosCompliancePolicy",
    "roleScopeTagIds":  [
                            "0"
                        ],
    "version":  1,
    "passcodeBlockSimple":  true,
    "passcodeMinutesOfInactivityBeforeScreenTimeout":  1,
    "managedEmailProfileRequired":  false,
    "restrictedApps":  [
                            "1"
                       ],

和文件 2:

"@odata.type":  "#microsoft.graph.iosCompliancePolicy",
    "roleScopeTagIds":  [
                            "0"
                        ],
    "version":  1,
    "passcodeBlockSimple":  false,
    "passcodeMinutesOfInactivityBeforeScreenTimeout":  1,
    "managedEmailProfileRequired":  false,
    "restrictedApps":  [
                            "2"
                       ],

所以我的问题是:当变量不同时,如何找到变量的值,并且比较对象结果如上?

(我必须使用比较对象功能)

4

1 回答 1

0

我不完全明白,因为你的 jsons 无效,但这段代码应该可以解决你的问题:

json1:

{
"@odata.type":  "#microsoft.graph.iosCompliancePolicy",
    "roleScopeTagIds":  [
                            "0"
                        ],
    "version":  1,
    "passcodeBlockSimple":  true,
    "passcodeMinutesOfInactivityBeforeScreenTimeout":  1,
    "managedEmailProfileRequired":  false,
    "restrictedApps":  [
                            "1"
                       ]
}

json2:

{
"@odata.type":  "#microsoft.graph.iosCompliancePolicy",
    "roleScopeTagIds":  [
                            "0"
                        ],
    "version":  1,
    "passcodeBlockSimple":  false,
    "passcodeMinutesOfInactivityBeforeScreenTimeout":  1,
    "managedEmailProfileRequired":  false,
    "restrictedApps":  [
                            "2"
                       ]
}
[Array]$FileSoll = Get-Content C:\Users\Alex\Desktop\1.json
[Array]$FileIst = Get-Content C:\Users\Alex\Desktop\2.json

    $FileSoll = $($FileSoll | ConvertFrom-Json | ConvertTo-Json) -split ([Environment]::NewLine)
    $FileIst = $($FileIst | ConvertFrom-Json | ConvertTo-Json) -split ([Environment]::NewLine)
    $diff = Compare-Object -ReferenceObject $FileSoll -DifferenceObject $FileIst

返回差异:

InputObject                        SideIndicator
-----------                        -------------
    "passcodeBlockSimple":  false, =>
                           "2"     =>
    "passcodeBlockSimple":  true,  <=
                           "1"     <=
于 2020-07-06T14:27:22.693 回答