DSCResources/MSFT_AADTenantDetails/MSFT_AADTenantDetails.psm1
function Get-TargetResource { [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param ( [Parameter(Mandatory = $true)] [System.String] $IsSingleInstance, [Parameter()] [System.String[]] $MarketingNotificationEmails, [Parameter()] [System.String[]] $SecurityComplianceNotificationMails, [Parameter()] [System.String[]] $SecurityComplianceNotificationPhones, [Parameter()] [System.String[]] $TechnicalNotificationMails, [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 ) Write-Verbose -Message 'Getting configuration of AzureAD Tenant Details' $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 $nullReturn = @{ IsSingleInstance = 'Yes' } try { $AADTenantDetails = Get-MgBetaOrganization -ErrorAction 'SilentlyContinue' if ($null -eq $AADTenantDetails) { throw 'Could not retrieve AzureAD Tenant Details' } else { Write-Verbose -Message 'Found existing AzureAD Tenant Details' $result = @{ IsSingleInstance = 'Yes' MarketingNotificationEmails = $AADTenantDetails.MarketingNotificationEmails SecurityComplianceNotificationMails = $AADTenantDetails.SecurityComplianceNotificationMails SecurityComplianceNotificationPhones = $AADTenantDetails.SecurityComplianceNotificationPhones TechnicalNotificationMails = $AADTenantDetails.TechnicalNotificationMails Credential = $Credential ApplicationId = $ApplicationId TenantId = $TenantId ApplicationSecret = $ApplicationSecret CertificateThumbprint = $CertificateThumbprint ManagedIdentity = $ManagedIdentity.IsPresent AccessTokens = $AccessTokens } Write-Verbose -Message "Get-TargetResource Result: `n $(Convert-M365DscHashtableToString -Hashtable $result)" return $result } } catch { New-M365DSCLogEntry -Message 'Error retrieving data:' ` -Exception $_ ` -Source $($MyInvocation.MyCommand.Source) ` -TenantId $TenantId ` -Credential $Credential return $nullReturn } } function Set-TargetResource { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [System.String] $IsSingleInstance, [Parameter()] [System.String[]] $MarketingNotificationEmails, [Parameter()] [System.String[]] $SecurityComplianceNotificationMails, [Parameter()] [System.String[]] $SecurityComplianceNotificationPhones, [Parameter()] [System.String[]] $TechnicalNotificationMails, [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 ) Write-Verbose -Message 'Setting configuration of AzureAD Tenant Details' $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 $currentParameters = $PSBoundParameters $currentParameters.Remove('IsSingleInstance') | Out-Null if ($currentParameters.ContainsKey('Credential')) { $currentParameters.Remove('Credential') | Out-Null } if ($currentParameters.ContainsKey('ApplicationId')) { $currentParameters.Remove('ApplicationId') | Out-Null } if ($currentParameters.ContainsKey('ApplicationSecret')) { $currentParameters.Remove('ApplicationSecret') | Out-Null } if ($currentParameters.ContainsKey('TenantId')) { $currentParameters.Remove('TenantId') | Out-Null } if ($currentParameters.ContainsKey('CertificateThumbprint')) { $currentParameters.Remove('CertificateThumbprint') | Out-Null } if ($currentParameters.ContainsKey('ManagedIdentity')) { $currentParameters.Remove('ManagedIdentity') | Out-Null } $currentParameters.Remove('AccessTokens') | Out-Null $currentParameters.Add('OrganizationId', $(Get-MgBetaOrganization).Id) try { Write-Verbose -Message 'Calling Update-MGBetaOrganization with parameters:' Write-Verbose -Message "$(Convert-M365DscHashtableToString -Hashtable $currentParameters)" Update-MgBetaOrganization @currentParameters } catch { Write-Verbose -Message 'Cannot Set AzureAD Tenant Details' } } function Test-TargetResource { [CmdletBinding()] [OutputType([System.Boolean])] param ( [Parameter(Mandatory = $true)] [System.String] $IsSingleInstance, [Parameter()] [System.String[]] $MarketingNotificationEmails, [Parameter()] [System.String[]] $SecurityComplianceNotificationMails, [Parameter()] [System.String[]] $SecurityComplianceNotificationPhones, [Parameter()] [System.String[]] $TechnicalNotificationMails, [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 AzureAD Tenant Details' $CurrentValues = Get-TargetResource @PSBoundParameters Write-Verbose -Message "Current Values: $(Convert-M365DscHashtableToString -Hashtable $CurrentValues)" Write-Verbose -Message "Target Values: $(Convert-M365DscHashtableToString -Hashtable $PSBoundParameters)" $ValuesToCheck = $PSBoundParameters $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.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 $dscContent = '' try { if ($null -ne $Global:M365DSCExportResourceInstancesCount) { $Global:M365DSCExportResourceInstancesCount++ } $AADTenantDetails = Get-MgBetaOrganization -ErrorAction Stop $Params = @{ MarketingNotificationEmails = $AADTenantDetails.MarketingNotificationEmails SecurityComplianceNotificationMails = $AADTenantDetails.SecurityComplianceNotificationMails SecurityComplianceNotificationPhones = $AADTenantDetails.SecurityComplianceNotificationPhones TechnicalNotificationMails = $AADTenantDetails.TechnicalNotificationMails Credential = $Credential ApplicationId = $ApplicationId ApplicationSecret = $ApplicationSecret TenantId = $TenantId CertificateThumbprint = $CertificateThumbprint ManagedIdentity = $ManagedIdentity.IsPresent IsSingleInstance = 'Yes' AccessTokens = $AccessTokens } $Results = Get-TargetResource @Params if ($Results -is [System.Collections.Hashtable] -and $Results.Count -gt 1) { $Results = Update-M365DSCExportAuthenticationResults -ConnectionMode $ConnectionMode -Results $Results $currentDSCBlock = Get-M365DSCExportContentForResource -ResourceName $ResourceName -ConnectionMode $ConnectionMode ` -ModulePath $PSScriptRoot ` -Results $Results ` -Credential $Credential $dscContent += $currentDSCBlock Save-M365DSCPartialExport -Content $currentDSCBlock ` -FileName $Global:PartialExportFileName Write-Host $Global:M365DSCEmojiGreenCheckMark } else { Write-Host $Global:M365DSCEmojiRedX } 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 |