Private/Get-CAIQConditionalAccessPolicy.ps1
Function Get-CAIQConditionalAccessPolicy { <# .DESCRIPTION Gets a Conditional Access Policy from Microsoft Graph .SYNOPSIS Gets a Conditional Access Policy from Microsoft Graph .EXAMPLE Get-CAIQConditionalAccessPolicy -ConditionalAccessPolicyId "00000000-0000-0000-0000-000000000000" .EXAMPLE Get-CAIQConditionalAccessPolicy -Filter "displayName eq 'Test Policy'" .EXAMPLE Get-CAIQConditionalAccessPolicy -All -FlattenOutput .INPUTS System.String System.Object System.Int32 System.Switch .OUTPUTS System.Object .LINK https://docs.microsoft.com/en-us/graph/api/resources/conditionalaccesspolicy?view=graph-rest-1.0 #> [CmdletBinding(DefaultParameterSetName="All")] [OutputType([System.Object])] Param ( [Parameter( Mandatory=$false,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true, ParameterSetName="ConditionalAccessPolicyId" )] [Alias("Id","PolicyId")] [string[]]$ConditionalAccessPolicyId, [Parameter(Mandatory=$false,ParameterSetName="Filter")] [string]$Filter, [Parameter(Mandatory=$false,ParameterSetName="All")] [switch]$All, [Parameter(Mandatory=$false)] [ValidateSet("Beta","v1.0")] [string]$ApiVersion = "v1.0", [Parameter(Mandatory=$false)] [switch]$FlattenOutput ) Begin { # Set the default parameter values $PSDefaultParameterValues = @{} $PSDefaultParameterValues["ConvertTo-Json:Depth"] = 10 $PSDefaultParameterValues["Invoke-MgGraphRequest:Method"] = "GET" $PSDefaultParameterValues["Invoke-MgGraphRequest:OutputType"] = "PSObject" # Get the Microsoft Graph endpoint, if not already set If (!$script:graph_endpoint) { $script:graph_endpoint = Get-CAIQGraphEndpoint } } Process { # Setting the filter based on the parameter set If ($PSCmdlet.ParameterSetName -eq "ConditionalAccessPolicyId") { $filter = "id eq '$conditionalAccessPolicyId'" } ElseIf ($PSCmdlet.ParameterSetName -eq "All") { $filter = $null } Try { Do { # Get all the policies $r = Invoke-MgGraphRequest -Uri "$script:graph_endpoint/$($apiVersion)/identity/conditionalAccess/policies?`$filter=$($filter)" # Output the policies If ($flattenOutput) { # Flatten the output Write-Warning "Object flattening is experimental and may not work as expected in all scenarios." Foreach ($policy in $r.Value) { $policy | ConvertTo-CAIQFlatObject } } Else { # Return the raw object $r.Value } } Until (!$r."@odata.nextLink") } Catch { # Write the error Write-Error -Message $_ } } End { } } |