Public/Intune/Get-AppWorkloadPolicies.ps1
function Get-AppWorkloadPolicies { [CmdletBinding()] param ( [string] [string]$Path = "$(Get-Location)\AppWorkload*.log", [switch]$RequirementScript ) Write-Host -ForegroundColor DarkGray "[$((Get-Date).ToString('HH:mm:ss'))] Searching for [AppWorkload*.log]" foreach ($File in $(Resolve-Path $Path)) { Write-Host -ForegroundColor DarkGray "[$((Get-Date).ToString('HH:mm:ss'))] Found [$File]" } # Policy Pattern $Pattern_Start = '^\<\!\[LOG\[Get policies = \[\{' $Pattern_Start_Replace = '^\<\!\[LOG\[Get policies =' $Pattern_End = '\]LOG\]!>.*' # Search Log File(s) for the Start Pattern $Match = $null $Match = Select-String -Path "$($Path)" -Pattern $Pattern_Start #$Match = Select-String -Path $Path -Pattern '^\<\!\[LOG\[Get policies = \[\{' # Check if the Start Pattern was found if ($Match) { # Parse the Line for the Policy JSON by removing the Start and End Pattern $json = $null $json = $Match.Line -replace '^\<\!\[LOG\[Get policies =', '' -replace '\]LOG\]!>.*', '' # Convert the String from JSON $Policy = $null $Policy = $json | ConvertFrom-Json $Policy | ForEach-Object { # Detection Rules $DetectionRule = "$($_.DetectionRule)" | ConvertFrom-Json if (!($DetectionRule)) { $DetectionRule = $null } else { $DetectionRuleScript = $DetectionRule.DetectionText | ConvertFrom-Json | Select-Object -ExpandProperty ScriptBody -ErrorAction SilentlyContinue if (($null -ne $DetectionRuleScript) -and ($DetectionRuleScript -ne '')) { $DetectionRuleScript = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($DetectionRuleScript)) } } # Requirement Rules if ($RequirementScript) { $RequirementRulesExtended = "$($_.ExtendedRequirementRules)" | ConvertFrom-Json if (!($RequirementRulesExtended)) { $RequirementRulesExtended = $null } else { $RequirementRulesScript = "$($RequirementRulesExtended.RequirementText)" | ConvertFrom-Json | Select-Object -ExpandProperty ScriptBody -ErrorAction SilentlyContinue if (($null -ne $RequirementRulesScript) -and ($RequirementRulesScript -ne '')) { $RequirementRulesScript = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($RequirementRulesScript)) } } } # InstallEx $InstallEx = "$($_.InstallEx)" | ConvertFrom-Json # Delivery Optimization $DeliveryOptimization = "$($_.DeliveryOptimization)" | ConvertFrom-Json [PSCustomObject]@{ Id = $_.Id Intent = switch ($_.Intent) { 0 { 'Not Targeted' } 1 { 'Available' } 3 { 'Required' } 4 { 'Uninstall' } Default { $_.Intent } } Context = switch ($InstallEx.RunAs) { 0 { 'USER' } 1 { 'SYSTEM' } Default { $InstallEx.RunAs } } DO = switch ($_.DOPriority) { 0 { 'Background' } 1 { 'Foreground' } Default { $_.DOPriority } } Notifications = switch ($_.NotificationPriority) { 0 { 'All' } 1 { '1' } 2 { '2' } 3 { '3' } Default { $_.NotificationPriority } } Name = $_.Name StartTime = if ($_.StartDeadlineEx.StartTime -eq '1/1/0001 12:00:00 AM') { 'ASAP' } else { $_.StartDeadlineEx.StartTime } Deadline = if ($_.StartDeadlineEx.Deadline -eq '1/1/0001 12:00:00 AM') { 'ASAP' } else { $_.StartDeadlineEx.Deadline } InstallCommandLine = $_.InstallCommandLine InstallerData = $_.InstallerData #FlatDependencies = $_.FlatDependencies FlatDependencies = switch ($_.FlatDependencies) { ({ $_.Action -eq 110 }) { "Supersedence - Uninstall - $($_.ChildId)" } ({ $_.Action -eq 10 }) { "Supersedence - $($_.ChildId)" } Default { $_.Action } } RequirementRules = $RequirementRulesExtended | Select-Object -ExpandProperty Type RequirementScript = $RequirementRulesScript DetectionType = $DetectionRule | Select-Object -ExpandProperty DetectionType DetectionScript = $DetectionRuleScript } $scriptBody = $null $RequirementRulesScript = $null } | Out-GridView -Title "AppWorkload Policies" -OutputMode Single $Policy.Count } else { Write-Host "No Match Found" } } |