From 1ea58aeb87ba07326dd9d83fbf943b400ef92aac Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Fri, 28 Jul 2023 09:17:57 -0400 Subject: [PATCH 1/2] Update M365DSCReport.psm1 --- Modules/Microsoft365DSC/Modules/M365DSCReport.psm1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Modules/Microsoft365DSC/Modules/M365DSCReport.psm1 b/Modules/Microsoft365DSC/Modules/M365DSCReport.psm1 index 47ad83bce2..f88a50482d 100644 --- a/Modules/Microsoft365DSC/Modules/M365DSCReport.psm1 +++ b/Modules/Microsoft365DSC/Modules/M365DSCReport.psm1 @@ -737,7 +737,7 @@ function Compare-M365DSCConfigurations $foundResourceMatch = $true foreach ($property in $instance.Keys) { - if ($null -ne (Compare-Object -ReferenceObject ($instance."$property")` + if ($null -eq $destinationResourceInstance."$property" -or $null -ne (Compare-Object -ReferenceObject ($instance."$property")` -DifferenceObject ($destinationResourceInstance."$property"))) { $drift = @{ @@ -885,7 +885,7 @@ function Compare-M365DSCConfigurations { foreach ($property in $instance.Keys) { - if ($null -ne (Compare-Object -ReferenceObject ($instance."$property")` + if ($null -eq $sourceRsourceInstance."$property" -or $null -ne (Compare-Object -ReferenceObject ($instance."$property")` -DifferenceObject ($sourceResourceInstance."$property"))) { # Make sure we haven't already added this drift in the delta return object to prevent duplicates. From 8e96b46a477f135e99c1809f365f43f6f42ec554 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Fri, 28 Jul 2023 09:30:13 -0400 Subject: [PATCH 2/2] FIXES #3478 --- CHANGELOG.md | 2 ++ .../Modules/M365DSCReport.psm1 | 28 +++++++++++-------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e9e656d0ed..69e12306ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ * MISC * M365DscReverse: Fix exporting when $Filter var exists locally FIXES [#3515](https://github.com/microsoft/Microsoft365DSC/issues/3515) + * Fix for the delta report function to handle deep nested CIM Instances. + FIXES [#3478](https://github.com/microsoft/Microsoft365DSC/issues/3478) * DEPENDENCIES * Updated Microsoft.Graph.* dependencies to version 2.2.0. * Updated dependency Microsoft.PowerApps.Administration.PowerShell to version 2.0.170. diff --git a/Modules/Microsoft365DSC/Modules/M365DSCReport.psm1 b/Modules/Microsoft365DSC/Modules/M365DSCReport.psm1 index f88a50482d..8866b59c32 100644 --- a/Modules/Microsoft365DSC/Modules/M365DSCReport.psm1 +++ b/Modules/Microsoft365DSC/Modules/M365DSCReport.psm1 @@ -15,29 +15,29 @@ Function New-M365DSCConfigurationToMarkdown [Parameter()] [Array] $ParsedContent, - + [Parameter()] [System.String] $OutputPath, - + [Parameter()] [System.String] $TemplateName, - + [Parameter()] [Switch] $SortProperties ) - + $crlf = "`r`n" if ([System.String]::IsNullOrEmpty($TemplateName)) { $TemplateName = 'Configuration Report' } - + Write-Output 'Generating Markdown report' $fullMD = "# " + $TemplateName + $crlf - + $totalCount = $parsedContent.Count $currentCount = 0 foreach ($resource in $parsedContent) @@ -45,7 +45,7 @@ Function New-M365DSCConfigurationToMarkdown # Create a new table for each resource $percentage = [math]::Round(($currentCount / $totalCount) * 100, 2) Write-Progress -Activity 'Processing generated DSC Object' -Status ("{0:N2} completed - $($resource.ResourceName)" -f $percentage) -PercentComplete $percentage - + $fullMD += "## " + $resource.ResourceInstanceName + $crlf $fullMD += "|Item|Value|`r`n" $fullMD += "|:---|:---|`r`n" @@ -57,7 +57,7 @@ Function New-M365DSCConfigurationToMarkdown { $properties = $resource.Keys } - + foreach ($property in $properties) { if ($property -ne 'ResourceName' ` @@ -115,19 +115,19 @@ Function New-M365DSCConfigurationToMarkdown $partMD += $value + $crlf } } - + $fullMD += $partMD + $crlf $partMD = "" - + $currentCount++ } - + if (-not [System.String]::IsNullOrEmpty($OutputPath)) { Write-Output 'Saving Markdown report' $fullMD | Out-File $OutputPath } - + Write-Output 'Completed generating Markdown report' } @@ -1104,6 +1104,10 @@ function Get-M365DSCCIMInstanceKey { $primaryKey = 'Usage' } + elseif ($CIMInstance.ContainsKey("odataType")) + { + $primaryKey = 'odataType' + } return $primaryKey }