Skip to content

Commit

Permalink
Migrate Intune EDR resource to Settings Catalog cmdlets
Browse files Browse the repository at this point in the history
  • Loading branch information
FabienTschanz committed Oct 4, 2024
1 parent 41ef158 commit 6313ade
Show file tree
Hide file tree
Showing 7 changed files with 319 additions and 845 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
* M365DSCDRGUtil
* Fixes an issue for the handling of skipped one-property elements in the
Settings Catalog. FIXES [#5086](https://github.com/microsoft/Microsoft365DSC/issues/5086)
* Add Set support for secret Settings Catalog values
* Removed unused functions

# 1.24.1002.1

Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class MSFT_IntuneEndpointDetectionAndResponsePolicyWindows10 : OMI_BaseResource
{
[Write, Description("Identity of the endpoint detection and response policy for Windows 10.")] String Identity;
[Key, Description("Display name of the endpoint detection and response policy for Windows 10.")] String DisplayName;
[Write, Description("List of Scope Tags for this Entity instance.")] String RoleScopeTagIds[];
[Write, Description("Description of the endpoint detection and response policy for Windows 10.")] String Description;
[Write, Description("Assignments of the endpoint detection and response policy for Windows 10."), EmbeddedInstance("MSFT_DeviceManagementConfigurationPolicyAssignments")] String Assignments[];
[Write, Description("Return or set Windows Defender Advanced Threat Protection Sample Sharing configuration parameter: 0 - none, 1 - All"), ValueMap{"0", "1"}, Values{"0", "1"}] String SampleSharing;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ Configuration Example
ApplicationId = $ApplicationId;
TenantId = $TenantId;
CertificateThumbprint = $CertificateThumbprint;
ConfigurationBlob = "Blob"
ConfigurationType = "onboard"
SampleSharing = 1
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ Configuration Example
ApplicationId = $ApplicationId;
TenantId = $TenantId;
CertificateThumbprint = $CertificateThumbprint;
ConfigurationBlob = "Blob"
ConfigurationType = "onboard"
SampleSharing = 1
}
}
}
250 changes: 5 additions & 245 deletions Modules/Microsoft365DSC/Modules/M365DSCDRGUtil.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -501,7 +501,6 @@ function Get-M365DSCDRGSimpleObjectTypeToString
[Parameter()]
[System.String]
$Space = ' '

)

$returnValue = ''
Expand Down Expand Up @@ -837,250 +836,6 @@ function Convert-M365DSCDRGComplexTypeToHashtable
return [hashtable]$results
}

