@@ -36,150 +36,117 @@ function Invoke-CIPPStandardIntuneTemplate {
3636 https://docs.cipp.app/user-documentation/tenant/standards/list-standards
3737 #>
3838 param ($Tenant , $Settings )
39- $TestResult = Test-CIPPStandardLicense - StandardName ' IntuneTemplate_general' - TenantFilter $Tenant - RequiredCapabilities @ (' INTUNE_A' , ' MDM_Services' , ' EMS' , ' SCCM' , ' MICROSOFTINTUNEPLAN1' )
4039
41- if ($TestResult -eq $false ) {
42- # writing to each item that the license is not present.
43- foreach ($Template in $settings.TemplateList ) {
44- Set-CIPPStandardsCompareField - FieldName " standards.IntuneTemplate.$ ( $Template.value ) " - FieldValue ' This tenant does not have the required license for this standard.' - Tenant $Tenant
45- }
46- return $true
47- } # we're done.
4840 $Table = Get-CippTable - tablename ' templates'
4941 $Filter = " PartitionKey eq 'IntuneTemplate'"
50- $Request = @ {body = $null }
51- $CompareList = foreach ($Template in $Settings ) {
52- $Request.body = (Get-CIPPAzDataTableEntity @Table - Filter $Filter | Where-Object - Property RowKey -Like " $ ( $Template.TemplateList.value ) *" ).JSON | ConvertFrom-Json - ErrorAction SilentlyContinue
53- if ($null -eq $Request.body ) {
54- Write-LogMessage - API ' Standards' - tenant $tenant - message " Failed to find template $ ( $Template.TemplateList.value ) . Has this Intune Template been deleted?" - sev ' Error'
55- continue
56- }
5742
58- $displayname = $request.body.Displayname
59- $description = $request.body.Description
60- $RawJSON = $Request.body.RawJSON
43+ $Template = (Get-CIPPAzDataTableEntity @Table - Filter $Filter | Where-Object - Property RowKey -Like " $ ( $Settings.TemplateList.value ) *" ).JSON | ConvertFrom-Json - ErrorAction SilentlyContinue
44+ if ($null -eq $Template ) {
45+ Write-LogMessage - API ' Standards' - tenant $tenant - message " Failed to find template $ ( $Settings.TemplateList.value ) . Has this Intune Template been deleted?" - sev ' Error'
46+ return $true
47+ }
48+
49+ $displayname = $Template.Displayname
50+ $description = $Template.Description
51+ $RawJSON = $Template.RawJSON
52+ $TemplateType = $Template.Type
53+
54+ try {
55+ $ExistingPolicy = Get-CIPPIntunePolicy - tenantFilter $Tenant - DisplayName $displayname - TemplateType $TemplateType
56+ } catch {
57+ $ExistingPolicy = $null
58+ }
59+
60+ if ($ExistingPolicy ) {
6161 try {
62- $ExistingPolicy = Get-CIPPIntunePolicy - tenantFilter $Tenant - DisplayName $displayname - TemplateType $Request.body.Type
62+ $RawJSON = Get-CIPPTextReplacement - Text $RawJSON - TenantFilter $Tenant
63+ $JSONExistingPolicy = $ExistingPolicy.cippconfiguration | ConvertFrom-Json
64+ $JSONTemplate = $RawJSON | ConvertFrom-Json
65+ # This might be a slow one.
66+ $Compare = Compare-CIPPIntuneObject - ReferenceObject $JSONTemplate - DifferenceObject $JSONExistingPolicy - compareType $TemplateType - ErrorAction SilentlyContinue
6367 } catch {
6468 }
65- if ($ExistingPolicy ) {
66- try {
67- $RawJSON = Get-CIPPTextReplacement - Text $RawJSON - TenantFilter $Tenant
68- $JSONExistingPolicy = $ExistingPolicy.cippconfiguration | ConvertFrom-Json
69- $JSONTemplate = $RawJSON | ConvertFrom-Json
70- $Compare = Compare-CIPPIntuneObject - ReferenceObject $JSONTemplate - DifferenceObject $JSONExistingPolicy - compareType $Request.body.Type - ErrorAction SilentlyContinue
71- } catch {
72- }
73- } else {
74- $compare = [pscustomobject ]@ {
75- MatchFailed = $true
76- Difference = ' This policy does not exist in Intune.'
77- }
78- }
79- if ($Compare ) {
80- [PSCustomObject ]@ {
81- MatchFailed = $true
82- displayname = $displayname
83- description = $description
84- compare = $Compare
85- rawJSON = $RawJSON
86- body = $Request.body
87- assignTo = $Template.AssignTo
88- excludeGroup = $Template.excludeGroup
89- remediate = $Template.remediate
90- alert = $Template.alert
91- report = $Template.report
92- existingPolicyId = $ExistingPolicy.id
93- templateId = $Template.TemplateList.value
94- customGroup = $Template.customGroup
95- assignmentFilter = $Template.assignmentFilter
96- assignmentFilterType = $Template.assignmentFilterType
97- }
98- } else {
99- [PSCustomObject ]@ {
100- MatchFailed = $false
101- displayname = $displayname
102- description = $description
103- compare = $false
104- rawJSON = $RawJSON
105- body = $Request.body
106- assignTo = $Template.AssignTo
107- excludeGroup = $Template.excludeGroup
108- remediate = $Template.remediate
109- alert = $Template.alert
110- report = $Template.report
111- existingPolicyId = $ExistingPolicy.id
112- templateId = $Template.TemplateList.value
113- customGroup = $Template.customGroup
114- assignmentFilter = $Template.assignmentFilter
115- assignmentFilterType = $Template.assignmentFilterType
116- }
69+ } else {
70+ $compare = [pscustomobject ]@ {
71+ MatchFailed = $true
72+ Difference = ' This policy does not exist in Intune.'
11773 }
11874 }
75+ $CompareResult = [PSCustomObject ]@ {
76+ MatchFailed = [bool ]$Compare
77+ displayname = $displayname
78+ description = $description
79+ compare = $Compare
80+ rawJSON = $RawJSON
81+ templateType = $TemplateType
82+ assignTo = $Settings.AssignTo
83+ excludeGroup = $Settings.excludeGroup
84+ remediate = $Settings.remediate
85+ alert = $Settings.alert
86+ report = $Settings.report
87+ existingPolicyId = $ExistingPolicy.id
88+ templateId = $Settings.TemplateList.value
89+ customGroup = $Settings.customGroup
90+ assignmentFilter = $Settings.assignmentFilter
91+ assignmentFilterType = $Settings.assignmentFilterType
92+ }
11993
120- if ($true -in $Settings.remediate ) {
121- foreach ($TemplateFile in $CompareList | Where-Object - Property remediate -EQ $true ) {
122- try {
123- $TemplateFile.customGroup ? ($TemplateFile.AssignTo = $TemplateFile.customGroup ) : $null
124-
125- $PolicyParams = @ {
126- TemplateType = $TemplateFile.body.Type
127- Description = $TemplateFile.description
128- DisplayName = $TemplateFile.displayname
129- RawJSON = $templateFile.rawJSON
130- AssignTo = $TemplateFile.AssignTo
131- ExcludeGroup = $TemplateFile.excludeGroup
132- tenantFilter = $Tenant
133- }
94+ if ($Settings.remediate ) {
95+ try {
96+ $CompareResult.customGroup ? ($CompareResult.AssignTo = $CompareResult.customGroup ) : $null
13497
135- # Add assignment filter if specified
136- if ($TemplateFile.assignmentFilter ) {
137- $PolicyParams.AssignmentFilterName = $TemplateFile.assignmentFilter
138- $PolicyParams.AssignmentFilterType = $TemplateFile.assignmentFilterType ?? ' include'
139- }
98+ $PolicyParams = @ {
99+ TemplateType = $CompareResult.templateType
100+ Description = $CompareResult.description
101+ DisplayName = $CompareResult.displayname
102+ RawJSON = $CompareResult.rawJSON
103+ AssignTo = $CompareResult.AssignTo
104+ ExcludeGroup = $CompareResult.excludeGroup
105+ tenantFilter = $Tenant
106+ }
140107
141- Set-CIPPIntunePolicy @PolicyParams
142- } catch {
143- $ErrorMessage = Get-NormalizedError - Message $_ .Exception.Message
144- Write-LogMessage - API ' Standards ' - tenant $tenant - message " Failed to create or update Intune Template $ ( $TemplateFile .displayname ) , Error: $ErrorMessage " - sev ' Error '
108+ # Add assignment filter if specified
109+ if ( $CompareResult .assignmentFilter ) {
110+ $PolicyParams .AssignmentFilterName = $CompareResult .assignmentFilter
111+ $PolicyParams .AssignmentFilterType = $CompareResult .assignmentFilterType ?? ' include '
145112 }
146- }
147113
114+ Set-CIPPIntunePolicy @PolicyParams
115+ } catch {
116+ $ErrorMessage = Get-NormalizedError - Message $_.Exception.Message
117+ Write-LogMessage - API ' Standards' - tenant $tenant - message " Failed to create or update Intune Template $ ( $CompareResult.displayname ) , Error: $ErrorMessage " - sev ' Error'
118+ }
148119 }
149120
150- if ($true -in $Settings.alert ) {
151- foreach ($Template in $CompareList | Where-Object - Property alert -EQ $true ) {
152- $AlertObj = $Template | Select-Object - Property displayname, description, compare, assignTo, excludeGroup, existingPolicyId
153- if ($Template.compare ) {
154- Write-StandardsAlert - message " Template $ ( $Template.displayname ) does not match the expected configuration." - object $AlertObj - tenant $Tenant - standardName ' IntuneTemplate' - standardId $Settings.templateId
155- Write-LogMessage - API ' Standards' - tenant $Tenant - message " Template $ ( $Template.displayname ) does not match the expected configuration. We've generated an alert" - sev info
121+ if ($Settings.alert ) {
122+ $AlertObj = $CompareResult | Select-Object - Property displayname, description, compare, assignTo, excludeGroup, existingPolicyId
123+ if ($CompareResult.compare ) {
124+ Write-StandardsAlert - message " Template $ ( $CompareResult.displayname ) does not match the expected configuration." - object $AlertObj - tenant $Tenant - standardName ' IntuneTemplate' - standardId $Settings.templateId
125+ Write-LogMessage - API ' Standards' - tenant $Tenant - message " Template $ ( $CompareResult.displayname ) does not match the expected configuration. We've generated an alert" - sev info
126+ } else {
127+ if ($CompareResult.ExistingPolicyId ) {
128+ Write-LogMessage - API ' Standards' - tenant $Tenant - message " Template $ ( $CompareResult.displayname ) has the correct configuration." - sev Info
156129 } else {
157- if ($Template.ExistingPolicyId ) {
158- Write-LogMessage - API ' Standards' - tenant $Tenant - message " Template $ ( $Template.displayname ) has the correct configuration." - sev Info
159- } else {
160- Write-StandardsAlert - message " Template $ ( $Template.displayname ) is missing." - object $AlertObj - tenant $Tenant - standardName ' IntuneTemplate' - standardId $Settings.templateId
161- Write-LogMessage - API ' Standards' - tenant $Tenant - message " Template $ ( $Template.displayname ) is missing." - sev info
162- }
130+ Write-StandardsAlert - message " Template $ ( $CompareResult.displayname ) is missing." - object $AlertObj - tenant $Tenant - standardName ' IntuneTemplate' - standardId $Settings.templateId
131+ Write-LogMessage - API ' Standards' - tenant $Tenant - message " Template $ ( $CompareResult.displayname ) is missing." - sev info
163132 }
164133 }
165134 }
166135
167- if ($true -in $Settings.report ) {
168- foreach ($Template in $CompareList | Where-Object { $_.report -eq $true -or $_.remediate -eq $true }) {
169- $id = $Template.templateId
136+ if ($Settings.report -or $Settings.remediate ) {
137+ $id = $CompareResult.templateId
170138
171- $CurrentValue = @ {
172- displayName = $Template.displayname
173- description = $Template.description
174- isCompliant = if ($Template.compare ) { $false } else { $true }
175- }
176- $ExpectedValue = @ {
177- displayName = $Template.displayname
178- description = $Template.description
179- isCompliant = $true
180- }
181- Set-CIPPStandardsCompareField - FieldName " standards.IntuneTemplate.$id " - CurrentValue $CurrentValue - ExpectedValue $ExpectedValue - TenantFilter $Tenant
139+ $CurrentValue = @ {
140+ displayName = $CompareResult.displayname
141+ description = $CompareResult.description
142+ isCompliant = if ($CompareResult.compare ) { $false } else { $true }
143+ }
144+ $ExpectedValue = @ {
145+ displayName = $CompareResult.displayname
146+ description = $CompareResult.description
147+ isCompliant = $true
182148 }
149+ Set-CIPPStandardsCompareField - FieldName " standards.IntuneTemplate.$id " - CurrentValue $CurrentValue - ExpectedValue $ExpectedValue - TenantFilter $Tenant
183150 # Add-CIPPBPAField -FieldName "policy-$id" -FieldValue $Compare -StoreAs bool -Tenant $tenant
184151 }
185152}
0 commit comments