使用Powershell比较对象在.JSON文件中发现差异,方括号值存在问题



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

# Compare two files 
$BLF = (Get-Content -Path C:Users...DocumentsAndroid1.json)
$CLF =  (Get-Content -Path C:Users...DocumentsAndroid2.json)
$aUnsorted = Compare-Object -ReferenceObject $BLF -DifferenceObject $CLF -IncludeEqual 

我已经编写了比较规则变量的代码,例如下面的";passcodeBlockSimple";,并将该值注册在一个文件与另一个文件中。我想对括号内定义的值做同样的处理:

"variableName": [ 
"99"
]

当两个文件具有相同的值时,我有一个解决方案,通过添加到值上,直到它找到尾括号]。这给出了";variableName":["99"]。参见变量";roleScopeTagIds";下面作为这样一个变量的例子。

我想在它们不同的时候找到值,但Compare Object的输出逐行列出了差异。下面的例子中,我丢失了关于变量"0"的信息;restrictedApps";当它在两个文件中不同时(文件1具有值"1"并且文件2具有值"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"
],

所以我的问题是:当变量的值不同,并且Compare Object的结果如上所述时,我如何找到它们的值?

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

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

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:UsersAlexDesktop1.json
[Array]$FileIst = Get-Content C:UsersAlexDesktop2.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"     <=

最新更新