Add Intune Firewall rules Hyper-V policy for Windows10

This commit is contained in:
Fabien Tschanz 2024-11-14 12:29:49 +01:00
Родитель 9f315062f4
Коммит 60797e049a
11 изменённых файлов: 1384 добавлений и 9 удалений

Просмотреть файл

@ -4,6 +4,10 @@
* AADRoleEligibilityScheduleRequest
* Adds support for custom role assignments at app scope.
* IntuneFirewallRulesHyperVPolicyWindows10
* Initial release.
* M365DSCDRGUtil
* Improve CIM instance detection for specific Intune resources.
# 1.24.1113.1

Просмотреть файл

@ -0,0 +1,640 @@
function Get-TargetResource
{
[CmdletBinding()]
[OutputType([System.Collections.Hashtable])]
param
(
#region resource generator code
[Parameter()]
[System.String]
$Description,
[Parameter(Mandatory = $true)]
[System.String]
$DisplayName,
[Parameter()]
[System.String[]]
$RoleScopeTagIds,
[Parameter()]
[System.String]
$Id,
[Parameter()]
[Microsoft.Management.Infrastructure.CimInstance[]]
$FirewallRuleName,
[Parameter()]
[Microsoft.Management.Infrastructure.CimInstance[]]
$Assignments,
#endregion
[Parameter()]
[System.String]
[ValidateSet('Absent', 'Present')]
$Ensure = 'Present',
[Parameter()]
[System.Management.Automation.PSCredential]
$Credential,
[Parameter()]
[System.String]
$ApplicationId,
[Parameter()]
[System.String]
$TenantId,
[Parameter()]
[System.Management.Automation.PSCredential]
$ApplicationSecret,
[Parameter()]
[System.String]
$CertificateThumbprint,
[Parameter()]
[Switch]
$ManagedIdentity,
[Parameter()]
[System.String[]]
$AccessTokens
)
try
{
$ConnectionMode = New-M365DSCConnection -Workload 'MicrosoftGraph' `
-InboundParameters $PSBoundParameters
#Ensure the proper dependencies are installed in the current environment.
Confirm-M365DSCDependencies
#region Telemetry
$ResourceName = $MyInvocation.MyCommand.ModuleName.Replace('MSFT_', '')
$CommandName = $MyInvocation.MyCommand
$data = Format-M365DSCTelemetryParameters -ResourceName $ResourceName `
-CommandName $CommandName `
-Parameters $PSBoundParameters
Add-M365DSCTelemetryEvent -Data $data
#endregion
$nullResult = $PSBoundParameters
$nullResult.Ensure = 'Absent'
$getValue = $null
#region resource generator code
$getValue = Get-MgBetaDeviceManagementConfigurationPolicy -DeviceManagementConfigurationPolicyId $Id -ErrorAction SilentlyContinue
if ($null -eq $getValue)
{
Write-Verbose -Message "Could not find an Intune Firewall Rules Hyper-V Policy for Windows10 with Id {$Id}"
if (-not [System.String]::IsNullOrEmpty($DisplayName))
{
$getValue = Get-MgBetaDeviceManagementConfigurationPolicy `
-Filter "Name eq '$DisplayName'" `
-ErrorAction SilentlyContinue
}
}
#endregion
if ($null -eq $getValue)
{
Write-Verbose -Message "Could not find an Intune Firewall Rules Hyper-V Policy for Windows10 with Name {$DisplayName}."
return $nullResult
}
$Id = $getValue.Id
Write-Verbose -Message "An Intune Firewall Rules Hyper-V Policy for Windows10 with Id {$Id} and Name {$DisplayName} was found"
# Retrieve policy specific settings
[array]$settings = Get-MgBetaDeviceManagementConfigurationPolicySetting `
-DeviceManagementConfigurationPolicyId $Id `
-ExpandProperty 'settingDefinitions' `
-All `
-ErrorAction Stop
$policySettings = @{}
$policySettings = Export-IntuneSettingCatalogPolicySettings -Settings $settings -ReturnHashtable $policySettings
#region resource generator code
$complexFirewallRuleName = @()
foreach ($currentFirewallRuleName in $policySettings.FirewallRuleName)
{
$myFirewallRuleName = @{}
foreach ($key in $currentFirewallRuleName.Keys)
{
$myFirewallRuleName.Add($key, $currentFirewallRuleName[$key])
}
if ($myFirewallRuleName.values.Where({$null -ne $_}).Count -gt 0)
{
$complexFirewallRuleName += $myFirewallRuleName
}
}
$policySettings.Remove('FirewallRuleName') | Out-Null
#endregion
$results = @{
#region resource generator code
Description = $getValue.Description
DisplayName = $getValue.Name
RoleScopeTagIds = $getValue.RoleScopeTagIds
Id = $getValue.Id
FirewallRuleName = $complexFirewallRuleName
Ensure = 'Present'
Credential = $Credential
ApplicationId = $ApplicationId
TenantId = $TenantId
ApplicationSecret = $ApplicationSecret
CertificateThumbprint = $CertificateThumbprint
ManagedIdentity = $ManagedIdentity.IsPresent
#endregion
}
$results += $policySettings
$assignmentsValues = Get-MgBetaDeviceManagementConfigurationPolicyAssignment -DeviceManagementConfigurationPolicyId $Id
$assignmentResult = @()
if ($assignmentsValues.Count -gt 0)
{
$assignmentResult += ConvertFrom-IntunePolicyAssignment -Assignments $assignmentsValues -IncludeDeviceFilter $true
}
$results.Add('Assignments', $assignmentResult)
return [System.Collections.Hashtable] $results
}
catch
{
New-M365DSCLogEntry -Message 'Error retrieving data:' `
-Exception $_ `
-Source $($MyInvocation.MyCommand.Source) `
-TenantId $TenantId `
-Credential $Credential
return $nullResult
}
}
function Set-TargetResource
{
[CmdletBinding()]
param
(
#region resource generator code
[Parameter()]
[System.String]
$Description,
[Parameter(Mandatory = $true)]
[System.String]
$DisplayName,
[Parameter()]
[System.String[]]
$RoleScopeTagIds,
[Parameter()]
[System.String]
$Id,
[Parameter()]
[Microsoft.Management.Infrastructure.CimInstance[]]
$FirewallRuleName,
[Parameter()]
[Microsoft.Management.Infrastructure.CimInstance[]]
$Assignments,
#endregion
[Parameter()]
[System.String]
[ValidateSet('Absent', 'Present')]
$Ensure = 'Present',
[Parameter()]
[System.Management.Automation.PSCredential]
$Credential,
[Parameter()]
[System.String]
$ApplicationId,
[Parameter()]
[System.String]
$TenantId,
[Parameter()]
[System.Management.Automation.PSCredential]
$ApplicationSecret,
[Parameter()]
[System.String]
$CertificateThumbprint,
[Parameter()]
[Switch]
$ManagedIdentity,
[Parameter()]
[System.String[]]
$AccessTokens
)
#Ensure the proper dependencies are installed in the current environment.
Confirm-M365DSCDependencies
#region Telemetry
$ResourceName = $MyInvocation.MyCommand.ModuleName.Replace('MSFT_', '')
$CommandName = $MyInvocation.MyCommand
$data = Format-M365DSCTelemetryParameters -ResourceName $ResourceName `
-CommandName $CommandName `
-Parameters $PSBoundParameters
Add-M365DSCTelemetryEvent -Data $data
#endregion
$currentInstance = Get-TargetResource @PSBoundParameters
$BoundParameters = Remove-M365DSCAuthenticationParameter -BoundParameters $PSBoundParameters
$templateReferenceId = 'a5481c22-7a2a-4f59-a33e-6eee30d02f94_1'
$platforms = 'windows10'
$technologies = 'mdm,microsoftSense'
if ($Ensure -eq 'Present' -and $currentInstance.Ensure -eq 'Absent')
{
Write-Verbose -Message "Creating an Intune Firewall Rules Hyper-V Policy for Windows10 with Name {$DisplayName}"
$BoundParameters.Remove("Assignments") | Out-Null
$settings = Get-IntuneSettingCatalogPolicySetting `
-DSCParams ([System.Collections.Hashtable]$BoundParameters) `
-TemplateId $templateReferenceId
$createParameters = @{
Name = $DisplayName
Description = $Description
TemplateReference = @{ templateId = $templateReferenceId }
Platforms = $platforms
Technologies = $technologies
Settings = $settings
}
#region resource generator code
$policy = New-MgBetaDeviceManagementConfigurationPolicy -BodyParameter $createParameters
if ($policy.Id)
{
$assignmentsHash = ConvertTo-IntunePolicyAssignment -IncludeDeviceFilter:$true -Assignments $Assignments
Update-DeviceConfigurationPolicyAssignment `
-DeviceConfigurationPolicyId $policy.Id `
-Targets $assignmentsHash `
-Repository 'deviceManagement/configurationPolicies'
}
#endregion
}
elseif ($Ensure -eq 'Present' -and $currentInstance.Ensure -eq 'Present')
{
Write-Verbose -Message "Updating the Intune Firewall Rules Hyper-V Policy for Windows10 with Id {$($currentInstance.Id)}"
$BoundParameters.Remove("Assignments") | Out-Null
$settings = Get-IntuneSettingCatalogPolicySetting `
-DSCParams ([System.Collections.Hashtable]$BoundParameters) `
-TemplateId $templateReferenceId
Update-IntuneDeviceConfigurationPolicy `
-DeviceConfigurationPolicyId $currentInstance.Id `
-Name $DisplayName `
-Description $Description `
-TemplateReferenceId $templateReferenceId `
-Platforms $platforms `
-Technologies $technologies `
-Settings $settings
#region resource generator code
$assignmentsHash = ConvertTo-IntunePolicyAssignment -IncludeDeviceFilter:$true -Assignments $Assignments
Update-DeviceConfigurationPolicyAssignment `
-DeviceConfigurationPolicyId $currentInstance.Id `
-Targets $assignmentsHash `
-Repository 'deviceManagement/configurationPolicies'
#endregion
}
elseif ($Ensure -eq 'Absent' -and $currentInstance.Ensure -eq 'Present')
{
Write-Verbose -Message "Removing the Intune Firewall Rules Hyper-V Policy for Windows10 with Id {$($currentInstance.Id)}"
#region resource generator code
Remove-MgBetaDeviceManagementConfigurationPolicy -DeviceManagementConfigurationPolicyId $currentInstance.Id
#endregion
}
}
function Test-TargetResource
{
[CmdletBinding()]
[OutputType([System.Boolean])]
param
(
#region resource generator code
[Parameter()]
[System.String]
$Description,
[Parameter(Mandatory = $true)]
[System.String]
$DisplayName,
[Parameter()]
[System.String[]]
$RoleScopeTagIds,
[Parameter()]
[System.String]
$Id,
[Parameter()]
[Microsoft.Management.Infrastructure.CimInstance[]]
$FirewallRuleName,
[Parameter()]
[Microsoft.Management.Infrastructure.CimInstance[]]
$Assignments,
#endregion
[Parameter()]
[System.String]
[ValidateSet('Absent', 'Present')]
$Ensure = 'Present',
[Parameter()]
[System.Management.Automation.PSCredential]
$Credential,
[Parameter()]
[System.String]
$ApplicationId,
[Parameter()]
[System.String]
$TenantId,
[Parameter()]
[System.Management.Automation.PSCredential]
$ApplicationSecret,
[Parameter()]
[System.String]
$CertificateThumbprint,
[Parameter()]
[Switch]
$ManagedIdentity,
[Parameter()]
[System.String[]]
$AccessTokens
)
#Ensure the proper dependencies are installed in the current environment.
Confirm-M365DSCDependencies
#region Telemetry
$ResourceName = $MyInvocation.MyCommand.ModuleName.Replace('MSFT_', '')
$CommandName = $MyInvocation.MyCommand
$data = Format-M365DSCTelemetryParameters -ResourceName $ResourceName `
-CommandName $CommandName `
-Parameters $PSBoundParameters
Add-M365DSCTelemetryEvent -Data $data
#endregion
Write-Verbose -Message "Testing configuration of the Intune Firewall Rules Hyper-V Policy for Windows10 with Id {$Id} and Name {$DisplayName}"
$CurrentValues = Get-TargetResource @PSBoundParameters
[Hashtable]$ValuesToCheck = @{}
$MyInvocation.MyCommand.Parameters.GetEnumerator() | ForEach-Object {
if ($_.Key -notlike '*Variable' -or $_.Key -notin @('Verbose', 'Debug', 'ErrorAction', 'WarningAction', 'InformationAction'))
{
if ($null -ne $CurrentValues[$_.Key] -or $null -ne $PSBoundParameters[$_.Key])
{
$ValuesToCheck.Add($_.Key, $null)
if (-not $PSBoundParameters.ContainsKey($_.Key))
{
$PSBoundParameters.Add($_.Key, $null)
}
}
}
}
if ($CurrentValues.Ensure -ne $Ensure)
{
Write-Verbose -Message "Test-TargetResource returned $false"
return $false
}
$testResult = $true
#Compare Cim instances
foreach ($key in $PSBoundParameters.Keys)
{
$source = $PSBoundParameters.$key
$target = $CurrentValues.$key
if ($null -ne $source -and $source.GetType().Name -like '*CimInstance*')
{
$testResult = Compare-M365DSCComplexObject `
-Source ($source) `
-Target ($target)
if (-not $testResult)
{
break
}
$ValuesToCheck.Remove($key) | Out-Null
}
}
$ValuesToCheck.Remove('Id') | Out-Null
$ValuesToCheck = Remove-M365DSCAuthenticationParameter -BoundParameters $ValuesToCheck
Write-Verbose -Message "Current Values: $(Convert-M365DscHashtableToString -Hashtable $CurrentValues)"
Write-Verbose -Message "Target Values: $(Convert-M365DscHashtableToString -Hashtable $PSBoundParameters)"
if ($testResult)
{
$testResult = Test-M365DSCParameterState -CurrentValues $CurrentValues `
-Source $($MyInvocation.MyCommand.Source) `
-DesiredValues $PSBoundParameters `
-ValuesToCheck $ValuesToCheck.Keys
}
Write-Verbose -Message "Test-TargetResource returned $testResult"
return $testResult
}
function Export-TargetResource
{
[CmdletBinding()]
[OutputType([System.String])]
param
(
[Parameter()]
[System.String]
$Filter,
[Parameter()]
[System.Management.Automation.PSCredential]
$Credential,
[Parameter()]
[System.String]
$ApplicationId,
[Parameter()]
[System.String]
$TenantId,
[Parameter()]
[System.Management.Automation.PSCredential]
$ApplicationSecret,
[Parameter()]
[System.String]
$CertificateThumbprint,
[Parameter()]
[Switch]
$ManagedIdentity,
[Parameter()]
[System.String[]]
$AccessTokens
)
$ConnectionMode = New-M365DSCConnection -Workload 'MicrosoftGraph' `
-InboundParameters $PSBoundParameters
#Ensure the proper dependencies are installed in the current environment.
Confirm-M365DSCDependencies
#region Telemetry
$ResourceName = $MyInvocation.MyCommand.ModuleName.Replace('MSFT_', '')
$CommandName = $MyInvocation.MyCommand
$data = Format-M365DSCTelemetryParameters -ResourceName $ResourceName `
-CommandName $CommandName `
-Parameters $PSBoundParameters
Add-M365DSCTelemetryEvent -Data $data
#endregion
try
{
#region resource generator code
$policyTemplateID = "a5481c22-7a2a-4f59-a33e-6eee30d02f94_1"
[array]$getValue = Get-MgBetaDeviceManagementConfigurationPolicy `
-Filter $Filter `
-All `
-ErrorAction Stop | Where-Object `
-FilterScript {
$_.TemplateReference.TemplateId -eq $policyTemplateID
}
#endregion
$i = 1
$dscContent = ''
if ($getValue.Length -eq 0)
{
Write-Host $Global:M365DSCEmojiGreenCheckMark
}
else
{
Write-Host "`r`n" -NoNewline
}
foreach ($config in $getValue)
{
$displayedKey = $config.Id
if (-not [String]::IsNullOrEmpty($config.displayName))
{
$displayedKey = $config.displayName
}
elseif (-not [string]::IsNullOrEmpty($config.name))
{
$displayedKey = $config.name
}
Write-Host " |---[$i/$($getValue.Count)] $displayedKey" -NoNewline
$params = @{
Id = $config.Id
DisplayName = $config.Name
Ensure = 'Present'
Credential = $Credential
ApplicationId = $ApplicationId
TenantId = $TenantId
ApplicationSecret = $ApplicationSecret
CertificateThumbprint = $CertificateThumbprint
ManagedIdentity = $ManagedIdentity.IsPresent
AccessTokens = $AccessTokens
}
$Results = Get-TargetResource @Params
$Results = Update-M365DSCExportAuthenticationResults -ConnectionMode $ConnectionMode `
-Results $Results
if ($null -ne $Results.FirewallRuleName)
{
$complexTypeStringResult = Get-M365DSCDRGComplexTypeToString `
-ComplexObject $Results.FirewallRuleName `
-CIMInstanceName 'MicrosoftGraphIntuneSettingsCatalogFirewallRuleName_IntuneFirewallRulesHyperVPolicyWindows10'
if (-not [String]::IsNullOrWhiteSpace($complexTypeStringResult))
{
$Results.FirewallRuleName = $complexTypeStringResult
}
else
{
$Results.Remove('FirewallRuleName') | Out-Null
}
}
if ($Results.Assignments)
{
$complexTypeStringResult = Get-M365DSCDRGComplexTypeToString -ComplexObject $Results.Assignments -CIMInstanceName DeviceManagementConfigurationPolicyAssignments
if ($complexTypeStringResult)
{
$Results.Assignments = $complexTypeStringResult
}
else
{
$Results.Remove('Assignments') | Out-Null
}
}
$currentDSCBlock = Get-M365DSCExportContentForResource -ResourceName $ResourceName `
-ConnectionMode $ConnectionMode `
-ModulePath $PSScriptRoot `
-Results $Results `
-Credential $Credential
if ($Results.FirewallRuleName)
{
$currentDSCBlock = Convert-DSCStringParamToVariable -DSCBlock $currentDSCBlock -ParameterName "FirewallRuleName" -IsCIMArray:$True
}
if ($Results.Assignments)
{
$currentDSCBlock = Convert-DSCStringParamToVariable -DSCBlock $currentDSCBlock -ParameterName "Assignments" -IsCIMArray:$true
}
$dscContent += $currentDSCBlock
Save-M365DSCPartialExport -Content $currentDSCBlock `
-FileName $Global:PartialExportFileName
$i++
Write-Host $Global:M365DSCEmojiGreenCheckMark
}
return $dscContent
}
catch
{
Write-Host $Global:M365DSCEmojiRedX
New-M365DSCLogEntry -Message 'Error during Export:' `
-Exception $_ `
-Source $($MyInvocation.MyCommand.Source) `
-TenantId $TenantId `
-Credential $Credential
return ''
}
}
Export-ModuleMember -Function *-TargetResource

Просмотреть файл

@ -0,0 +1,46 @@
[ClassVersion("1.0.0.0")]
class MSFT_DeviceManagementConfigurationPolicyAssignments
{
[Write, Description("The type of the target assignment."), ValueMap{"#microsoft.graph.groupAssignmentTarget","#microsoft.graph.allLicensedUsersAssignmentTarget","#microsoft.graph.allDevicesAssignmentTarget","#microsoft.graph.exclusionGroupAssignmentTarget","#microsoft.graph.configurationManagerCollectionAssignmentTarget"}, Values{"#microsoft.graph.groupAssignmentTarget","#microsoft.graph.allLicensedUsersAssignmentTarget","#microsoft.graph.allDevicesAssignmentTarget","#microsoft.graph.exclusionGroupAssignmentTarget","#microsoft.graph.configurationManagerCollectionAssignmentTarget"}] String dataType;
[Write, Description("The type of filter of the target assignment i.e. Exclude or Include. Possible values are:none, include, exclude."), ValueMap{"none","include","exclude"}, Values{"none","include","exclude"}] String deviceAndAppManagementAssignmentFilterType;
[Write, Description("The Id of the filter for the target assignment.")] String deviceAndAppManagementAssignmentFilterId;
[Write, Description("The group Id that is the target of the assignment.")] String groupId;
[Write, Description("The group Display Name that is the target of the assignment.")] String groupDisplayName;
[Write, Description("The collection Id that is the target of the assignment.(ConfigMgr)")] String collectionId;
};
[ClassVersion("1.0.0.0")]
class MSFT_MicrosoftGraphIntuneSettingsCatalogFirewallRuleName_IntuneFirewallRulesHyperVPolicyWindows10
{
[Write, Description("Enabled - Depends on FirewallRuleName (0: Disabled, 1: Enabled)"), ValueMap{"0", "1"}, Values{"0", "1"}] String Enabled;
[Write, Description("Name - Depends on FirewallRuleName")] String Name;
[Write, Description("Direction - Depends on FirewallRuleName (in: The rule applies to inbound traffic., out: The rule applies to outbound traffic.)"), ValueMap{"in", "out"}, Values{"in", "out"}] String Direction;
[Write, Description("Priority - Depends on FirewallRuleName")] SInt32 Priority;
[Write, Description("Profiles - Depends on FirewallRuleName (1: FW_PROFILE_TYPE_DOMAIN: This value represents the profile for networks that are connected to domains., 2: FW_PROFILE_TYPE_STANDARD: This value represents the standard profile for networks. These networks are classified as private by the administrators in the server host. The classification happens the first time the host connects to the network. Usually these networks are behind Network Address Translation (NAT) devices, routers, and other edge devices, and they are in a private location, such as a home or an office. AND FW_PROFILE_TYPE_PRIVATE: This value represents the profile for private networks, which is represented by the same value as that used for FW_PROFILE_TYPE_STANDARD., 4: FW_PROFILE_TYPE_PUBLIC: This value represents the profile for public networks. These networks are classified as public by the administrators in the server host. The classification happens the first time the host connects to the network. Usually these networks are those at airports, coffee shops, and other public places where the peers in the network or the network administrator are not trusted., 2147483647: FW_PROFILE_TYPE_ALL: This value represents all these network sets and any future network sets.)"), ValueMap{"1", "2", "4", "2147483647"}, Values{"1", "2", "4", "2147483647"}] SInt32 Profiles[];
[Write, Description("Target - Depends on FirewallRuleName (wsl: WSL)"), ValueMap{"wsl"}, Values{"wsl"}] String VMCreatorId;
[Write, Description("Action - Depends on FirewallRuleName (0: Block, 1: Allow)"), ValueMap{"0", "1"}, Values{"0", "1"}] String Action;
[Write, Description("Local Address Ranges - Depends on FirewallRuleName")] String LocalAddressRanges[];
[Write, Description("Remote Address Ranges - Depends on FirewallRuleName")] String RemoteAddressRanges[];
[Write, Description("Remote Port Ranges - Depends on FirewallRuleName")] String RemotePortRanges[];
[Write, Description("Protocol - Depends on FirewallRuleName")] SInt32 Protocol;
[Write, Description("Local Port Ranges - Depends on FirewallRuleName")] String LocalPortRanges[];
};
[ClassVersion("1.0.0.0"), FriendlyName("IntuneFirewallRulesHyperVPolicyWindows10")]
class MSFT_IntuneFirewallRulesHyperVPolicyWindows10 : OMI_BaseResource
{
[Write, Description("Policy description")] String Description;
[Key, Description("Policy name")] String DisplayName;
[Write, Description("List of Scope Tags for this Entity instance.")] String RoleScopeTagIds[];
[Write, Description("The unique identifier for an entity. Read-only.")] String Id;
[Write, Description("Firewall Rules"), EmbeddedInstance("MSFT_MicrosoftGraphIntuneSettingsCatalogFirewallRuleName_IntuneFirewallRulesHyperVPolicyWindows10")] String FirewallRuleName[];
[Write, Description("Represents the assignment to the Intune policy."), EmbeddedInstance("MSFT_DeviceManagementConfigurationPolicyAssignments")] String Assignments[];
[Write, Description("Present ensures the policy exists, absent ensures it is removed."), ValueMap{"Present","Absent"}, Values{"Present","Absent"}] string Ensure;
[Write, Description("Credentials of the Admin"), EmbeddedInstance("MSFT_Credential")] string Credential;
[Write, Description("Id of the Azure Active Directory application to authenticate with.")] String ApplicationId;
[Write, Description("Id of the Azure Active Directory tenant used for authentication.")] String TenantId;
[Write, Description("Secret of the Azure Active Directory tenant used for authentication."), EmbeddedInstance("MSFT_Credential")] String ApplicationSecret;
[Write, Description("Thumbprint of the Azure Active Directory application's authentication certificate to use for authentication.")] String CertificateThumbprint;
[Write, Description("Managed ID being used for authentication.")] Boolean ManagedIdentity;
[Write, Description("Access token used for authentication.")] String AccessTokens[];
};

Просмотреть файл

@ -0,0 +1,6 @@
# IntuneFirewallRulesHyperVPolicyWindows10
## Description
Intune Firewall Rules Hyper-V Policy for Windows10

Просмотреть файл

@ -0,0 +1,44 @@
{
"resourceName":"IntuneFirewallRulesHyperVPolicyWindows10",
"description":"This resource configures an Intune Firewall Rules Hyper-V Policy for Windows10.",
"permissions":{
"graph":{
"delegated":{
"read":[
{
"name":"DeviceManagementConfiguration.Read.All"
},
{
"name":"Group.Read.All"
}
],
"update":[
{
"name":"DeviceManagementConfiguration.ReadWrite.All"
},
{
"name":"Group.Read.All"
}
]
},
"application":{
"read":[
{
"name":"DeviceManagementConfiguration.Read.All"
},
{
"name":"Group.Read.All"
}
],
"update":[
{
"name":"DeviceManagementConfiguration.ReadWrite.All"
},
{
"name":"Group.Read.All"
}
]
}
}
}
}

Просмотреть файл

@ -0,0 +1,53 @@
<#
This example creates a new Intune Firewall Policy for Windows10.
#>
Configuration Example
{
param(
[Parameter()]
[System.String]
$ApplicationId,
[Parameter()]
[System.String]
$TenantId,
[Parameter()]
[System.String]
$CertificateThumbprint
)
Import-DscResource -ModuleName Microsoft365DSC
node localhost
{
IntuneFirewallRulesHyperVPolicyWindows10 'myIntuneFirewallRulesHyperVPolicyWindows10'
{
Assignments = @(
MSFT_DeviceManagementConfigurationPolicyAssignments{
deviceAndAppManagementAssignmentFilterType = 'none'
dataType = '#microsoft.graph.groupAssignmentTarget'
groupId = '11111111-1111-1111-1111-111111111111'
}
);
FirewallRuleName = @(
MSFT_MicrosoftGraphIntuneSettingsCatalogFirewallRuleName_IntuneFirewallRulesHyperVPolicyWindows10{
Direction = 'out'
RemotePortRanges = @('0-100')
Name = 'Rule1'
Protocol = 80
Enabled = '1'
Action = '1'
}
)
Description = 'Description'
DisplayName = "Intune Firewall Rules Hyper-V Policy Windows10";
Ensure = "Present";
Id = '00000000-0000-0000-0000-000000000000'
RoleScopeTagIds = @("0");
ApplicationId = $ApplicationId;
TenantId = $TenantId;
CertificateThumbprint = $CertificateThumbprint;
}
}
}

Просмотреть файл

@ -0,0 +1,53 @@
<#
This example updates a Intune Firewall Policy for Windows10.
#>
Configuration Example
{
param(
[Parameter()]
[System.String]
$ApplicationId,
[Parameter()]
[System.String]
$TenantId,
[Parameter()]
[System.String]
$CertificateThumbprint
)
Import-DscResource -ModuleName Microsoft365DSC
node localhost
{
IntuneFirewallRulesHyperVPolicyWindows10 'myIntuneFirewallRulesHyperVPolicyWindows10'
{
Assignments = @(
MSFT_DeviceManagementConfigurationPolicyAssignments{
deviceAndAppManagementAssignmentFilterType = 'none'
dataType = '#microsoft.graph.groupAssignmentTarget'
groupId = '11111111-1111-1111-1111-111111111111'
}
);
FirewallRuleName = @(
MSFT_MicrosoftGraphIntuneSettingsCatalogFirewallRuleName_IntuneFirewallRulesHyperVPolicyWindows10{
Direction = 'in' # Updated property
RemotePortRanges = @('0-100')
Name = 'Rule1'
Protocol = 80
Enabled = '1'
Action = '1'
}
)
Description = 'Description'
DisplayName = "Intune Firewall Rules Hyper-V Policy Windows10";
Ensure = "Present";
Id = '00000000-0000-0000-0000-000000000000'
RoleScopeTagIds = @("0");
ApplicationId = $ApplicationId;
TenantId = $TenantId;
CertificateThumbprint = $CertificateThumbprint;
}
}
}

Просмотреть файл

@ -0,0 +1,34 @@
<#
This example removes a Device Control Policy.
#>
Configuration Example
{
param(
[Parameter()]
[System.String]
$ApplicationId,
[Parameter()]
[System.String]
$TenantId,
[Parameter()]
[System.String]
$CertificateThumbprint
)
Import-DscResource -ModuleName Microsoft365DSC
node localhost
{
IntuneFirewallRulesHyperVPolicyWindows10 'myIntuneFirewallRulesHyperVPolicyWindows10'
{
Id = '00000000-0000-0000-0000-000000000000'
DisplayName = 'Intune Firewall Rules Hyper-V Policy Windows10'
Ensure = 'Absent'
ApplicationId = $ApplicationId;
TenantId = $TenantId;
CertificateThumbprint = $CertificateThumbprint;
}
}
}

Просмотреть файл

@ -1778,13 +1778,15 @@ function Get-IntuneSettingCatalogPolicySettingInstanceValue
($Level -eq 1 -and $SettingDefinition.AdditionalProperties.maximumCount -gt 1 -and $groupSettingCollectionDefinitionChildren.Count -ge 1 -and $groupSettingCollectionDefinitionChildren.AdditionalProperties.'@odata.type' -notcontains "#microsoft.graph.deviceManagementConfigurationSettingGroupCollectionDefinition"))
{
$SettingInstanceName += Get-SettingsCatalogSettingName -SettingDefinition $SettingDefinition -AllSettingDefinitions $AllSettingDefinitions
$settingInstanceNameAlternate = $SettingInstanceName + "_Intune"
$cimDSCParams = @()
$cimDSCParamsName = ""
$DSCParams.GetEnumerator() | Where-Object -FilterScript {
$_.Value.CimClass.CimClassName -contains $SettingInstanceName
} | Foreach-Object -Process {
$cimDSCParams += $_.Value
$cimDSCParamsName = $_.Key
$DSCParams.GetEnumerator() | ForEach-Object {
if ($_.Value.CimClass.CimClassName -eq $SettingInstanceName -or $_.Value.CimClass.CimClassName -like "$settingInstanceNameAlternate*")
{
$cimDSCParams += $_.Value
$cimDSCParamsName = $_.Key
}
}
$newDSCParams = @{
$cimDSCParamsName = @()

Просмотреть файл

@ -0,0 +1,493 @@
[CmdletBinding()]
param(
)
$M365DSCTestFolder = Join-Path -Path $PSScriptRoot `
-ChildPath '..\..\Unit' `
-Resolve
$CmdletModule = (Join-Path -Path $M365DSCTestFolder `
-ChildPath '\Stubs\Microsoft365.psm1' `
-Resolve)
$GenericStubPath = (Join-Path -Path $M365DSCTestFolder `
-ChildPath '\Stubs\Generic.psm1' `
-Resolve)
Import-Module -Name (Join-Path -Path $M365DSCTestFolder `
-ChildPath '\UnitTestHelper.psm1' `
-Resolve)
$Global:DscHelper = New-M365DscUnitTestHelper -StubModule $CmdletModule `
-DscResource "IntuneFirewallRulesHyperVPolicyWindows10" -GenericStubModule $GenericStubPath
Describe -Name $Global:DscHelper.DescribeHeader -Fixture {
InModuleScope -ModuleName $Global:DscHelper.ModuleName -ScriptBlock {
Invoke-Command -ScriptBlock $Global:DscHelper.InitializeScript -NoNewScope
BeforeAll {
$secpasswd = ConvertTo-SecureString (New-Guid | Out-String) -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ('tenantadmin@mydomain.com', $secpasswd)
Mock -CommandName Confirm-M365DSCDependencies -MockWith {
}
Mock -CommandName Get-PSSession -MockWith {
}
Mock -CommandName Remove-PSSession -MockWith {
}
Mock -CommandName Update-MgBetaDeviceManagementConfigurationPolicy -MockWith {
}
Mock -CommandName New-MgBetaDeviceManagementConfigurationPolicy -MockWith {
return @{
Id = '619bd4a4-3b3b-4441-bd6f-3f4c0c444870'
}
}
Mock -CommandName Get-MgBetaDeviceManagementConfigurationPolicy -MockWith {
return @{
Id = '12345-12345-12345-12345-12345'
Description = 'My Test'
Name = 'My Test'
RoleScopeTagIds = @("FakeStringValue")
TemplateReference = @{
TemplateId = 'a5481c22-7a2a-4f59-a33e-6eee30d02f94_1'
}
}
}
Mock -CommandName Remove-MgBetaDeviceManagementConfigurationPolicy -MockWith {
}
Mock -CommandName Update-IntuneDeviceConfigurationPolicy -MockWith {
}
Mock -CommandName Get-IntuneSettingCatalogPolicySetting -MockWith {
}
Mock -CommandName Get-MgBetaDeviceManagementConfigurationPolicySetting -MockWith {
return @(
@{
Id = '0'
SettingDefinitions = @(
@{
Id = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}'
Name = '{FirewallRuleName}'
OffsetUri = '/MdmStore/HyperVFirewallRules/{0}'
AdditionalProperties = @{
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationSettingGroupCollectionDefinition'
minimumCount = 0
maximumCount = 100
childIds = @(
'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_firewallrulename'
'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_direction'
'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_remoteportranges'
'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_name'
'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_protocol'
'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_enabled'
'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_action'
)
}
},
@{
Id = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_firewallrulename'
Name = 'FirewallRuleName'
OffsetUri = '/MdmStore/HyperVFirewallRules/{0}/FirewallRuleName'
AdditionalProperties = @{
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationSimpleSettingDefinition'
dependentOn = @(
@{
dependentOn = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}'
parentSettingId = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}'
}
)
}
},
@{
Id = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_direction'
Name = 'Direction'
OffsetUri = '/MdmStore/HyperVFirewallRules/{0}/Direction'
AdditionalProperties = @{
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationChoiceSettingDefinition'
options = @(
@{
itemId = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_direction_out'
name = 'The rule applies to outbound traffic.'
dependentOn = @(
@{
dependentOn = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}'
parentSettingId = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}'
}
)
}
)
}
},
@{
Id = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_remoteportranges'
Name = 'RemotePortRanges'
OffsetUri = '/MdmStore/HyperVFirewallRules/{0}/RemotePortRanges'
AdditionalProperties = @{
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationSimpleSettingCollectionDefinition'
minimumCount = 0
maximumCount = 600
dependentOn = @(
@{
dependentOn = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}'
parentSettingId = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}'
}
)
}
},
@{
Id = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_name'
Name = 'Name'
OffsetUri = '/MdmStore/HyperVFirewallRules/{0}/Name'
AdditionalProperties = @{
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationSimpleSettingDefinition'
dependentOn = @(
@{
dependentOn = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}'
parentSettingId = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}'
}
)
}
},
@{
Id = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_protocol'
Name = 'Protocol'
OffsetUri = '/MdmStore/HyperVFirewallRules/{0}/Protocol'
AdditionalProperties = @{
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationSimpleSettingDefinition'
dependentOn = @(
@{
dependentOn = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}'
parentSettingId = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}'
}
)
}
},
@{
Id = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_enabled'
Name = 'Enabled'
OffsetUri = '/MdmStore/HyperVFirewallRules/{0}/Enabled'
AdditionalProperties = @{
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationChoiceSettingDefinition'
options = @(
@{
itemId = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_enabled_0'
name = 'Enabled'
dependentOn = @(
@{
dependentOn = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}'
parentSettingId = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}'
}
)
}
)
}
},
@{
Id = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_action'
Name = 'Action'
OffsetUri = '/MdmStore/HyperVFirewallRules/{0}/Action/Type'
AdditionalProperties = @{
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationChoiceSettingDefinition'
options = @(
@{
itemId = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_action_1'
name = 'Allow'
dependentOn = @(
@{
dependentOn = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}'
parentSettingId = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}'
}
)
}
)
}
}
)
SettingInstance = @{
SettingDefinitionId = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}'
SettingInstanceTemplateReference = @{
SettingInstanceTemplateId = '76c7a8be-67d2-44bf-81a5-38c94926b1a1'
}
AdditionalProperties = @{
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationGroupSettingCollectionInstance'
settingDefinitionId = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}'
groupSettingCollectionValue = @(
@{
children = @(
@{
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationChoiceSettingInstance'
settingDefinitionId = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_enabled'
choiceSettingValue = @{
children = @()
value = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_enabled_1'
}
},
@{
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationSimpleSettingInstance'
settingDefinitionId = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_name'
simpleSettingValue = @{
value = '__Test'
}
},
@{
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationSimpleSettingCollectionInstance'
settingDefinitionId = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_remoteportranges'
simpleSettingCollectionValue = @(
@{
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationStringSettingValue'
value = '0-100'
}
)
},
@{
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationChoiceSettingInstance'
settingDefinitionId = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_direction'
choiceSettingValue = @{
children = @()
value = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_direction_out'
}
},
@{
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationChoiceSettingInstance'
settingDefinitionId = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_action'
choiceSettingValue = @{
children = @()
value = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_action_1'
}
},
@{
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationSimpleSettingInstance'
settingDefinitionId = 'vendor_msft_firewall_mdmstore_hypervfirewallrules_{firewallrulename}_protocol'
simpleSettingValue = @{
'@odata.type' = '#microsoft.graph.deviceManagementConfigurationIntegerSettingValue'
value = 80
}
}
)
}
)
}
}
}
)
}
Mock -CommandName Update-DeviceConfigurationPolicyAssignment -MockWith {
}
Mock -CommandName New-M365DSCConnection -MockWith {
return "Credentials"
}
# Mock Write-Host to hide output during the tests
Mock -CommandName Write-Host -MockWith {
}
$Script:exportedInstances =$null
$Script:ExportMode = $false
Mock -CommandName Get-MgBetaDeviceManagementConfigurationPolicyAssignment -MockWith {
return @(@{
Id = '12345-12345-12345-12345-12345'
Source = 'direct'
SourceId = '12345-12345-12345-12345-12345'
Target = @{
DeviceAndAppManagementAssignmentFilterId = '12345-12345-12345-12345-12345'
DeviceAndAppManagementAssignmentFilterType = 'none'
AdditionalProperties = @(
@{
'@odata.type' = '#microsoft.graph.exclusionGroupAssignmentTarget'
groupId = '26d60dd1-fab6-47bf-8656-358194c1a49d'
}
)
}
})
}
}
# Test contexts
Context -Name "The IntuneFirewallRulesHyperVPolicyWindows10 should exist but it DOES NOT" -Fixture {
BeforeAll {
$testParams = @{
Assignments = [CimInstance[]]@(
(New-CimInstance -ClassName MSFT_DeviceManagementConfigurationPolicyAssignments -Property @{
DataType = '#microsoft.graph.exclusionGroupAssignmentTarget'
groupId = '26d60dd1-fab6-47bf-8656-358194c1a49d'
deviceAndAppManagementAssignmentFilterType = 'none'
} -ClientOnly)
)
Description = "My Test"
FirewallRuleName = [CimInstance[]]@(
(New-CimInstance -ClassName MSFT_MicrosoftGraphIntuneSettingsCatalogFirewallRuleName_IntuneFirewallRulesHyperVPolicyWindows10 -Property @{
Direction = 'out'
RemotePortRanges = @('0-100')
Name = '__Test'
Protocol = 80
Enabled = '1'
Action = '1'
} -ClientOnly)
)
Id = "619bd4a4-3b3b-4441-bd6f-3f4c0c444870"
DisplayName = "My Test"
RoleScopeTagIds = @("FakeStringValue")
Ensure = "Present"
Credential = $Credential;
}
Mock -CommandName Get-MgBetaDeviceManagementConfigurationPolicy -MockWith {
return $null
}
}
It 'Should return Values from the Get method' {
(Get-TargetResource @testParams).Ensure | Should -Be 'Absent'
}
It 'Should return false from the Test method' {
Test-TargetResource @testParams | Should -Be $false
}
It 'Should Create the group from the Set method' {
Set-TargetResource @testParams
Should -Invoke -CommandName New-MgBetaDeviceManagementConfigurationPolicy -Exactly 1
}
}
Context -Name "The IntuneFirewallRulesHyperVPolicyWindows10 exists but it SHOULD NOT" -Fixture {
BeforeAll {
$testParams = @{
Assignments = [CimInstance[]]@(
(New-CimInstance -ClassName MSFT_DeviceManagementConfigurationPolicyAssignments -Property @{
DataType = '#microsoft.graph.exclusionGroupAssignmentTarget'
groupId = '26d60dd1-fab6-47bf-8656-358194c1a49d'
deviceAndAppManagementAssignmentFilterType = 'none'
} -ClientOnly)
)
Description = "My Test"
FirewallRuleName = [CimInstance[]]@(
(New-CimInstance -ClassName MSFT_MicrosoftGraphIntuneSettingsCatalogFirewallRuleName_IntuneFirewallRulesHyperVPolicyWindows10 -Property @{
Direction = 'out'
RemotePortRanges = @('0-100')
Name = '__Test'
Protocol = 80
Enabled = '1'
Action = '1'
} -ClientOnly)
)
Id = "619bd4a4-3b3b-4441-bd6f-3f4c0c444870"
DisplayName = "My Test"
RoleScopeTagIds = @("FakeStringValue")
Ensure = "Absent"
Credential = $Credential;
}
}
It 'Should return Values from the Get method' {
(Get-TargetResource @testParams).Ensure | Should -Be 'Present'
}
It 'Should return true from the Test method' {
Test-TargetResource @testParams | Should -Be $false
}
It 'Should Remove the group from the Set method' {
Set-TargetResource @testParams
Should -Invoke -CommandName Remove-MgBetaDeviceManagementConfigurationPolicy -Exactly 1
}
}
Context -Name "The IntuneFirewallRulesHyperVPolicyWindows10 Exists and Values are already in the desired state" -Fixture {
BeforeAll {
$testParams = @{
Assignments = [CimInstance[]]@(
(New-CimInstance -ClassName MSFT_DeviceManagementConfigurationPolicyAssignments -Property @{
DataType = '#microsoft.graph.exclusionGroupAssignmentTarget'
groupId = '26d60dd1-fab6-47bf-8656-358194c1a49d'
deviceAndAppManagementAssignmentFilterType = 'none'
} -ClientOnly)
)
Description = "My Test"
FirewallRuleName = [CimInstance[]]@(
(New-CimInstance -ClassName MSFT_MicrosoftGraphIntuneSettingsCatalogFirewallRuleName_IntuneFirewallRulesHyperVPolicyWindows10 -Property @{
Direction = 'out'
RemotePortRanges = @('0-100')
Name = '__Test'
Protocol = 80
Enabled = '1'
Action = '1'
} -ClientOnly)
)
Id = "619bd4a4-3b3b-4441-bd6f-3f4c0c444870"
DisplayName = "My Test"
RoleScopeTagIds = @("FakeStringValue")
Ensure = "Present"
Credential = $Credential;
}
}
It 'Should return true from the Test method' {
Test-TargetResource @testParams | Should -Be $true
}
}
Context -Name "The IntuneFirewallRulesHyperVPolicyWindows10 exists and values are NOT in the desired state" -Fixture {
BeforeAll {
$testParams = @{
Assignments = [CimInstance[]]@(
(New-CimInstance -ClassName MSFT_DeviceManagementConfigurationPolicyAssignments -Property @{
DataType = '#microsoft.graph.exclusionGroupAssignmentTarget'
groupId = '26d60dd1-fab6-47bf-8656-358194c1a49d'
deviceAndAppManagementAssignmentFilterType = 'none'
} -ClientOnly)
)
Description = "My Test"
FirewallRuleName = [CimInstance[]]@(
(New-CimInstance -ClassName MSFT_MicrosoftGraphIntuneSettingsCatalogFirewallRuleName_IntuneFirewallRulesHyperVPolicyWindows10 -Property @{
Direction = 'in' # Drift
RemotePortRanges = @('0-100')
Name = '__Test'
Protocol = 80
Enabled = '1'
Action = '1'
} -ClientOnly)
)
Id = "619bd4a4-3b3b-4441-bd6f-3f4c0c444870"
DisplayName = "My Test"
RoleScopeTagIds = @("FakeStringValue")
Ensure = "Present"
Credential = $Credential;
}
}
It 'Should return Values from the Get method' {
(Get-TargetResource @testParams).Ensure | Should -Be 'Present'
}
It 'Should return false from the Test method' {
Test-TargetResource @testParams | Should -Be $false
}
It 'Should call the Set method' {
Set-TargetResource @testParams
Should -Invoke -CommandName Update-IntuneDeviceConfigurationPolicy -Exactly 1
}
}
Context -Name 'ReverseDSC Tests' -Fixture {
BeforeAll {
$Global:CurrentModeIsExport = $true
$Global:PartialExportFileName = "$(New-Guid).partial.ps1"
$testParams = @{
Credential = $Credential
}
}
It 'Should Reverse Engineer resource from the Export method' {
$result = Export-TargetResource @testParams
$result | Should -Not -BeNullOrEmpty
}
}
}
}
Invoke-Command -ScriptBlock $Global:DscHelper.CleanupScript -NoNewScope

Просмотреть файл

@ -399,7 +399,7 @@ Describe -Name $Global:DscHelper.DescribeHeader -Fixture {
)
Description = "My Test"
FirewallRuleName = [CimInstance[]]@(
(New-CimInstance -ClassName MicrosoftGraphIntuneSettingsCatalogFirewallRuleName -Property @{
(New-CimInstance -ClassName MSFT_MicrosoftGraphIntuneSettingsCatalogFirewallRuleName -Property @{
Direction = 'out'
InterfaceTypes = @('lan')
RemotePortRanges = @('0-100')
@ -447,7 +447,7 @@ Describe -Name $Global:DscHelper.DescribeHeader -Fixture {
)
Description = "My Test"
FirewallRuleName = [CimInstance[]]@(
(New-CimInstance -ClassName MicrosoftGraphIntuneSettingsCatalogFirewallRuleName -Property @{
(New-CimInstance -ClassName MSFT_MicrosoftGraphIntuneSettingsCatalogFirewallRuleName -Property @{
Direction = 'out'
InterfaceTypes = @('lan')
RemotePortRanges = @('0-100')
@ -493,7 +493,7 @@ Describe -Name $Global:DscHelper.DescribeHeader -Fixture {
)
Description = "My Test"
FirewallRuleName = [CimInstance[]]@(
(New-CimInstance -ClassName MicrosoftGraphIntuneSettingsCatalogFirewallRuleName -Property @{
(New-CimInstance -ClassName MSFT_MicrosoftGraphIntuneSettingsCatalogFirewallRuleName -Property @{
Direction = 'out'
InterfaceTypes = @('lan')
RemotePortRanges = @('0-100')
@ -530,7 +530,7 @@ Describe -Name $Global:DscHelper.DescribeHeader -Fixture {
)
Description = "My Test"
FirewallRuleName = [CimInstance[]]@(
(New-CimInstance -ClassName MicrosoftGraphIntuneSettingsCatalogFirewallRuleName -Property @{
(New-CimInstance -ClassName MSFT_MicrosoftGraphIntuneSettingsCatalogFirewallRuleName -Property @{
Direction = 'in' # Drift
InterfaceTypes = @('lan')
RemotePortRanges = @('0-100')