From ca45404af18c7436a9ffaa886086560b9d8fb259 Mon Sep 17 00:00:00 2001 From: Zachary Gorman Date: Fri, 26 Jul 2024 16:04:17 -0700 Subject: [PATCH] Better appDiff output --- Data/AppsToIgnore.json | 38 +++++++++++++++++++++++++++++ Data/ExpectedApps.json | Bin 10550 -> 4266 bytes Data/ExpectedApps.json.bak | Bin 12860 -> 0 bytes Data/ExpectedApps.txt | Bin 9214 -> 0 bytes Private/AppDiff.ps1 | 48 +++++++++++++++++++++++++++---------- 5 files changed, 74 insertions(+), 12 deletions(-) create mode 100644 Data/AppsToIgnore.json delete mode 100644 Data/ExpectedApps.json.bak delete mode 100644 Data/ExpectedApps.txt diff --git a/Data/AppsToIgnore.json b/Data/AppsToIgnore.json new file mode 100644 index 0000000..c514c32 --- /dev/null +++ b/Data/AppsToIgnore.json @@ -0,0 +1,38 @@ +[ + { + "DisplayName": "Hyland Web ActiveX Controls" + }, + { + "DisplayName": "Intel(R) Processor Graphics" + }, + { + "DisplayName": "Microsoft Visual Studio Setup WMI Provider (default)" + }, + { + "DisplayName": "NetSupport Manager" + }, + { + "DisplayName": "Office 16 Click-to-Run Localization Component" + }, + { + "DisplayName": "Realtek Audio COM Components (driver)" + }, + { + "DisplayName": "Realtek High Definition Audio Driver" + }, + { + "DisplayName": "Vulkan Run Time Libraries (default)" + }, + { + "DisplayName": "Microsoft Teams Meeting Add-in for Microsoft Office" + }, + { + "DisplayName": "Documentation Manager" + }, + { + "DisplayName": "64 Bit HP CIO Components Installer" + }, + { + "DisplayName": "Teams Machine-Wide Installer" + } +] \ No newline at end of file diff --git a/Data/ExpectedApps.json b/Data/ExpectedApps.json index 3a7e4f9d47a7925c0d4cd382e56e3698ca9a0c7b..801c84e50948b257233cf58141ca4f1906b8c159 100644 GIT binary patch delta 290 zcmdlMv`TS8(PSrz$pu*rF179eq57ogcW zK&ZeFz>v?7$&d%MEf|P18Il>Yfub%9ML>2LP*oAo4UR0KlXb)ufbIyJd_~*x3F2o=W|GPR(`?cpbs3WnNb^mukqbj%Gb!8xy1i-g1Vs(7>+F;u^cy9Y$w|sJ SV6g@@fyrw$9458brEX!{ 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 I&0c~2Kg$xeDF6Tf diff --git a/Private/AppDiff.ps1 b/Private/AppDiff.ps1 index b0e2704..f9861d4 100644 --- a/Private/AppDiff.ps1 +++ b/Private/AppDiff.ps1 @@ -2,6 +2,13 @@ param ( $examplePC ) +$GetPCNotInstalledApps = @( + "Citrix", + "Microsoft Visual C\+\+", + "RightFax", + "Windows Driver Package" +) + function Get-AppDiff { param( [Parameter(Mandatory)] @@ -17,20 +24,23 @@ function Get-AppDiff { # Open example file $lookupTablePath = Join-Path (get-item $PSScriptRoot).Parent.FullName 'Data\ExpectedApps.json' $example = get-content $lookupTablePath | ConvertFrom-Json + # Open file with manually added apps to ignore + $lookupTablePath = Join-Path (get-item $PSScriptRoot).Parent.FullName 'Data\AppsToIgnore.json' + $ignore = get-content $lookupTablePath | ConvertFrom-Json + $exclude = $example + $ignore $output = @() # Finds each app that isn't in the example foreach ( $app in $apps ) { - if ( - # Apps that shouldn't be considered an "installed app" - (-not ($app.DisplayName -match "Citrix")) -and - (-not ($app.DisplayName -match "Microsoft Visual C\+\+")) -and - (-not ($app.DisplayName -match "RightFax")) -and - # This check is last for performance - (-not ( $example.DisplayName -contains $app.DisplayName ) ) - ) - { - $output += $app + $skip = $false + foreach ($notapp in $GetPCNotInstalledApps) { + if ($app.DisplayName -match $notapp) { + $skip = $true + break + } } + if ($skip -or $exclude.DisplayName -contains $app.DisplayName) { continue } + + $output += $app } if($TableView){ @@ -73,9 +83,23 @@ function Copy-FileNoDestruct ($srcpath, $dstpath) { function Get-ExampleApps { param( $examplePC ) $appsPath = (Join-Path (get-item $PSScriptRoot).Parent.FullName 'Private\Apps.ps1') + $sccmPath = (Join-Path (get-item $PSScriptRoot).Parent.FullName 'Private\SCCMQuery.ps1') Import-Module -Force $appsPath - $apps = Get-Apps $examplePC - $apps = Remove-Version $apps + Import-Module -Force $sccmPath + $apps = Get-Apps $examplePC | Select-Object -Property "DisplayName" + $trimmedApps = @() + foreach ($app in $apps) { + $skip = $false + foreach ($notapp in $GetPCNotInstalledApps) { + if (!$app.DisplayName -or $app.DisplayName -match $notapp) { + $skip = $true + break + } + } + if ($skip) { continue } + $trimmedApps += $app + } + $apps = Remove-Version $trimmedApps # Open example file $lookupTablePath = Join-Path (get-item $PSScriptRoot).Parent.FullName 'Data\ExpectedApps.json' Copy-FileNoDestruct $lookupTablePath $($lookupTablePath + ".bak")