internal/functions/resolve/Resolve-DirectoryRoleTemplate.ps1
|
function Resolve-DirectoryRoleTemplate { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string[]] $InputReference, [switch] $DontFailIfNotExisting, [switch] $SearchInDesiredConfiguration, [switch] $Expand, # Return object { id, displayName } [switch] $DisplayName, [System.Management.Automation.PSCmdlet] $Cmdlet = $PSCmdlet ) begin { if ($InputReference.Count -gt 1) { $InputReference = $InputReference | ForEach-Object { Resolve-String -Text $_ } } else { $InputReference = Resolve-String -Text $InputReference[0] } } process { if ($InputReference -is [array] -and $InputReference.Count -gt 1) { # Ensure cache loaded once if (-not $script:cache["allRoleTemplates"]) { $script:cache["allRoleTemplates"] = (Invoke-MgGraphRequest -Method GET -Uri "$script:graphBaseUrl/directoryRoleTemplates").Value ` | Select-Object @{n = "id"; e = { $_["id"] } }, @{n = "displayName"; e = { $_["displayName"] } } } $results = @() foreach ($ref in $InputReference) { try { if ($ref -match $script:guidRegex) { $roleTemplate = $script:cache["allRoleTemplates"] | Where-Object { $_.id -eq $ref } | Select-Object -First 1 } else { $roleTemplate = $script:cache["allRoleTemplates"] | Where-Object { $_.displayName -eq $ref } | Select-Object -First 1 } if (-not $roleTemplate) { Write-PSFMessage -Level Warning -Message ("Cannot resolve DirectoryRoleTemplate resource for input '{0}'. Searched tenant & desired configuration." -f $ref) -Tag failed; $results += $ref; continue } if ($Expand) { $results += [pscustomobject]@{ id = $roleTemplate.id; displayName = $roleTemplate.displayName } } elseif ($DisplayName) { $results += ($roleTemplate.displayName) } else { $results += $roleTemplate.id } } catch { Write-PSFMessage -Level Warning -Message ("Cannot resolve DirectoryRoleTemplate resource for input '{0}'. Error: {1}" -f $ref, $_.Exception.Message) -Tag failed -ErrorRecord $_; $results += $ref } } return , $results } try { if (-not $script:cache["allRoleTemplates"]) { $script:cache["allRoleTemplates"] = (Invoke-MgGraphRequest -Method GET -Uri "$script:graphBaseUrl/directoryRoleTemplates").Value ` | Select-Object @{n = "id"; e = { $_["id"] } }, @{n = "displayName"; e = { $_["displayName"] } } } if ($InputReference -match $script:guidRegex) { $roleTemplate = $script:cache["allRoleTemplates"] | Where-Object { $_.id -eq $InputReference } | Select-Object -ExpandProperty Id } else { $roleTemplate = $script:cache["allRoleTemplates"] | Where-Object { $_.displayName -eq $InputReference } | Select-Object -ExpandProperty Id } if (-not $roleTemplate -and $SearchInDesiredConfiguration) { if ($InputReference -in $script:desiredConfiguration["roleTemplates"].displayName) { $roleTemplate = $InputReference } } if (-not $roleTemplate -and -not $DontFailIfNotExisting) { throw "Cannot find directoryRoleTemplate $InputReference." } elseif (-not $roleTemplate -and $DontFailIfNotExisting) { Write-PSFMessage -Level Warning -Message ("Cannot resolve DirectoryRoleTemplate resource for input '{0}'. Searched tenant & desired configuration." -f $InputReference) -Tag 'failed'; return $InputReference } if ($roleTemplate.count -gt 1) { throw "Got multiple directoryRoleTemplates for $InputReference" } if (-not $Expand) { if ($DisplayName) { return ($script:cache["allRoleTemplates"] | Where-Object { $_.id -eq $roleTemplate } | Select-Object -ExpandProperty displayName) } return $roleTemplate } $detail = $script:cache['allRoleTemplates'] | Where-Object { $_.id -eq $roleTemplate } | Select-Object -First 1 return [pscustomobject]@{ id = $roleTemplate; displayName = $detail.displayName } } catch { Write-PSFMessage -Level Warning -Message ("Cannot resolve DirectoryRoleTemplate resource for input '{0}'. Searched tenant & desired configuration. Error: {1}" -f $InputReference, $_.Exception.Message) -Tag 'failed' -ErrorRecord $_ $Cmdlet.ThrowTerminatingError($_) } } } |