function Get-SettingCatalogSettingValue
{
[CmdletBinding()]
[OutputType([System.Collections.Hashtable],[System.Collections.Hashtable[]])]
param (
[Parameter()]
$SettingValue,
[Parameter()]
$SettingValueType

)

switch -Wildcard ($SettingValueType)
{
'*ChoiceSettingInstance'
{
$complexValue = @{}
$complexValue.Add('odataType',$SettingValue.'@odata.type')
$complexValue.Add('Value',$SettingValue.value)
$children = @()
foreach($child in $SettingValue.children)
{
$complexChild = @{}
$complexChild.Add('SettingDefinitionId', $child.settingDefinitionId)
$complexChild.Add('odataType', $child.'@odata.type')
$valueName = $child.'@odata.type'.replace('#microsoft.graph.deviceManagementConfiguration', '').replace('Instance', 'Value')
$valueName = Get-StringFirstCharacterToLower -Value $valueName
$rawValue = $child.$valueName
$childSettingValue = Get-SettingCatalogSettingValue -SettingValue $rawValue -SettingValueType $child.'@odata.type'
$complexChild.Add($valueName,$childSettingValue)
$children += $complexChild
}
$complexValue.Add('Children',$children)
}
'*ChoiceSettingCollectionInstance'
{
$complexCollection = @()
foreach($item in $SettingValue)
{
$complexValue = @{}
$complexValue.Add('Value',$item.value)
$children = @()
foreach($child in $item.children)
{
$complexChild = @{}
$complexChild.Add('SettingDefinitionId', $child.settingDefinitionId)
$complexChild.Add('odataType', $child.'@odata.type')
$valueName = $child.'@odata.type'.replace('#microsoft.graph.deviceManagementConfiguration', '').replace('Instance', 'Value')
$valueName = Get-StringFirstCharacterToLower -Value $valueName
$rawValue = $child.$valueName
$childSettingValue = Get-SettingCatalogSettingValue -SettingValue $rawValue -SettingValueType $child.'@odata.type'
$complexChild.Add($valueName,$childSettingValue)
$children += $complexChild
}
$complexValue.Add('Children',$children)
$complexCollection += $complexValue
}
return ,([hashtable[]]$complexCollection)
}
'*SimpleSettingInstance'
{
$complexValue = @{}
$complexValue.Add('odataType',$SettingValue.'@odata.type')
$valueName = 'IntValue'
$value = $SettingValue.value
if($SettingValue.'@odata.type' -ne '#microsoft.graph.deviceManagementConfigurationIntegerSettingValue')
{
$valueName = 'StringValue'
}
$complexValue.Add($valueName,$value)
if($SettingValue.'@odata.type' -eq '#microsoft.graph.deviceManagementConfigurationSecretSettingValue')
{
$complexValue.Add('ValueState',$SettingValue.valueState)
}
}
'*SimpleSettingCollectionInstance'
{
$complexCollection = @()

foreach($item in $SettingValue)
{
$complexValue = @{}
$complexValue.Add('odataType',$item.'@odata.type')
$valueName = 'IntValue'
$value = $item.value
if($item.'@odata.type' -ne '#microsoft.graph.deviceManagementConfigurationIntegerSettingValue')
{
$valueName = 'StringValue'
}
$complexValue.Add($valueName,$value)
if($item.'@odata.type' -eq '#microsoft.graph.deviceManagementConfigurationSecretSettingValue')
{
$complexValue.Add('ValueState',$item.valueState)
}
$complexCollection += $complexValue
}
return ,([hashtable[]]$complexCollection)
}
'*GroupSettingInstance'
{
$complexValue = @{}
$complexValue.Add('odataType',$SettingValue.'@odata.type')
$children = @()
foreach($child in $SettingValue.children)
{
$complexChild = @{}
$complexChild.Add('SettingDefinitionId', $child.settingDefinitionId)
$complexChild.Add('odataType', $child.'@odata.type')
$valueName = $child.'@odata.type'.replace('#microsoft.graph.deviceManagementConfiguration', '').replace('Instance', 'Value')
$valueName = Get-StringFirstCharacterToLower -Value $valueName
$rawValue = $child.$valueName
$settingValue = Get-SettingCatalogSettingValue -SettingValue $rawValue -SettingValueType $child.'@odata.type'
$complexChild.Add($valueName,$settingValue)
$children += $complexChild
}
$complexValue.Add('Children',$children)
}
'*GroupSettingCollectionInstance'
{
$complexCollection = @()
foreach($groupSettingValue in $SettingValue)
{
$complexValue = @{}
#$complexValue.Add('odataType',$SettingValue.'@odata.type')
$children = @()
foreach($child in $groupSettingValue.children)
{
$complexChild = @{}
$complexChild.Add('SettingDefinitionId', $child.settingDefinitionId)
$complexChild.Add('odataType', $child.'@odata.type')
$valueName = $child.'@odata.type'.replace('#microsoft.graph.deviceManagementConfiguration', '').replace('Instance', 'Value')
$valueName = Get-StringFirstCharacterToLower -Value $valueName
$rawValue = $child.$valueName
$settingValue = Get-SettingCatalogSettingValue -SettingValue $rawValue -SettingValueType $child.'@odata.type'
$complexChild.Add($valueName,$settingValue)
$children += $complexChild
}
$complexValue.Add('Children',$children)
$complexCollection += $complexValue
}
return ,([hashtable[]]$complexCollection)
}
}
return $complexValue
}

function Get-SettingCatalogPolicySettingsFromTemplate
{
[CmdletBinding()]
[OutputType([System.Array])]
param
(
[Parameter(Mandatory = $true)]
[System.Collections.Hashtable]
$DSCParams,

[Parameter(Mandatory = $true)]
[System.String]
$templateReferenceId
)

$DSCParams.Remove('Identity') | Out-Null
$DSCParams.Remove('DisplayName') | Out-Null
$DSCParams.Remove('Description') | Out-Null

$settings = @()

$templateSettings = Get-MgDeviceManagementConfigurationPolicyTemplateSettingTemplate -DeviceManagementConfigurationPolicyTemplateId $templateReferenceId

$simpleSettings = @()
$simpleSettings += $templateSettings.SettingInstanceTemplate | Where-Object -FilterScript `
{ $_.AdditionalProperties.'@odata.type' -ne '#microsoft.graph.deviceManagementConfigurationGroupSettingCollectionInstanceTemplate' }
foreach ($templateSetting in $simpleSettings)
{
$setting = @{}
$settingKey = $DSCParams.keys | Where-Object -FilterScript { $templateSetting.settingDefinitionId -like "*$($_)" }
if ((-not [String]::IsNullOrEmpty($settingKey)) -and $DSCParams."$settingKey")
{
$setting.Add('@odata.type', '#microsoft.graph.deviceManagementConfigurationSetting')
$myFormattedSetting = Format-M365DSCParamsToSettingInstance -DSCParams @{$settingKey = $DSCParams."$settingKey" } `
-TemplateSetting $templateSetting

$setting.Add('settingInstance', $myFormattedSetting)
$settings += $setting
$DSCParams.Remove($settingKey) | Out-Null
}
}

