functions/roleManagement/roleManagementPolicies/Register-TmfRoleManagementPolicy.ps1
function Register-TmfRoleManagementPolicy { Param ( [Parameter(Mandatory = $true, ParameterSetName = "AzureAD")] [Parameter(Mandatory = $true, ParameterSetName = "AzureResources")] [string]$roleReference, [Parameter(Mandatory = $true, ParameterSetName = "AzureResources")] [string]$subscriptionReference, [Parameter(Mandatory = $true, ParameterSetName = "AzureAD")] [Parameter(Mandatory = $true, ParameterSetName = "AzureResources")] [string]$scopeReference, [Parameter(Mandatory = $true, ParameterSetName = "AzureAD")] [Parameter(Mandatory = $true, ParameterSetName = "AzureResources")] [string]$scopeType, [Parameter(Mandatory = $true, ParameterSetName = "AzureAD")] [Parameter(Mandatory = $true, ParameterSetName = "AzureResources")] [string]$ruleTemplate, [Parameter(ParameterSetName = "AzureAD")] [Parameter(ParameterSetName = "AzureResources")] [object[]]$activationApprover, [Parameter(ParameterSetName = "AzureAD")] [Parameter(ParameterSetName = "AzureResources")] [string] $sourceConfig = "<Custom>", [Parameter(ParameterSetName = "AzureAD")] [Parameter(ParameterSetName = "AzureResources")] [System.Management.Automation.PSCmdlet] $Cmdlet = $PSCmdlet ) begin { $resourceName = "roleManagementPolicies" if (!$script:desiredConfiguration[$resourceName]) { $script:desiredConfiguration[$resourceName] = @() } if ($subscriptionReference) { $policyScope = "AzureResources" } else { $policyScope = "AzureAD" } switch ($policyScope) { "AzureAD" { if ($script:desiredConfiguration[$resourceName] | Where-Object {$_.roleReference -eq $roleReference -and $_.scopeReference -eq $scopeReference}) { $alreadyLoaded = $script:desiredConfiguration[$resourceName] | Where-Object {$_.roleReference -eq $roleReference -and $_.scopeReference -eq $scopeReference} } } "AzureResources" { if ($script:desiredConfiguration[$resourceName] | Where-Object {$_.roleReference -eq $roleReference -and $_.subscriptionReference -eq $subscriptionReference -and $_.scopeReference -eq $scopeReference}) { $alreadyLoaded = $script:desiredConfiguration[$resourceName] | Where-Object {$_.roleReference -eq $roleReference -and $_.subscriptionReference -eq $subscriptionReference -and $_.scopeReference -eq $scopeReference} } } } } process { if (Test-PSFFunctionInterrupt) {return} switch ($policyScope) { "AzureAD" { $object = [PSCustomObject] @{ roleReference = $roleReference scopeReference = $scopeReference scopeType = $scopeType ruleTemplate = $ruleTemplate sourceConfig = $sourceConfig activationApprover = $activationApprover } } "AzureResources" { $object = [PSCustomObject] @{ roleReference = $roleReference subscriptionReference = $subscriptionReference scopeReference = $scopeReference scopeType = $scopeType ruleTemplate = $ruleTemplate sourceConfig = $sourceConfig activationApprover = $activationApprover } } } Add-Member -InputObject $object -MemberType ScriptMethod -Name Properties -Value { ($this | Get-Member -MemberType NoteProperty).Name } if ($alreadyLoaded) { $script:desiredConfiguration[$resourceName][$script:desiredConfiguration[$resourceName].IndexOf($alreadyLoaded)] = $object } else { $script:desiredConfiguration[$resourceName] += $object } } end { } } |