-
Notifications
You must be signed in to change notification settings - Fork 531
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #404 from microsoft/Dev
Release 1.0.3.1723
- Loading branch information
Showing
108 changed files
with
140,824 additions
and
6,890 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
266 changes: 266 additions & 0 deletions
266
...C/DSCResources/MSFT_EXOActiveSyncDeviceAccessRule/MSFT_EXOActiveSyncDeviceAccessRule.psm1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,266 @@ | ||
function Get-TargetResource | ||
{ | ||
[CmdletBinding()] | ||
[OutputType([System.Collections.Hashtable])] | ||
param | ||
( | ||
[Parameter(Mandatory = $true)] | ||
[System.String] | ||
$Identity, | ||
|
||
[Parameter()] | ||
[ValidateSet('Allow', 'Block', 'Quarantine')] | ||
[System.String] | ||
$AccessLevel, | ||
|
||
[Parameter()] | ||
[ValidateSet('DeviceModel', 'DeviceType', 'DeviceOS', 'UserAgent', 'XMSWLHeader')] | ||
[System.String] | ||
$Characteristic, | ||
|
||
[Parameter()] | ||
[System.String] | ||
$QueryString, | ||
|
||
[Parameter()] | ||
[ValidateSet('Present', 'Absent')] | ||
[System.String] | ||
$Ensure = 'Present', | ||
|
||
[Parameter(Mandatory = $true)] | ||
[System.Management.Automation.PSCredential] | ||
$GlobalAdminAccount | ||
) | ||
|
||
Write-Verbose -Message "Getting Active Sync Device Access Rule configuration for $Identity" | ||
#region Telemetry | ||
$data = [System.Collections.Generic.Dictionary[[String], [String]]]::new() | ||
$data.Add("Resource", $MyInvocation.MyCommand.ModuleName) | ||
$data.Add("Method", $MyInvocation.MyCommand) | ||
Add-O365DSCTelemetryEvent -Data $data | ||
#endregion | ||
|
||
Test-MSCloudLogin -O365Credential $GlobalAdminAccount ` | ||
-Platform ExchangeOnline | ||
|
||
$AllActiveSyncDeviceAccessRules = Get-ActiveSyncDeviceAccessRule | ||
|
||
$ActiveSyncDeviceAccessRule = $AllActiveSyncDeviceAccessRules | Where-Object -FilterScript { $_.Identity -eq $Identity } | ||
|
||
if ($null -eq $ActiveSyncDeviceAccessRule) | ||
{ | ||
Write-Verbose -Message "Active Sync Device Access Rule $($Identity) does not exist." | ||
|
||
$nullReturn = @{ | ||
Identity = $Identity | ||
AccessLevel = $AccessLevel | ||
Characteristic = $Characteristic | ||
QueryString = $QueryString | ||
Ensure = 'Absent' | ||
GlobalAdminAccount = $GlobalAdminAccount | ||
} | ||
|
||
return $nullReturn | ||
} | ||
else | ||
{ | ||
$result = @{ | ||
Identity = $ActiveSyncDeviceAccessRule.Identity | ||
AccessLevel = $ActiveSyncDeviceAccessRule.AccessLevel | ||
Characteristic = $ActiveSyncDeviceAccessRule.Characteristic | ||
QueryString = $ActiveSyncDeviceAccessRule.QueryString | ||
Ensure = 'Present' | ||
GlobalAdminAccount = $GlobalAdminAccount | ||
} | ||
|
||
Write-Verbose -Message "Found Active Sync Device Access Rule $($Identity)" | ||
return $result | ||
} | ||
} | ||
|
||
function Set-TargetResource | ||
{ | ||
[CmdletBinding()] | ||
param | ||
( | ||
[Parameter(Mandatory = $true)] | ||
[System.String] | ||
$Identity, | ||
|
||
[Parameter()] | ||
[ValidateSet('Allow', 'Block', 'Quarantine')] | ||
[System.String] | ||
$AccessLevel, | ||
|
||
[Parameter()] | ||
[ValidateSet('DeviceModel', 'DeviceType', 'DeviceOS', 'UserAgent', 'XMSWLHeader')] | ||
[System.String] | ||
$Characteristic, | ||
|
||
[Parameter()] | ||
[System.String] | ||
$QueryString, | ||
|
||
[Parameter()] | ||
[ValidateSet('Present', 'Absent')] | ||
[System.String] | ||
$Ensure = 'Present', | ||
|
||
[Parameter(Mandatory = $true)] | ||
[System.Management.Automation.PSCredential] | ||
$GlobalAdminAccount | ||
) | ||
|
||
Write-Verbose -Message "Setting Active Sync Device Access Rule configuration for $Identity" | ||
|
||
$currentActiveSyncDeviceAccessRuleConfig = Get-TargetResource @PSBoundParameters | ||
|
||
#region Telemetry | ||
$data = [System.Collections.Generic.Dictionary[[String], [String]]]::new() | ||
$data.Add("Resource", $MyInvocation.MyCommand.ModuleName) | ||
$data.Add("Method", $MyInvocation.MyCommand) | ||
Add-O365DSCTelemetryEvent -Data $data | ||
#endregion | ||
|
||
Test-MSCloudLogin -O365Credential $GlobalAdminAccount ` | ||
-Platform ExchangeOnline | ||
|
||
$NewActiveSyncDeviceAccessRuleParams = @{ | ||
AccessLevel = $AccessLevel | ||
Characteristic = $Characteristic | ||
QueryString = $QueryString | ||
Confirm = $false | ||
} | ||
|
||
$SetActiveSyncDeviceAccessRuleParams = @{ | ||
Identity = $Identity | ||
AccessLevel = $AccessLevel | ||
Characteristic = $Characteristic | ||
QueryString = $QueryString | ||
Confirm = $false | ||
} | ||
|
||
# CASE: Active Sync Device Access Rule doesn't exist but should; | ||
if ($Ensure -eq "Present" -and $currentActiveSyncDeviceAccessRuleConfig.Ensure -eq "Absent") | ||
{ | ||
Write-Verbose -Message "Active Sync Device Access Rule '$($Identity)' does not exist but it should. Create and configure it." | ||
# Create Active Sync Device Access Rule | ||
New-ActiveSyncDeviceAccessRule @NewActiveSyncDeviceAccessRuleParams | ||
|
||
} | ||
# CASE: Active Sync Device Access Rule exists but it shouldn't; | ||
elseif ($Ensure -eq "Absent" -and $currentActiveSyncDeviceAccessRuleConfig.Ensure -eq "Present") | ||
{ | ||
Write-Verbose -Message "Active Sync Device Access Rule '$($Identity)' exists but it shouldn't. Remove it." | ||
Remove-ActiveSyncDeviceAccessRule -Identity $Identity -Confirm:$false | ||
} | ||
# CASE: Active Sync Device Access Rule exists and it should, but has different values than the desired ones | ||
elseif ($Ensure -eq "Present" -and $currentActiveSyncDeviceAccessRuleConfig.Ensure -eq "Present") | ||
{ | ||
Write-Verbose -Message "Active Sync Device Access Rule '$($Identity)' already exists, but needs updating." | ||
Write-Verbose -Message "Setting Active Sync Device Access Rule $($Identity) with values: $(Convert-O365DscHashtableToString -Hashtable $SetActiveSyncDeviceAccessRuleParams)" | ||
Set-ActiveSyncDeviceAccessRule @SetActiveSyncDeviceAccessRuleParams | ||
} | ||
} | ||
|
||
function Test-TargetResource | ||
{ | ||
[CmdletBinding()] | ||
[OutputType([System.Boolean])] | ||
param | ||
( | ||
[Parameter(Mandatory = $true)] | ||
[System.String] | ||
$Identity, | ||
|
||
[Parameter()] | ||
[ValidateSet('Allow', 'Block', 'Quarantine')] | ||
[System.String] | ||
$AccessLevel, | ||
|
||
[Parameter()] | ||
[ValidateSet('DeviceModel', 'DeviceType', 'DeviceOS', 'UserAgent', 'XMSWLHeader')] | ||
[System.String] | ||
$Characteristic, | ||
|
||
[Parameter()] | ||
[System.String] | ||
$QueryString, | ||
|
||
[Parameter()] | ||
[ValidateSet('Present', 'Absent')] | ||
[System.String] | ||
$Ensure = 'Present', | ||
|
||
[Parameter(Mandatory = $true)] | ||
[System.Management.Automation.PSCredential] | ||
$GlobalAdminAccount | ||
) | ||
|
||
Write-Verbose -Message "Testing Active Sync Device Access Rule configuration for $Identity" | ||
|
||
$CurrentValues = Get-TargetResource @PSBoundParameters | ||
|
||
Write-Verbose -Message "Current Values: $(Convert-O365DscHashtableToString -Hashtable $CurrentValues)" | ||
Write-Verbose -Message "Target Values: $(Convert-O365DscHashtableToString -Hashtable $PSBoundParameters)" | ||
|
||
$ValuesToCheck = $PSBoundParameters | ||
$ValuesToCheck.Remove('GlobalAdminAccount') | Out-Null | ||
|
||
$TestResult = Test-Office365DSCParameterState -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(Mandatory = $true)] | ||
[System.Management.Automation.PSCredential] | ||
$GlobalAdminAccount | ||
) | ||
$InformationPreference = 'Continue' | ||
#region Telemetry | ||
$data = [System.Collections.Generic.Dictionary[[String], [String]]]::new() | ||
$data.Add("Resource", $MyInvocation.MyCommand.ModuleName) | ||
$data.Add("Method", $MyInvocation.MyCommand) | ||
Add-O365DSCTelemetryEvent -Data $data | ||
#endregion | ||
Test-MSCloudLogin -O365Credential $GlobalAdminAccount ` | ||
-Platform ExchangeOnline | ||
|
||
[array]$AllActiveSyncDeviceAccessRules = Get-ActiveSyncDeviceAccessRule | ||
|
||
$dscContent = "" | ||
$i = 1 | ||
foreach ($ActiveSyncDeviceAccessRule in $AllActiveSyncDeviceAccessRules) | ||
{ | ||
Write-Information " [$i/$($AllActiveSyncDeviceAccessRules.Count)] $($ActiveSyncDeviceAccessRule.Identity)" | ||
|
||
$Params = @{ | ||
Identity = $ActiveSyncDeviceAccessRule.Identity | ||
GlobalAdminAccount = $GlobalAdminAccount | ||
} | ||
$result = Get-TargetResource @Params | ||
$result.GlobalAdminAccount = Resolve-Credentials -UserName "globaladmin" | ||
$content = " EXOActiveSyncDeviceAccessRule " + (New-GUID).ToString() + "`r`n" | ||
$content += " {`r`n" | ||
$currentDSCBlock = Get-DSCBlock -Params $result -ModulePath $PSScriptRoot | ||
$content += Convert-DSCStringParamToVariable -DSCBlock $currentDSCBlock -ParameterName "GlobalAdminAccount" | ||
$content += " }`r`n" | ||
$dscContent += $content | ||
$i++ | ||
} | ||
return $dscContent | ||
} | ||
|
||
Export-ModuleMember -Function *-TargetResource | ||
|
10 changes: 10 additions & 0 deletions
10
...esources/MSFT_EXOActiveSyncDeviceAccessRule/MSFT_EXOActiveSyncDeviceAccessRule.schema.mof
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
[ClassVersion("1.0.0.0"), FriendlyName("EXOActiveSyncDeviceAccessRule")] | ||
class MSFT_EXOActiveSyncDeviceAccessRule : OMI_BaseResource | ||
{ | ||
[Key, Description("The Identity parameter specifies the identity of the device access rule.")] String Identity; | ||
[Write, Description("The AccessLevel parameter specifies whether the devices are allowed, blocked or quarantined."), ValueMap{"Allow","Block","Quarantine"}, Values{"Allow","Block","Quarantine"}] String AccessLevel; | ||
[Write, Description("The Characteristic parameter specifies the device characteristic or category that's used by the rule."), ValueMap{"DeviceModel","DeviceType","DeviceOS","UserAgent","XMSWLHeader"}, Values{"DeviceModel","DeviceType","DeviceOS","UserAgent","XMSWLHeader"}] String Characteristic; | ||
[Write, Description("The QueryString parameter specifies the device identifier that's used by the rule. This parameter uses a text value that's used with Characteristic parameter value to define the device.")] String QueryString; | ||
[Write, Description("Specify if the Active Sync Device Access Rule should exist or not."), ValueMap{"Present","Absent"}, Values{"Present","Absent"}] String Ensure; | ||
[Required, Description("Credentials of the Exchange Global Admin"), EmbeddedInstance("MSFT_Credential")] string GlobalAdminAccount; | ||
}; |
5 changes: 5 additions & 0 deletions
5
Modules/Office365DSC/DSCResources/MSFT_EXOActiveSyncDeviceAccessRule/readme.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# EXOActiveSyncDeviceAccessRule | ||
|
||
## Description | ||
|
||
This resource configures Active Sync Device Access Rules in Exchange Online. |
Oops, something went wrong.