#Prepare attacksurfacereductionrules groupCollectionTemplateSettings
$groupCollectionTemplateSettings = @()
$groupCollectionTemplateSettings += $templateSettings.SettingInstanceTemplate | Where-Object -FilterScript `
{ $_.AdditionalProperties.'@odata.type' -eq '#microsoft.graph.deviceManagementConfigurationGroupSettingCollectionInstanceTemplate' }

foreach ($groupCollectionTemplateSetting in $groupCollectionTemplateSettings)
{
$setting = @{}
$setting.Add('@odata.type', '#microsoft.graph.deviceManagementConfigurationSetting')
$settingInstance = [ordered]@{}
$settingInstance.Add('@odata.type', '#microsoft.graph.deviceManagementConfigurationGroupSettingCollectionInstance')
$settingInstance.Add('settingDefinitionId', $groupCollectionTemplateSetting.settingDefinitionId)
$settingInstance.Add('settingInstanceTemplateReference', @{
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationSettingInstanceTemplateReference'
'settingInstanceTemplateId' = $groupCollectionTemplateSetting.settingInstanceTemplateId
})
$groupSettingCollectionValues = @()
$groupSettingCollectionValueChildren = @()
$groupSettingCollectionValue = @{}
$groupSettingCollectionValue.Add('@odata.type', '#microsoft.graph.deviceManagementConfigurationGroupSettingValue')

$settingValueTemplateId = $groupCollectionTemplateSetting.AdditionalProperties.groupSettingCollectionValueTemplate.settingValueTemplateId
if (-Not [string]::IsNullOrEmpty($settingValueTemplateId))
{
$groupSettingCollectionValue.Add('settingValueTemplateReference', @{'settingValueTemplateId' = $SettingValueTemplateId })
}

foreach ($key in $DSCParams.keys)
{
$templateValue = $groupCollectionTemplateSetting.AdditionalProperties.groupSettingCollectionValueTemplate.children | Where-Object `
-FilterScript { $_.settingDefinitionId -like "*$key" }
if ($templateValue)
{
$groupSettingCollectionValueChild = Format-M365DSCParamsToSettingInstance `
-DSCParams @{$key = $DSCParams."$key" } `
-TemplateSetting $templateValue `
-IncludeSettingValueTemplateId $false `
-IncludeSettingInstanceTemplateId $false

$groupSettingCollectionValueChildren += $groupSettingCollectionValueChild
}
}
$groupSettingCollectionValue.Add('children', $groupSettingCollectionValueChildren)
$groupSettingCollectionValues += $groupSettingCollectionValue
$settingInstance.Add('groupSettingCollectionValue', $groupSettingCollectionValues)
$setting.Add('settingInstance', $settingInstance)

if ($setting.settingInstance.groupSettingCollectionValue.children.count -gt 0)
{
$settings += $setting
}
}

return $settings
}

function ConvertFrom-IntunePolicyAssignment
{
[CmdletBinding()]
Expand Down Expand Up @@ -1965,6 +1720,11 @@ function Get-IntuneSettingCatalogPolicySettingInstanceValue
$settingValue = @{}
if (-not [string]::IsNullOrEmpty($SettingValueType))
{
if ($SettingDefinition.AdditionalProperties.valueDefinition.isSecret)
{
$SettingValueType = "#microsoft.graph.deviceManagementConfigurationSecretSettingValue"
$settingValue.Add('valueState', 'NotEncrypted')
}
$settingValue.Add('@odata.type', $SettingValueType)
}
if (-not [string]::IsNullOrEmpty($settingValueTemplateId))
Expand Down
Loading

0 comments on commit 6313ade

Please sign in to comment.