From b01b4ca8856a4555cfddb20c5bd255a660a3959a Mon Sep 17 00:00:00 2001 From: Steve Mutungi <132555836+SteveMutungi254@users.noreply.github.com> Date: Wed, 13 Nov 2024 09:36:33 +0300 Subject: [PATCH 01/11] Renaming Add-EntraScopedRoleMembership to New-EntraScopedRoleMembership --- ....ps1 => New-EntraScopedRoleMembership.ps1} | 2 +- .../Get-EntraScopedRoleMembership.md | 2 +- ...ip.md => New-EntraScopedRoleMembership.md} | 14 ++++++------ .../Remove-EntraScopedRoleMembership.md | 2 +- ...> New-EntraScopedRoleMembership.Tests.ps1} | 22 +++++++++---------- 5 files changed, 21 insertions(+), 21 deletions(-) rename module/Entra/AdditionalFunctions/{Add-EntraScopedRoleMembership.ps1 => New-EntraScopedRoleMembership.ps1} (98%) rename module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/{Add-EntraScopedRoleMembership.md => New-EntraScopedRoleMembership.md} (90%) rename test/module/Entra/{Add-EntraScopedRoleMembership.Tests.ps1 => New-EntraScopedRoleMembership.Tests.ps1} (83%) diff --git a/module/Entra/AdditionalFunctions/Add-EntraScopedRoleMembership.ps1 b/module/Entra/AdditionalFunctions/New-EntraScopedRoleMembership.ps1 similarity index 98% rename from module/Entra/AdditionalFunctions/Add-EntraScopedRoleMembership.ps1 rename to module/Entra/AdditionalFunctions/New-EntraScopedRoleMembership.ps1 index 1b0b769be7..f813efa051 100644 --- a/module/Entra/AdditionalFunctions/Add-EntraScopedRoleMembership.ps1 +++ b/module/Entra/AdditionalFunctions/New-EntraScopedRoleMembership.ps1 @@ -1,7 +1,7 @@ # ------------------------------------------------------------------------------ # Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License in the project root for license information. # ------------------------------------------------------------------------------ -function Add-EntraScopedRoleMembership { +function New-EntraScopedRoleMembership { [CmdletBinding(DefaultParameterSetName = 'InvokeByDynamicParameters')] param ( [Alias("ObjectId")] diff --git a/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Get-EntraScopedRoleMembership.md b/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Get-EntraScopedRoleMembership.md index 393349ba13..9976e46b49 100644 --- a/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Get-EntraScopedRoleMembership.md +++ b/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Get-EntraScopedRoleMembership.md @@ -138,6 +138,6 @@ This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVar ## Related Links -[Add-EntraScopedRoleMembership](Add-EntraScopedRoleMembership.md) +[New-EntraScopedRoleMembership](New-EntraScopedRoleMembership.md) [Remove-EntraScopedRoleMembership](Remove-EntraScopedRoleMembership.md) diff --git a/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Add-EntraScopedRoleMembership.md b/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/New-EntraScopedRoleMembership.md similarity index 90% rename from module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Add-EntraScopedRoleMembership.md rename to module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/New-EntraScopedRoleMembership.md index bba71d44a5..8cef488d0f 100644 --- a/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Add-EntraScopedRoleMembership.md +++ b/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/New-EntraScopedRoleMembership.md @@ -1,6 +1,6 @@ --- -title: Add-EntraScopedRoleMembership -description: This article provides details on the Add-EntraScopedRoleMembership command. +title: New-EntraScopedRoleMembership +description: This article provides details on the New-EntraScopedRoleMembership command. ms.topic: reference ms.date: 06/26/2024 @@ -10,12 +10,12 @@ manager: CelesteDG external help file: Microsoft.Graph.Entra-Help.xml Module Name: Microsoft.Graph.Entra -online version: https://learn.microsoft.com/powershell/module/Microsoft.Graph.Entra/Add-EntraScopedRoleMembership +online version: https://learn.microsoft.com/powershell/module/Microsoft.Graph.Entra/New-EntraScopedRoleMembership schema: 2.0.0 --- -# Add-EntraScopedRoleMembership +# New-EntraScopedRoleMembership ## Synopsis @@ -24,7 +24,7 @@ Assign a Microsoft Entra role with an administrative unit scope. ## Syntax ```powershell -Add-EntraScopedRoleMembership +New-EntraScopedRoleMembership -AdministrativeUnitId [-RoleObjectId ] [-RoleMemberInfo ] @@ -33,7 +33,7 @@ Add-EntraScopedRoleMembership ## Description -The `Add-EntraScopedRoleMembership` cmdlet adds a scoped role membership to an administrative unit. Specify `AdministrativeUnitId` parameter to add a scoped role membership. +The `New-EntraScopedRoleMembership` cmdlet adds a scoped role membership to an administrative unit. Specify `AdministrativeUnitId` parameter to add a scoped role membership. For delegated scenarios, the calling user needs at least the Privileged Role Administrator Microsoft Entra role. @@ -48,7 +48,7 @@ $role = Get-EntraDirectoryRole -Filter "DisplayName eq 'Helpdesk Administrator'" $administrativeUnit = Get-EntraAdministrativeUnit -Filter "DisplayName eq 'Pacific Administrative Unit'" $roleMember = New-Object -TypeName Microsoft.Open.MSGraph.Model.MsRoleMemberInfo $roleMember.Id = $user.Id -Add-EntraScopedRoleMembership -AdministrativeUnitId $administrativeUnit.Id -RoleObjectId $role.Id -RoleMemberInfo $roleMember +New-EntraScopedRoleMembership -AdministrativeUnitId $administrativeUnit.Id -RoleObjectId $role.Id -RoleMemberInfo $roleMember ``` ```Output diff --git a/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Remove-EntraScopedRoleMembership.md b/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Remove-EntraScopedRoleMembership.md index 194f322b7c..0d18bf69ba 100644 --- a/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Remove-EntraScopedRoleMembership.md +++ b/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Remove-EntraScopedRoleMembership.md @@ -99,6 +99,6 @@ This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVar ## Related Links -[Add-EntraScopedRoleMembership](Add-EntraScopedRoleMembership.md) +[New-EntraScopedRoleMembership](New-EntraScopedRoleMembership.md) [Get-EntraScopedRoleMembership](Get-EntraScopedRoleMembership.md) diff --git a/test/module/Entra/Add-EntraScopedRoleMembership.Tests.ps1 b/test/module/Entra/New-EntraScopedRoleMembership.Tests.ps1 similarity index 83% rename from test/module/Entra/Add-EntraScopedRoleMembership.Tests.ps1 rename to test/module/Entra/New-EntraScopedRoleMembership.Tests.ps1 index 0a57839a91..ced8c766c8 100644 --- a/test/module/Entra/Add-EntraScopedRoleMembership.Tests.ps1 +++ b/test/module/Entra/New-EntraScopedRoleMembership.Tests.ps1 @@ -31,37 +31,37 @@ BeforeAll{ Mock -CommandName Invoke-GraphRequest -MockWith $scriptblock -ModuleName Microsoft.Graph.Entra } -Describe "Tests for Add-EntraScopedRoleMembership"{ +Describe "Tests for New-EntraScopedRoleMembership"{ It "Result should not be empty"{ - $result = Add-EntraScopedRoleMembership -AdministrativeUnitId $unitObjId -RoleObjectId $roleObjId -RoleMemberInfo $RoleMember + $result = New-EntraScopedRoleMembership -AdministrativeUnitId $unitObjId -RoleObjectId $roleObjId -RoleMemberInfo $RoleMember $result | Should -Not -BeNullOrEmpty $result.Id | should -Be @('NewDummyId') Should -Invoke -CommandName Invoke-GraphRequest -ModuleName Microsoft.Graph.Entra -Times 1 } It "Result should not be empty with ObjectId"{ - $result = Add-EntraScopedRoleMembership -ObjectId $unitObjId -RoleObjectId $roleObjId -RoleMemberInfo $RoleMember + $result = New-EntraScopedRoleMembership -ObjectId $unitObjId -RoleObjectId $roleObjId -RoleMemberInfo $RoleMember $result | Should -Not -BeNullOrEmpty $result.Id | should -Be @('NewDummyId') Should -Invoke -CommandName Invoke-GraphRequest -ModuleName Microsoft.Graph.Entra -Times 1 } It "Should fail when AdministrativeUnitId is invalid" { - { Add-EntraScopedRoleMembership -AdministrativeUnitId "" } | Should -Throw "Cannot bind argument to parameter 'AdministrativeUnitId'*" + { New-EntraScopedRoleMembership -AdministrativeUnitId "" } | Should -Throw "Cannot bind argument to parameter 'AdministrativeUnitId'*" } It "Should fail when AdministrativeUnitId is empty" { - { Add-EntraScopedRoleMembership -AdministrativeUnitId } | Should -Throw "Missing an argument for parameter 'AdministrativeUnitId'*" + { New-EntraScopedRoleMembership -AdministrativeUnitId } | Should -Throw "Missing an argument for parameter 'AdministrativeUnitId'*" } It "Should fail when RoleMemberInfo is invalid" { - { Add-EntraScopedRoleMembership -RoleMemberInfo "" } | Should -Throw "Cannot process argument transformation on parameter 'RoleMemberInfo'*" + { New-EntraScopedRoleMembership -RoleMemberInfo "" } | Should -Throw "Cannot process argument transformation on parameter 'RoleMemberInfo'*" } It "Should fail when RoleMemberInfo is empty" { - { Add-EntraScopedRoleMembership -RoleMemberInfo } | Should -Throw "Missing an argument for parameter 'RoleMemberInfo'*" + { New-EntraScopedRoleMembership -RoleMemberInfo } | Should -Throw "Missing an argument for parameter 'RoleMemberInfo'*" } It "Should fail when invalid parameter is passed" { - { Add-EntraScopedRoleMembership -xyz } | Should -Throw "A parameter cannot be found that matches parameter name 'xyz'*" + { New-EntraScopedRoleMembership -xyz } | Should -Throw "A parameter cannot be found that matches parameter name 'xyz'*" } It "Should contain 'User-Agent' header" { - $userAgentHeaderValue = "PowerShell/$psVersion EntraPowershell/$entraVersion Add-EntraScopedRoleMembership" - $result = Add-EntraScopedRoleMembership -AdministrativeUnitId $unitObjId -RoleObjectId $roleObjId -RoleMemberInfo $RoleMember + $userAgentHeaderValue = "PowerShell/$psVersion EntraPowershell/$entraVersion New-EntraScopedRoleMembership" + $result = New-EntraScopedRoleMembership -AdministrativeUnitId $unitObjId -RoleObjectId $roleObjId -RoleMemberInfo $RoleMember $params = Get-Parameters -data $result.Parameters $a= $params | ConvertTo-json | ConvertFrom-Json $a.headers.'User-Agent' | Should -Be $userAgentHeaderValue @@ -73,7 +73,7 @@ Describe "Tests for Add-EntraScopedRoleMembership"{ try { # Act & Assert: Ensure the function doesn't throw an exception - { Add-EntraScopedRoleMembership -AdministrativeUnitId $unitObjId -RoleObjectId $roleObjId -RoleMemberInfo $RoleMember -Debug } | Should -Not -Throw + { New-EntraScopedRoleMembership -AdministrativeUnitId $unitObjId -RoleObjectId $roleObjId -RoleMemberInfo $RoleMember -Debug } | Should -Not -Throw } finally { # Restore original confirmation preference $DebugPreference = $originalDebugPreference From 855abec9aea24bb8ca5a2add9dbf1e108c58a412 Mon Sep 17 00:00:00 2001 From: Steve Mutungi <132555836+SteveMutungi254@users.noreply.github.com> Date: Wed, 13 Nov 2024 09:40:20 +0300 Subject: [PATCH 02/11] Adding aliases --- src/EntraAliasDefinitions.ps1 | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/EntraAliasDefinitions.ps1 b/src/EntraAliasDefinitions.ps1 index 975500aafe..9969c0dd97 100644 --- a/src/EntraAliasDefinitions.ps1 +++ b/src/EntraAliasDefinitions.ps1 @@ -1,16 +1,18 @@ - Set-Alias -Name Connect-AzureAD -Value Connect-Entra -Scope Global -Force - Set-Alias -Name Disconnect-AzureAD -Value Disconnect-Entra -Scope Global -Force - Set-Alias -Name Remove-EntraRoleAssignment -Value Remove-EntraDirectoryRoleAssignment -Scope Global -Force - Set-Alias -Name Get-EntraRoleAssignment -Value Get-EntraDirectoryRoleAssignment -Scope Global -Force - Set-Alias -Name New-EntraRoleAssignment -Value New-EntraDirectoryRoleAssignment -Scope Global -Force - Set-Alias -Name Set-EntraRoleDefinition -Value Set-EntraDirectoryRoleDefinition -Scope Global -Force - Set-Alias -Name Get-EntraRoleDefinition -Value Get-EntraDirectoryRoleDefinition -Scope Global -Force - Set-Alias -Name Remove-EntraRoleDefinition -Value Remove-EntraDirectoryRoleDefinition -Scope Global -Force - Set-Alias -Name New-EntraRoleDefinition -Value New-EntraDirectoryRoleDefinition -Scope Global -Force - Set-Alias -Name Get-EntraServiceAppRoleAssignedTo -Value Get-EntraServicePrincipalAppRoleAssignedTo -Scope Global -Force - Set-Alias -Name Remove-EntraServiceAppRoleAssignment -Value Remove-EntraServicePrincipalAppRoleAssignment -Scope Global -Force - Set-Alias -Name Get-EntraServiceAppRoleAssignment -Value Get-EntraServicePrincipalAppRoleAssignment -Scope Global -Force - Set-Alias -Name New-EntraServiceAppRoleAssignment -Value New-EntraServicePrincipalAppRoleAssignment -Scope Global -Force - Set-Alias -Name Add-EntraCustomSecurityAttributeDefinitionAllowedValues -Value Add-EntraCustomSecurityAttributeDefinitionAllowedValue -Scope Global -Force - Set-Alias -Name Get-EntraAuditDirectoryLogs -Value Get-EntraAuditDirectoryLog -Scope Global -Force - Set-Alias -Name Get-EntraAuditSignInLogs -Value Get-EntraAuditSignInLog -Scope Global -Force +Set-Alias -Name Connect-AzureAD -Value Connect-Entra -Scope Global -Force +Set-Alias -Name Disconnect-AzureAD -Value Disconnect-Entra -Scope Global -Force +Set-Alias -Name Remove-EntraRoleAssignment -Value Remove-EntraDirectoryRoleAssignment -Scope Global -Force +Set-Alias -Name Get-EntraRoleAssignment -Value Get-EntraDirectoryRoleAssignment -Scope Global -Force +Set-Alias -Name New-EntraRoleAssignment -Value New-EntraDirectoryRoleAssignment -Scope Global -Force +Set-Alias -Name Set-EntraRoleDefinition -Value Set-EntraDirectoryRoleDefinition -Scope Global -Force +Set-Alias -Name Get-EntraRoleDefinition -Value Get-EntraDirectoryRoleDefinition -Scope Global -Force +Set-Alias -Name Remove-EntraRoleDefinition -Value Remove-EntraDirectoryRoleDefinition -Scope Global -Force +Set-Alias -Name New-EntraRoleDefinition -Value New-EntraDirectoryRoleDefinition -Scope Global -Force +Set-Alias -Name Get-EntraServiceAppRoleAssignedTo -Value Get-EntraServicePrincipalAppRoleAssignedTo -Scope Global -Force +Set-Alias -Name Remove-EntraServiceAppRoleAssignment -Value Remove-EntraServicePrincipalAppRoleAssignment -Scope Global -Force +Set-Alias -Name Get-EntraServiceAppRoleAssignment -Value Get-EntraServicePrincipalAppRoleAssignment -Scope Global -Force +Set-Alias -Name New-EntraServiceAppRoleAssignment -Value New-EntraServicePrincipalAppRoleAssignment -Scope Global -Force +Set-Alias -Name Add-EntraCustomSecurityAttributeDefinitionAllowedValues -Value Add-EntraCustomSecurityAttributeDefinitionAllowedValue -Scope Global -Force +Set-Alias -Name Get-EntraAuditDirectoryLogs -Value Get-EntraAuditDirectoryLog -Scope Global -Force +Set-Alias -Name Get-EntraAuditSignInLogs -Value Get-EntraAuditSignInLog -Scope Global -Force +Set-Alias -Name Add-EntraScopedRoleMembership -Value New-EntraScopedRoleMembership -Scope Global -Force +Set-Alias -Name New-EntraScopedRoleMemberOf -Value New-EntraScopedRoleMembership -Scope Global -Force \ No newline at end of file From fb780d227a4a54e704f8c03c579d39cb14d2b0e1 Mon Sep 17 00:00:00 2001 From: Steve Mutungi <132555836+SteveMutungi254@users.noreply.github.com> Date: Wed, 13 Nov 2024 09:43:31 +0300 Subject: [PATCH 03/11] Updating toc entry for new command --- module/docs/entra-powershell-v1.0/toc.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/docs/entra-powershell-v1.0/toc.yml b/module/docs/entra-powershell-v1.0/toc.yml index bef47c3ec6..4c2570f49c 100644 --- a/module/docs/entra-powershell-v1.0/toc.yml +++ b/module/docs/entra-powershell-v1.0/toc.yml @@ -20,8 +20,8 @@ href: Microsoft.Graph.Entra/Add-EntraApplicationOwner.md - name: Add-EntraLifecyclePolicyGroup href: Microsoft.Graph.Entra/Add-EntraLifecyclePolicyGroup.md - - name: Add-EntraScopedRoleMembership - href: Microsoft.Graph.Entra/Add-EntraScopedRoleMembership.md + - name: New-EntraScopedRoleMembership + href: Microsoft.Graph.Entra/New-EntraScopedRoleMembership.md - name: Add-EntraServicePrincipalOwner href: Microsoft.Graph.Entra/Add-EntraServicePrincipalOwner.md - name: Confirm-EntraDomain From dc1237dcadd52342871671c7656fc0febccd7784 Mon Sep 17 00:00:00 2001 From: Steve Mutungi <132555836+SteveMutungi254@users.noreply.github.com> Date: Wed, 13 Nov 2024 10:05:04 +0300 Subject: [PATCH 04/11] Minor update on the role --- .../Microsoft.Graph.Entra/New-EntraScopedRoleMembership.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/New-EntraScopedRoleMembership.md b/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/New-EntraScopedRoleMembership.md index 8cef488d0f..1badb089be 100644 --- a/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/New-EntraScopedRoleMembership.md +++ b/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/New-EntraScopedRoleMembership.md @@ -35,7 +35,9 @@ New-EntraScopedRoleMembership The `New-EntraScopedRoleMembership` cmdlet adds a scoped role membership to an administrative unit. Specify `AdministrativeUnitId` parameter to add a scoped role membership. -For delegated scenarios, the calling user needs at least the Privileged Role Administrator Microsoft Entra role. +In delegated scenarios, the signed-in user must have either a supported Microsoft Entra role or a custom role with the necessary permissions. The minimum roles required for this operation are: + +- Privileged Role Administrator ## Examples From a739014122cbf20b9dee28a70248fba525f9bcc8 Mon Sep 17 00:00:00 2001 From: Steve Mutungi <132555836+SteveMutungi254@users.noreply.github.com> Date: Wed, 13 Nov 2024 10:26:59 +0300 Subject: [PATCH 05/11] Adding help message --- .../Entra/AdditionalFunctions/New-EntraScopedRoleMembership.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/Entra/AdditionalFunctions/New-EntraScopedRoleMembership.ps1 b/module/Entra/AdditionalFunctions/New-EntraScopedRoleMembership.ps1 index f813efa051..5df602ad96 100644 --- a/module/Entra/AdditionalFunctions/New-EntraScopedRoleMembership.ps1 +++ b/module/Entra/AdditionalFunctions/New-EntraScopedRoleMembership.ps1 @@ -5,7 +5,7 @@ function New-EntraScopedRoleMembership { [CmdletBinding(DefaultParameterSetName = 'InvokeByDynamicParameters')] param ( [Alias("ObjectId")] - [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] + [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, HelpMessage = "The Unique ID of the administrative unit.")] [System.String] $AdministrativeUnitId, [Parameter(ParameterSetName = "InvokeByDynamicParameters")] [System.String] $RoleObjectId, From bda498731d51a5431cd20d6ee71b3cfed02cee31 Mon Sep 17 00:00:00 2001 From: Steve Mutungi <132555836+SteveMutungi254@users.noreply.github.com> Date: Wed, 13 Nov 2024 10:36:17 +0300 Subject: [PATCH 06/11] Adding New-EntraBetaScopedRoleMembership cmdlet --- ... => New-EntraBetaScopedRoleMembership.ps1} | 0 .../Get-EntraBetaScopedRoleMembership.md | 2 +- ...d => New-EntraBetaScopedRoleMembership.md} | 18 +++++---- .../Remove-EntraBetaScopedRoleMembership.md | 2 +- module/docs/entra-powershell-beta/toc.yml | 6 +-- ...w-EntraBetaScopedRoleMembership.Tests.ps1} | 37 +++++++++---------- 6 files changed, 32 insertions(+), 33 deletions(-) rename module/EntraBeta/customizations/{Add-EntraBetaScopedRoleMembership.ps1 => New-EntraBetaScopedRoleMembership.ps1} (100%) rename module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/{Add-EntraBetaScopedRoleMembership.md => New-EntraBetaScopedRoleMembership.md} (84%) rename test/module/EntraBeta/{Add-EntraBetaScopedRoleMembership.Tests.ps1 => New-EntraBetaScopedRoleMembership.Tests.ps1} (86%) diff --git a/module/EntraBeta/customizations/Add-EntraBetaScopedRoleMembership.ps1 b/module/EntraBeta/customizations/New-EntraBetaScopedRoleMembership.ps1 similarity index 100% rename from module/EntraBeta/customizations/Add-EntraBetaScopedRoleMembership.ps1 rename to module/EntraBeta/customizations/New-EntraBetaScopedRoleMembership.ps1 diff --git a/module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/Get-EntraBetaScopedRoleMembership.md b/module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/Get-EntraBetaScopedRoleMembership.md index 7512efebe2..d9b62e763a 100644 --- a/module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/Get-EntraBetaScopedRoleMembership.md +++ b/module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/Get-EntraBetaScopedRoleMembership.md @@ -140,6 +140,6 @@ This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVar ## Related Links -[Add-EntraBetaScopedRoleMembership](Add-EntraBetaScopedRoleMembership.md) +[New-EntraBetaScopedRoleMembership](New-EntraBetaScopedRoleMembership.md) [Remove-EntraBetaScopedRoleMembership](Remove-EntraBetaScopedRoleMembership.md) diff --git a/module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/Add-EntraBetaScopedRoleMembership.md b/module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/New-EntraBetaScopedRoleMembership.md similarity index 84% rename from module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/Add-EntraBetaScopedRoleMembership.md rename to module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/New-EntraBetaScopedRoleMembership.md index aa2665af87..b7fd2b432e 100644 --- a/module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/Add-EntraBetaScopedRoleMembership.md +++ b/module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/New-EntraBetaScopedRoleMembership.md @@ -1,6 +1,6 @@ --- -title: Add-EntraBetaScopedRoleMembership -description: This article provides details on the Add-EntraBetaScopedRoleMembership command. +title: New-EntraBetaScopedRoleMembership +description: This article provides details on the New-EntraBetaScopedRoleMembership command. ms.topic: reference @@ -12,12 +12,12 @@ author: msewaweru external help file: Microsoft.Graph.Entra.Beta-Help.xml Module Name: Microsoft.Graph.Entra.Beta -online version: https://learn.microsoft.com/powershell/module/Microsoft.Graph.Entra.Beta/Add-EntraBetaScopedRoleMembership +online version: https://learn.microsoft.com/powershell/module/Microsoft.Graph.Entra.Beta/New-EntraBetaScopedRoleMembership schema: 2.0.0 --- -# Add-EntraBetaScopedRoleMembership +# New-EntraBetaScopedRoleMembership ## Synopsis @@ -26,7 +26,7 @@ Assign a Microsoft Entra role with an administrative unit scope. ## Syntax ```powershell -Add-EntraBetaScopedRoleMembership +New-EntraBetaScopedRoleMembership -AdministrativeUnitId [-RoleMemberInfo ] [-RoleObjectId ] @@ -35,9 +35,11 @@ Add-EntraBetaScopedRoleMembership ## Description -The `Add-EntraBetaScopedRoleMembership` cmdlet adds a scoped role membership to an administrative unit. Specify `AdministrativeUnitId` parameter to add a scoped role membership. +The `New-EntraBetaScopedRoleMembership` cmdlet adds a scoped role membership to an administrative unit. Specify `AdministrativeUnitId` parameter to add a scoped role membership. -For delegated scenarios, the calling user needs at least the Privileged Role Administrator Microsoft Entra role. +In delegated scenarios, the signed-in user must have either a supported Microsoft Entra role or a custom role with the necessary permissions. The minimum roles required for this operation are: + +- Privileged Role Administrator ## Examples @@ -50,7 +52,7 @@ $role = Get-EntraBetaDirectoryRole -Filter "DisplayName eq 'Helpdesk Administrat $administrativeUnit = Get-EntraBetaAdministrativeUnit -Filter "DisplayName eq 'Pacific Administrative Unit'" $roleMember = New-Object -TypeName Microsoft.Open.MSGraph.Model.MsRoleMemberInfo $roleMember.Id = $user.Id -Add-EntraBetaScopedRoleMembership -AdministrativeUnitId $administrativeUnit.Id -RoleObjectId $role.Id -RoleMemberInfo $roleMember +New-EntraBetaScopedRoleMembership -AdministrativeUnitId $administrativeUnit.Id -RoleObjectId $role.Id -RoleMemberInfo $roleMember ``` ```Output diff --git a/module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/Remove-EntraBetaScopedRoleMembership.md b/module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/Remove-EntraBetaScopedRoleMembership.md index 99075c6517..2b41449677 100644 --- a/module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/Remove-EntraBetaScopedRoleMembership.md +++ b/module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/Remove-EntraBetaScopedRoleMembership.md @@ -99,6 +99,6 @@ This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVar ## Related Links -[Add-EntraBetaScopedRoleMembership](Add-EntraBetaScopedRoleMembership.md) +[New-EntraBetaScopedRoleMembership](New-EntraBetaScopedRoleMembership.md) [Get-EntraBetaScopedRoleMembership](Get-EntraBetaScopedRoleMembership.md) diff --git a/module/docs/entra-powershell-beta/toc.yml b/module/docs/entra-powershell-beta/toc.yml index 8c98b9177b..7cb7c398ef 100644 --- a/module/docs/entra-powershell-beta/toc.yml +++ b/module/docs/entra-powershell-beta/toc.yml @@ -28,12 +28,10 @@ href: Microsoft.Graph.Entra.Beta/Add-EntraBetaFeatureRolloutPolicyDirectoryObject.md - name: Add-EntraBetaLifecyclePolicyGroup href: Microsoft.Graph.Entra.Beta/Add-EntraBetaLifecyclePolicyGroup.md - - name: Add-EntraBetaScopedRoleMembership - href: Microsoft.Graph.Entra.Beta/Add-EntraBetaScopedRoleMembership.md + - name: New-EntraBetaScopedRoleMembership + href: Microsoft.Graph.Entra.Beta/New-EntraBetaScopedRoleMembership.md - name: Add-EntraBetaServicePrincipalDelegatedPermissionClassification href: Microsoft.Graph.Entra.Beta/Add-EntraBetaServicePrincipalDelegatedPermissionClassification.md - - name: Add-EntraBetaScopedRoleMembership - href: Microsoft.Graph.Entra.Beta/Add-EntraBetaScopedRoleMembership.md - name: Add-EntraBetaServicePrincipalOwner href: Microsoft.Graph.Entra.Beta/Add-EntraBetaServicePrincipalOwner.md - name: Add-EntraBetaServicePrincipalPolicy diff --git a/test/module/EntraBeta/Add-EntraBetaScopedRoleMembership.Tests.ps1 b/test/module/EntraBeta/New-EntraBetaScopedRoleMembership.Tests.ps1 similarity index 86% rename from test/module/EntraBeta/Add-EntraBetaScopedRoleMembership.Tests.ps1 rename to test/module/EntraBeta/New-EntraBetaScopedRoleMembership.Tests.ps1 index 9f3bb53706..f6604b3d1e 100644 --- a/test/module/EntraBeta/Add-EntraBetaScopedRoleMembership.Tests.ps1 +++ b/test/module/EntraBeta/New-EntraBetaScopedRoleMembership.Tests.ps1 @@ -28,12 +28,12 @@ BeforeAll { Mock -CommandName New-MgBetaDirectoryAdministrativeUnitScopedRoleMember -MockWith $scriptblock -ModuleName Microsoft.Graph.Entra.Beta } -Describe "Add-EntraBetaScopedRoleMembership" { - Context "Test for Add-EntraBetaScopedRoleMembership" { +Describe "New-EntraBetaScopedRoleMembership" { + Context "Test for New-EntraBetaScopedRoleMembership" { It "Should add a user to the specified role within the specified administrative unit" { $RoleMember = New-Object -TypeName Microsoft.Open.MSGraph.Model.MsRoleMemberInfo $RoleMember.Id = "a23541ee-4fe9-4cf2-b628-102ebaef8f7e" - $result = Add-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleObjectId "135c35cd-85c2-4543-b86c-8f6dbedea4cf" -RoleMemberInfo $RoleMember + $result = New-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleObjectId "135c35cd-85c2-4543-b86c-8f6dbedea4cf" -RoleMemberInfo $RoleMember $result | Should -Not -BeNullOrEmpty $result.Id | Should -Be "zTVcE8KFQ0W4bI9tvt6kz-5AOA62QHJLgnvAbh9Z0r7uQTWi6U_yTLYoEC66749-U" $result.RoleId | Should -Be "cccccccc-85c2-4543-b86c-cccccccccccc" @@ -44,7 +44,7 @@ Describe "Add-EntraBetaScopedRoleMembership" { It "Should add a user to the specified role within the specified administrative unit with alias" { $RoleMember = New-Object -TypeName Microsoft.Open.MSGraph.Model.MsRoleMemberInfo $RoleMember.Id = "a23541ee-4fe9-4cf2-b628-102ebaef8f7e" - $result = Add-EntraBetaScopedRoleMembership -ObjectId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleObjectId "135c35cd-85c2-4543-b86c-8f6dbedea4cf" -RoleMemberInfo $RoleMember + $result = New-EntraBetaScopedRoleMembership -ObjectId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleObjectId "135c35cd-85c2-4543-b86c-8f6dbedea4cf" -RoleMemberInfo $RoleMember $result | Should -Not -BeNullOrEmpty $result.Id | Should -Be "zTVcE8KFQ0W4bI9tvt6kz-5AOA62QHJLgnvAbh9Z0r7uQTWi6U_yTLYoEC66749-U" $result.RoleId | Should -Be "cccccccc-85c2-4543-b86c-cccccccccccc" @@ -53,40 +53,40 @@ Describe "Add-EntraBetaScopedRoleMembership" { Should -Invoke -CommandName New-MgBetaDirectoryAdministrativeUnitScopedRoleMember -ModuleName Microsoft.Graph.Entra.Beta -Times 1 } It "Should fail when AdministrativeUnitId is empty" { - { Add-EntraBetaScopedRoleMembership -AdministrativeUnitId } | Should -Throw "Missing an argument for parameter 'AdministrativeUnitId'*" + { New-EntraBetaScopedRoleMembership -AdministrativeUnitId } | Should -Throw "Missing an argument for parameter 'AdministrativeUnitId'*" } It "Should fail when AdministrativeUnitId is invalid" { - { Add-EntraBetaScopedRoleMembership -AdministrativeUnitId "" } | Should -Throw "Cannot bind argument to parameter 'AdministrativeUnitId' because it is an empty string." + { New-EntraBetaScopedRoleMembership -AdministrativeUnitId "" } | Should -Throw "Cannot bind argument to parameter 'AdministrativeUnitId' because it is an empty string." } It "Should fail when RoleAdministrativeUnitId is empty" { - { Add-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleObjectId } | Should -Throw "Missing an argument for parameter 'RoleObjectId'*" + { New-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleObjectId } | Should -Throw "Missing an argument for parameter 'RoleObjectId'*" } It "Should fail when AdministrativeUnitObjectId is empty" { - { Add-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -AdministrativeUnitObjectId } | Should -Throw "Missing an argument for parameter 'AdministrativeUnitObjectId'*" + { New-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -AdministrativeUnitObjectId } | Should -Throw "Missing an argument for parameter 'AdministrativeUnitObjectId'*" } It "Should fail when RoleMemberInfo is empty" { - { Add-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleMemberInfo } | Should -Throw "Missing an argument for parameter 'RoleMemberInfo'*" + { New-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleMemberInfo } | Should -Throw "Missing an argument for parameter 'RoleMemberInfo'*" } It "Should fail when RoleMemberInfo is invalid" { - { Add-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleMemberInfo "" } | Should -Throw "Cannot process argument transformation on parameter 'RoleMemberInfo'*" + { New-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleMemberInfo "" } | Should -Throw "Cannot process argument transformation on parameter 'RoleMemberInfo'*" } It "Result should contain Alias properties"{ $RoleMember = New-Object -TypeName Microsoft.Open.MSGraph.Model.MsRoleMemberInfo $RoleMember.Id = "a23541ee-4fe9-4cf2-b628-102ebaef8f7e" - $result = Add-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleObjectId "135c35cd-85c2-4543-b86c-8f6dbedea4cf" -RoleMemberInfo $RoleMember + $result = New-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleObjectId "135c35cd-85c2-4543-b86c-8f6dbedea4cf" -RoleMemberInfo $RoleMember $result.ObjectId | should -Be "zTVcE8KFQ0W4bI9tvt6kz-5AOA62QHJLgnvAbh9Z0r7uQTWi6U_yTLYoEC66749-U" $result.RoleObjectId | should -Be "cccccccc-85c2-4543-b86c-cccccccccccc" $result.AdministrativeUnitObjectId | should -Be "dddddddd-7902-4be2-a25b-dddddddddddd" } It "Should contain AdministrativeUnitId in parameters when passed AdministrativeUnitId to it" { - $result = Add-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleObjectId "135c35cd-85c2-4543-b86c-8f6dbedea4cf" + $result = New-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleObjectId "135c35cd-85c2-4543-b86c-8f6dbedea4cf" $params = Get-Parameters -data $result.Parameters $params.AdministrativeUnitId | Should -Be "0e3840ee-40b6-4b72-827b-c06e1f59d2be" } It "Should contain AdministrativeUnitId1 in parameters when passed AdministrativeUnitObjectId to it" { - $result = Add-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -AdministrativeUnitObjectId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleObjectId "135c35cd-85c2-4543-b86c-8f6dbedea4cf" + $result = New-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -AdministrativeUnitObjectId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleObjectId "135c35cd-85c2-4543-b86c-8f6dbedea4cf" $params = Get-Parameters -data $result.Parameters $params.AdministrativeUnitId1 | Should -Be "0e3840ee-40b6-4b72-827b-c06e1f59d2be" } @@ -94,19 +94,18 @@ Describe "Add-EntraBetaScopedRoleMembership" { $RoleMember = New-Object -TypeName Microsoft.Open.MSGraph.Model.MsRoleMemberInfo $RoleMember.Id = "a23541ee-4fe9-4cf2-b628-102ebaef8f7e" - $result = Add-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleObjectId "135c35cd-85c2-4543-b86c-8f6dbedea4cf" -RoleMemberInfo $RoleMember + $result = New-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleObjectId "135c35cd-85c2-4543-b86c-8f6dbedea4cf" -RoleMemberInfo $RoleMember $params = Get-Parameters -data $result.Parameters $params.RoleId | Should -Be "135c35cd-85c2-4543-b86c-8f6dbedea4cf" } It "Should contain 'User-Agent' header" { - $userAgentHeaderValue = "PowerShell/$psVersion EntraPowershell/$entraVersion Add-EntraBetaScopedRoleMembership" - $userAgentHeaderValue = "PowerShell/$psVersion EntraPowershell/$entraVersion Add-EntraBetaScopedRoleMembership" + $userAgentHeaderValue = "PowerShell/$psVersion EntraPowershell/$entraVersion New-EntraBetaScopedRoleMembership" $RoleMember = New-Object -TypeName Microsoft.Open.MSGraph.Model.MsRoleMemberInfo $RoleMember.Id = "a23541ee-4fe9-4cf2-b628-102ebaef8f7e" - Add-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleObjectId "135c35cd-85c2-4543-b86c-8f6dbedea4cf" -RoleMemberInfo $RoleMember + New-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleObjectId "135c35cd-85c2-4543-b86c-8f6dbedea4cf" -RoleMemberInfo $RoleMember - $userAgentHeaderValue = "PowerShell/$psVersion EntraPowershell/$entraVersion Add-EntraBetaScopedRoleMembership" + $userAgentHeaderValue = "PowerShell/$psVersion EntraPowershell/$entraVersion New-EntraBetaScopedRoleMembership" Should -Invoke -CommandName New-MgBetaDirectoryAdministrativeUnitScopedRoleMember -ModuleName Microsoft.Graph.Entra.Beta -Times 1 -ParameterFilter { $Headers.'User-Agent' | Should -Be $userAgentHeaderValue @@ -120,7 +119,7 @@ Describe "Add-EntraBetaScopedRoleMembership" { try { # Act & Assert: Ensure the function doesn't throw an exception - { Add-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleObjectId "135c35cd-85c2-4543-b86c-8f6dbedea4cf" -Debug } | Should -Not -Throw + { New-EntraBetaScopedRoleMembership -AdministrativeUnitId "0e3840ee-40b6-4b72-827b-c06e1f59d2be" -RoleObjectId "135c35cd-85c2-4543-b86c-8f6dbedea4cf" -Debug } | Should -Not -Throw } finally { # Restore original confirmation preference $DebugPreference = $originalDebugPreference From 6a06e74fc7bc7d088bb63ad2575c1cc3606845ad Mon Sep 17 00:00:00 2001 From: Steve Mutungi <132555836+SteveMutungi254@users.noreply.github.com> Date: Wed, 13 Nov 2024 10:52:14 +0300 Subject: [PATCH 07/11] Updating aliases --- src/EntraAliasDefinitions.ps1 | 3 +-- src/EntraBetaAliasDefinitions.ps1 | 33 ++++++++++++++++--------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/EntraAliasDefinitions.ps1 b/src/EntraAliasDefinitions.ps1 index 9969c0dd97..46582b3ced 100644 --- a/src/EntraAliasDefinitions.ps1 +++ b/src/EntraAliasDefinitions.ps1 @@ -14,5 +14,4 @@ Set-Alias -Name New-EntraServiceAppRoleAssignment -Value New-EntraServicePrincip Set-Alias -Name Add-EntraCustomSecurityAttributeDefinitionAllowedValues -Value Add-EntraCustomSecurityAttributeDefinitionAllowedValue -Scope Global -Force Set-Alias -Name Get-EntraAuditDirectoryLogs -Value Get-EntraAuditDirectoryLog -Scope Global -Force Set-Alias -Name Get-EntraAuditSignInLogs -Value Get-EntraAuditSignInLog -Scope Global -Force -Set-Alias -Name Add-EntraScopedRoleMembership -Value New-EntraScopedRoleMembership -Scope Global -Force -Set-Alias -Name New-EntraScopedRoleMemberOf -Value New-EntraScopedRoleMembership -Scope Global -Force \ No newline at end of file +Set-Alias -Name Add-EntraScopedRoleMembership -Value New-EntraScopedRoleMembership -Scope Global -Force \ No newline at end of file diff --git a/src/EntraBetaAliasDefinitions.ps1 b/src/EntraBetaAliasDefinitions.ps1 index 97f8cf88a4..e185a54970 100644 --- a/src/EntraBetaAliasDefinitions.ps1 +++ b/src/EntraBetaAliasDefinitions.ps1 @@ -1,16 +1,17 @@ - Set-Alias -Name Connect-AzureAD -Value Connect-EntraBeta -Scope Global -Force - Set-Alias -Name Disconnect-AzureAD -Value Disconnect-EntraBeta -Scope Global -Force - Set-Alias -Name Remove-EntraBetaRoleAssignment -Value Remove-EntraBetaDirectoryRoleAssignment -Scope Global -Force - Set-Alias -Name Get-EntraBetaRoleAssignment -Value Get-EntraBetaDirectoryRoleAssignment -Scope Global -Force - Set-Alias -Name New-EntraBetaRoleAssignment -Value New-EntraBetaDirectoryRoleAssignment -Scope Global -Force - Set-Alias -Name Set-EntraBetaRoleDefinition -Value Set-EntraBetaDirectoryRoleDefinition -Scope Global -Force - Set-Alias -Name Get-EntraBetaRoleDefinition -Value Get-EntraBetaDirectoryRoleDefinition -Scope Global -Force - Set-Alias -Name Remove-EntraBetaRoleDefinition -Value Remove-EntraBetaDirectoryRoleDefinition -Scope Global -Force - Set-Alias -Name New-EntraBetaRoleDefinition -Value New-EntraBetaDirectoryRoleDefinition -Scope Global -Force - Set-Alias -Name Get-EntraBetaServiceAppRoleAssignedTo -Value Get-EntraBetaServicePrincipalAppRoleAssignedTo -Scope Global -Force - Set-Alias -Name Remove-EntraBetaServiceAppRoleAssignment -Value Remove-EntraBetaServicePrincipalAppRoleAssignment -Scope Global -Force - Set-Alias -Name Get-EntraBetaServiceAppRoleAssignment -Value Get-EntraBetaServicePrincipalAppRoleAssignment -Scope Global -Force - Set-Alias -Name New-EntraBetaServiceAppRoleAssignment -Value New-EntraBetaServicePrincipalAppRoleAssignment -Scope Global -Force - Set-Alias -Name Add-EntraBetaCustomSecurityAttributeDefinitionAllowedValues -Value Add-EntraBetaCustomSecurityAttributeDefinitionAllowedValue -Scope Global -Force - Set-Alias -Name Get-EntraBetaAuditDirectoryLogs -Value Get-EntraBetaAuditDirectoryLog -Scope Global -Force - Set-Alias -Name Get-EntraBetaAuditSignInLogs -Value Get-EntraBetaAuditSignInLog -Scope Global -Force +Set-Alias -Name Connect-AzureAD -Value Connect-EntraBeta -Scope Global -Force +Set-Alias -Name Disconnect-AzureAD -Value Disconnect-EntraBeta -Scope Global -Force +Set-Alias -Name Remove-EntraBetaRoleAssignment -Value Remove-EntraBetaDirectoryRoleAssignment -Scope Global -Force +Set-Alias -Name Get-EntraBetaRoleAssignment -Value Get-EntraBetaDirectoryRoleAssignment -Scope Global -Force +Set-Alias -Name New-EntraBetaRoleAssignment -Value New-EntraBetaDirectoryRoleAssignment -Scope Global -Force +Set-Alias -Name Set-EntraBetaRoleDefinition -Value Set-EntraBetaDirectoryRoleDefinition -Scope Global -Force +Set-Alias -Name Get-EntraBetaRoleDefinition -Value Get-EntraBetaDirectoryRoleDefinition -Scope Global -Force +Set-Alias -Name Remove-EntraBetaRoleDefinition -Value Remove-EntraBetaDirectoryRoleDefinition -Scope Global -Force +Set-Alias -Name New-EntraBetaRoleDefinition -Value New-EntraBetaDirectoryRoleDefinition -Scope Global -Force +Set-Alias -Name Get-EntraBetaServiceAppRoleAssignedTo -Value Get-EntraBetaServicePrincipalAppRoleAssignedTo -Scope Global -Force +Set-Alias -Name Remove-EntraBetaServiceAppRoleAssignment -Value Remove-EntraBetaServicePrincipalAppRoleAssignment -Scope Global -Force +Set-Alias -Name Get-EntraBetaServiceAppRoleAssignment -Value Get-EntraBetaServicePrincipalAppRoleAssignment -Scope Global -Force +Set-Alias -Name New-EntraBetaServiceAppRoleAssignment -Value New-EntraBetaServicePrincipalAppRoleAssignment -Scope Global -Force +Set-Alias -Name Add-EntraBetaCustomSecurityAttributeDefinitionAllowedValues -Value Add-EntraBetaCustomSecurityAttributeDefinitionAllowedValue -Scope Global -Force +Set-Alias -Name Get-EntraBetaAuditDirectoryLogs -Value Get-EntraBetaAuditDirectoryLog -Scope Global -Force +Set-Alias -Name Get-EntraBetaAuditSignInLogs -Value Get-EntraBetaAuditSignInLog -Scope Global -Force +Set-Alias -Name Add-EntraBetaScopedRoleMembership -Value New-EntraBetaScopedRoleMembership -Scope Global -Force From 903f9c1a8b3026257a9b0ecb25cf08438e2833f7 Mon Sep 17 00:00:00 2001 From: Steve Mutungi <132555836+SteveMutungi254@users.noreply.github.com> Date: Wed, 13 Nov 2024 10:55:27 +0300 Subject: [PATCH 08/11] Adding alias notes. --- .../New-EntraBetaScopedRoleMembership.md | 2 ++ .../Microsoft.Graph.Entra/New-EntraScopedRoleMembership.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/New-EntraBetaScopedRoleMembership.md b/module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/New-EntraBetaScopedRoleMembership.md index b7fd2b432e..2ce2da1faf 100644 --- a/module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/New-EntraBetaScopedRoleMembership.md +++ b/module/docs/entra-powershell-beta/Microsoft.Graph.Entra.Beta/New-EntraBetaScopedRoleMembership.md @@ -127,6 +127,8 @@ This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVar ## Notes +`Add-EntraBetaScopedRoleMembership` is an alias for `New-EntraBetaScopedRoleMembership`. + ## Related Links [Get-EntraBetaScopedRoleMembership](Get-EntraBetaScopedRoleMembership.md) diff --git a/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/New-EntraScopedRoleMembership.md b/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/New-EntraScopedRoleMembership.md index 1badb089be..38f944c8c0 100644 --- a/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/New-EntraScopedRoleMembership.md +++ b/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/New-EntraScopedRoleMembership.md @@ -125,6 +125,8 @@ This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVar ## Notes +`Add-EntraScopedRoleMembership` is an alias for `New-EntraScopedRoleMembership`. + ## Related Links [Get-EntraScopedRoleMembership](Get-EntraScopedRoleMembership.md) From 3240820e7e87b2504320b9964f29e2dc53c87357 Mon Sep 17 00:00:00 2001 From: Steve Mutungi <132555836+SteveMutungi254@users.noreply.github.com> Date: Wed, 13 Nov 2024 11:24:45 +0300 Subject: [PATCH 09/11] Renaming Add-EntraAdministrativeUnitMember to New-EntraAdministrativeUnitMember --- ... => New-EntraAdministrativeUnitMember.ps1} | 2 +- .../Get-EntraAdministrativeUnitMember.md | 2 +- ...d => New-EntraAdministrativeUnitMember.md} | 18 +- .../Remove-EntraAdministrativeUnitMember.md | 2 +- src/CompatibilityAdapterBuilder.ps1 | 774 +++++++++--------- src/EntraAliasDefinitions.ps1 | 3 +- ...w-EntraAdministrativeUnitMember.Tests.ps1} | 24 +- 7 files changed, 415 insertions(+), 410 deletions(-) rename module/Entra/AdditionalFunctions/{Add-EntraAdministrativeUnitMember.ps1 => New-EntraAdministrativeUnitMember.ps1} (97%) rename module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/{Add-EntraAdministrativeUnitMember.md => New-EntraAdministrativeUnitMember.md} (86%) rename test/module/Entra/{Add-EntraAdministrativeUnitMember.Tests.ps1 => New-EntraAdministrativeUnitMember.Tests.ps1} (79%) diff --git a/module/Entra/AdditionalFunctions/Add-EntraAdministrativeUnitMember.ps1 b/module/Entra/AdditionalFunctions/New-EntraAdministrativeUnitMember.ps1 similarity index 97% rename from module/Entra/AdditionalFunctions/Add-EntraAdministrativeUnitMember.ps1 rename to module/Entra/AdditionalFunctions/New-EntraAdministrativeUnitMember.ps1 index f4522dfbf8..4de27fd058 100644 --- a/module/Entra/AdditionalFunctions/Add-EntraAdministrativeUnitMember.ps1 +++ b/module/Entra/AdditionalFunctions/New-EntraAdministrativeUnitMember.ps1 @@ -1,7 +1,7 @@ # ------------------------------------------------------------------------------ # Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License in the project root for license information. # ------------------------------------------------------------------------------ -function Add-EntraAdministrativeUnitMember { +function New-EntraAdministrativeUnitMember { [CmdletBinding(DefaultParameterSetName = '')] param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] diff --git a/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Get-EntraAdministrativeUnitMember.md b/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Get-EntraAdministrativeUnitMember.md index f4232506c7..b8c9c9633d 100644 --- a/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Get-EntraAdministrativeUnitMember.md +++ b/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Get-EntraAdministrativeUnitMember.md @@ -188,6 +188,6 @@ This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVar ## Related Links -[Add-EntraAdministrativeUnitMember](Add-EntraAdministrativeUnitMember.md) +[New-EntraAdministrativeUnitMember](New-EntraAdministrativeUnitMember.md) [Remove-EntraAdministrativeUnitMember](Remove-EntraAdministrativeUnitMember.md) diff --git a/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Add-EntraAdministrativeUnitMember.md b/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/New-EntraAdministrativeUnitMember.md similarity index 86% rename from module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Add-EntraAdministrativeUnitMember.md rename to module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/New-EntraAdministrativeUnitMember.md index f7b908e12c..40dc44856d 100644 --- a/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Add-EntraAdministrativeUnitMember.md +++ b/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/New-EntraAdministrativeUnitMember.md @@ -1,6 +1,6 @@ --- -title: Add-EntraAdministrativeUnitMember -description: This article provides details on the Add-EntraAdministrativeUnitMember command. +title: New-EntraAdministrativeUnitMember +description: This article provides details on the New-EntraAdministrativeUnitMember command. ms.topic: reference @@ -12,12 +12,12 @@ author: msewaweru external help file: Microsoft.Graph.Entra-Help.xml Module Name: Microsoft.Graph.Entra -online version: https://learn.microsoft.com/powershell/module/Microsoft.Graph.Entra/Add-EntraAdministrativeUnitMember +online version: https://learn.microsoft.com/powershell/module/Microsoft.Graph.Entra/New-EntraAdministrativeUnitMember schema: 2.0.0 --- -# Add-EntraAdministrativeUnitMember +# New-EntraAdministrativeUnitMember ## Synopsis @@ -26,7 +26,7 @@ Adds an administrative unit member. ## Syntax ```powershell -Add-EntraAdministrativeUnitMember +New-EntraAdministrativeUnitMember -RefObjectId -AdministrativeUnitId [] @@ -34,7 +34,7 @@ Add-EntraAdministrativeUnitMember ## Description -The `Add-EntraAdministrativeUnitMember` cmdlet adds a Microsoft Entra ID administrative unit member. +The `New-EntraAdministrativeUnitMember` cmdlet adds a Microsoft Entra ID administrative unit member. Administrative units enable more granular management of permissions and access, particularly in large organizations or where administrative responsibilities are divided across departments or regions. @@ -48,7 +48,7 @@ To add a user, group, or device to an administrative unit, the calling principal Connect-Entra -Scopes 'AdministrativeUnit.ReadWrite.All' $administrativeUnit = Get-EntraAdministrativeUnit -Filter "DisplayName eq ''" $user = Get-EntraUser -UserId 'SawyerM@contoso.com' -Add-EntraAdministrativeUnitMember -AdministrativeUnitId $administrativeUnit.Id -RefObjectId $user.Id +New-EntraAdministrativeUnitMember -AdministrativeUnitId $administrativeUnit.Id -RefObjectId $user.Id ``` This example demonstrates adding an administrative unit member. Use `Get-EntraAdministrativeUnit` to find the administrative unit ID and `Get-EntraUser` to find the user ID. @@ -100,8 +100,12 @@ This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVar ## Notes +`Add-EntraAdministrativeUnitMember` is an alias for `New-EntraAdministrativeUnitMember`. + ## Related Links [Get-EntraAdministrativeUnitMember](Get-EntraAdministrativeUnitMember.md) + [Remove-EntraAdministrativeUnitMember](Remove-EntraAdministrativeUnitMember.md) + [New-EntraAdministrativeUnit](New-EntraAdministrativeUnit.md) diff --git a/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Remove-EntraAdministrativeUnitMember.md b/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Remove-EntraAdministrativeUnitMember.md index 27cd6c8ad2..d861423cf3 100644 --- a/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Remove-EntraAdministrativeUnitMember.md +++ b/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/Remove-EntraAdministrativeUnitMember.md @@ -98,7 +98,7 @@ This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVar ## Related Links -[Add-EntraAdministrativeUnitMember](Add-EntraAdministrativeUnitMember.md) +[New-EntraAdministrativeUnitMember](New-EntraAdministrativeUnitMember.md) [Get-EntraAdministrativeUnitMember](Get-EntraAdministrativeUnitMember.md) diff --git a/src/CompatibilityAdapterBuilder.ps1 b/src/CompatibilityAdapterBuilder.ps1 index d47b584dc2..0639ccc8c0 100644 --- a/src/CompatibilityAdapterBuilder.ps1 +++ b/src/CompatibilityAdapterBuilder.ps1 @@ -24,7 +24,7 @@ class CompatibilityAdapterBuilder { hidden [hashtable] $HelperCmdletsToExport = @{} hidden [string] $BasePath = $null hidden [string] $LoadMessage - hidden [string[]] $cmdtoSkipNameconverssion = @( + hidden [string[]] $cmdtoSkipNameconverssion = @( 'Select-EntraGroupIdsGroupIsMemberOf', 'Get-EntraUserAppRoleAssignment', 'Get-EntraPermissionGrantConditionSet', @@ -64,90 +64,91 @@ class CompatibilityAdapterBuilder { 'New-EntraNamedLocationPolicy', 'New-EntraServicePrincipalAppRoleAssignment', 'Restore-EntraDeletedDirectoryObject', - 'Restore-EntraBetaDeletedDirectoryObject', - 'New-EntraBetaServicePrincipalAppRoleAssignment', - 'New-EntraBetaNamedLocationPolicy', - 'Get-EntraBetaPermissionGrantConditionSet', - 'Get-EntraBetaPermissionGrantConditionSet', - 'Get-EntraBetaApplicationKeyCredential', - 'Get-EntraBetaPrivilegedRoleDefinition', - 'Get-EntraBetaFeatureRolloutPolicy', - 'Set-EntraBetaPermissionGrantPolicy', - 'Remove-EntraBetaApplicationPassword', - 'Get-EntraBetaServicePrincipalPolicy', - 'Get-EntraBetaPrivilegedRoleAssignmentRequest', - 'New-EntraBetaApplicationPassword', - 'Set-EntraBetaPasswordSingleSignOnCredential', - 'Get-EntraBetaObjectSetting', - 'Add-EntraBetaApplicationPolicy', - 'Add-EntraBetaFeatureRolloutPolicyDirectoryObject', - 'Revoke-EntraBetaUserAllRefreshToken', - 'Get-EntraBetaPrivilegedRole', - 'Get-EntraBetaApplicationTemplate', - 'Select-EntraBetaGroupIdsContactIsMemberOf', - 'Set-EntraBetaCustomSecurityAttributeDefinitionAllowedValue', - 'Set-EntraBetaUserLicense', - 'Set-EntraBetaTrustFrameworkPolicy', - 'Remove-EntraBetaUserAppRoleAssignment', - 'Get-EntraBetaApplicationPolicy', - 'Get-EntraBetaPermissionGrantPolicy', - 'Select-EntraBetaGroupIdsGroupIsMemberOf', - 'New-EntraBetaUserAppRoleAssignment', - 'Get-EntraBetaTrustFrameworkPolicy', - 'Remove-EntraBetaObjectSetting', - 'Add-EntraBetacustomSecurityAttributeDefinitionAllowedValue', - 'Get-EntraBetaUserOAuth2PermissionGrant', - 'New-EntraBetaApplicationKey', - 'Get-EntraBetaPolicy', - 'Get-EntraBetaDirectorySetting', - 'New-EntraBetaServiceAppRoleAssignment', - 'Get-EntraBetaObjectByObjectId', - 'Remove-EntraBetaPasswordSingleSignOnCredential', - 'Set-EntraBetaPermissionGrantConditionSet', - 'Set-EntraBetaConditionalAccessPolicy', - 'Get-EntraBetaPolicyAppliedObject', - 'Remove-EntraBetaDeletedApplication', - 'Get-EntraBetaCustomSecurityAttributeDefinitionAllowedValue', - 'Get-EntraBetaUserAppRoleAssignment', - 'Get-EntraBetaDirectorySettingTemplate', - 'Remove-EntraBetaServicePrincipalPolicy', - 'Get-EntraBetaPermissionGrantConditionSet', - 'Set-EntraBetaObjectSetting', - 'Remove-EntraBetaFeatureRolloutPolicyDirectoryObject', - 'Get-EntraBetaAuthorizationPolicy', - 'Remove-EntraBetaPermissionGrantPolicy', - 'Set-EntraBetaDirectorySetting', - 'Set-EntraBetaAuthorizationPolicy', - 'Remove-EntraBetaDirectorySetting', - 'Remove-EntraBetaApplicationPolicy', - 'New-EntraBetaConditionalAccessPolicy', - 'Set-EntraBetaPrivilegedRoleAssignmentRequest', - 'Remove-EntraBetaTrustFrameworkPolicy', - 'New-EntraBetaPasswordSingleSignOnCredential', - 'Remove-EntraBetaPolicy', - 'Set-EntraBetaPolicy', - 'Set-EntraBetaCustomSecurityAttributeDefinition', - 'Get-EntraBetaPrivilegedResource', - 'Set-EntraBetaUserPassword', - 'New-EntraBetaApplicationFromApplicationTemplate', - 'Set-EntraBetaPrivilegedRoleSetting', - 'Remove-EntraBetaApplicationKey', - 'Get-EntraBetaPrivilegedRoleSetting', - 'Remove-EntraBetaOAuth2PermissionGrant', - 'Select-EntraBetaGroupIdsServicePrincipalIsMemberOf', - 'Get-EntraBetaServicePrincipalDelegatedPermissionClassification', - 'New-EntraBetaPrivilegedRoleAssignment', - 'Get-EntraBetaPasswordSingleSignOnCredential', - 'Set-EntraBetaFeatureRolloutPolicy', - 'New-EntraBetaPermissionGrantPolicy', - 'Remove-EntraBetaFeatureRolloutPolicy', - 'Get-EntraBetaCustomSecurityAttributeDefinition', - 'Remove-EntraBetaServicePrincipalDelegatedPermissionClassification', - 'Select-EntraBetaGroupIdsUserIsMemberOf', - 'Set-EntraBetaNamedLocationPolicy', - 'New-EntraBetaNamedLocationPolicy', - 'Restore-EntraBetaDeletedApplication', - 'Remove-EntraBetaPermissionGrantConditionSet' + 'Restore-EntraBetaDeletedDirectoryObject', + 'New-EntraBetaServicePrincipalAppRoleAssignment', + 'New-EntraBetaNamedLocationPolicy', + 'Get-EntraBetaPermissionGrantConditionSet', + 'Get-EntraBetaPermissionGrantConditionSet', + 'Get-EntraBetaApplicationKeyCredential', + 'Get-EntraBetaPrivilegedRoleDefinition', + 'Get-EntraBetaFeatureRolloutPolicy', + 'Set-EntraBetaPermissionGrantPolicy', + 'Remove-EntraBetaApplicationPassword', + 'Get-EntraBetaServicePrincipalPolicy', + 'Get-EntraBetaPrivilegedRoleAssignmentRequest', + 'New-EntraBetaApplicationPassword', + 'Set-EntraBetaPasswordSingleSignOnCredential', + 'Get-EntraBetaObjectSetting', + 'Add-EntraBetaApplicationPolicy', + 'Add-EntraBetaFeatureRolloutPolicyDirectoryObject', + 'Revoke-EntraBetaUserAllRefreshToken', + 'Get-EntraBetaPrivilegedRole', + 'Get-EntraBetaApplicationTemplate', + 'Select-EntraBetaGroupIdsContactIsMemberOf', + 'Set-EntraBetaCustomSecurityAttributeDefinitionAllowedValue', + 'Set-EntraBetaUserLicense', + 'Set-EntraBetaTrustFrameworkPolicy', + 'Remove-EntraBetaUserAppRoleAssignment', + 'Get-EntraBetaApplicationPolicy', + 'Get-EntraBetaPermissionGrantPolicy', + 'Select-EntraBetaGroupIdsGroupIsMemberOf', + 'New-EntraBetaUserAppRoleAssignment', + 'Get-EntraBetaTrustFrameworkPolicy', + 'Remove-EntraBetaObjectSetting', + 'Add-EntraBetacustomSecurityAttributeDefinitionAllowedValue', + 'Get-EntraBetaUserOAuth2PermissionGrant', + 'New-EntraBetaApplicationKey', + 'Get-EntraBetaPolicy', + 'Get-EntraBetaDirectorySetting', + 'New-EntraBetaServiceAppRoleAssignment', + 'Get-EntraBetaObjectByObjectId', + 'Remove-EntraBetaPasswordSingleSignOnCredential', + 'Set-EntraBetaPermissionGrantConditionSet', + 'Set-EntraBetaConditionalAccessPolicy', + 'Get-EntraBetaPolicyAppliedObject', + 'Remove-EntraBetaDeletedApplication', + 'Get-EntraBetaCustomSecurityAttributeDefinitionAllowedValue', + 'Get-EntraBetaUserAppRoleAssignment', + 'Get-EntraBetaDirectorySettingTemplate', + 'Remove-EntraBetaServicePrincipalPolicy', + 'Get-EntraBetaPermissionGrantConditionSet', + 'Set-EntraBetaObjectSetting', + 'Remove-EntraBetaFeatureRolloutPolicyDirectoryObject', + 'Get-EntraBetaAuthorizationPolicy', + 'Remove-EntraBetaPermissionGrantPolicy', + 'Set-EntraBetaDirectorySetting', + 'Set-EntraBetaAuthorizationPolicy', + 'Remove-EntraBetaDirectorySetting', + 'Remove-EntraBetaApplicationPolicy', + 'New-EntraBetaConditionalAccessPolicy', + 'Set-EntraBetaPrivilegedRoleAssignmentRequest', + 'Remove-EntraBetaTrustFrameworkPolicy', + 'New-EntraBetaPasswordSingleSignOnCredential', + 'Remove-EntraBetaPolicy', + 'Set-EntraBetaPolicy', + 'Set-EntraBetaCustomSecurityAttributeDefinition', + 'Get-EntraBetaPrivilegedResource', + 'Set-EntraBetaUserPassword', + 'New-EntraBetaApplicationFromApplicationTemplate', + 'Set-EntraBetaPrivilegedRoleSetting', + 'Remove-EntraBetaApplicationKey', + 'Get-EntraBetaPrivilegedRoleSetting', + 'Remove-EntraBetaOAuth2PermissionGrant', + 'Select-EntraBetaGroupIdsServicePrincipalIsMemberOf', + 'Get-EntraBetaServicePrincipalDelegatedPermissionClassification', + 'New-EntraBetaPrivilegedRoleAssignment', + 'Get-EntraBetaPasswordSingleSignOnCredential', + 'Set-EntraBetaFeatureRolloutPolicy', + 'New-EntraBetaPermissionGrantPolicy', + 'Remove-EntraBetaFeatureRolloutPolicy', + 'Get-EntraBetaCustomSecurityAttributeDefinition', + 'Remove-EntraBetaServicePrincipalDelegatedPermissionClassification', + 'Select-EntraBetaGroupIdsUserIsMemberOf', + 'Set-EntraBetaNamedLocationPolicy', + 'New-EntraBetaNamedLocationPolicy', + 'Restore-EntraBetaDeletedApplication', + 'Remove-EntraBetaPermissionGrantConditionSet', + 'New-EntraBetaScopedRoleMembership' ) @@ -158,23 +159,22 @@ class CompatibilityAdapterBuilder { $this.Configure((join-path $this.BasePath "/config/ModuleSettings.json")) } - CompatibilityAdapterBuilder([string] $Module){ + CompatibilityAdapterBuilder([string] $Module) { $this.BasePath = (join-path $PSScriptRoot '../module/') $this.BasePath = (join-path $this.BasePath $Module) $this.HelpFolder = (join-path $this.BasePath './help') $this.Configure((join-path $this.BasePath "/config/ModuleSettings.json")) } - CompatibilityAdapterBuilder([bool] $notRunningUT = $false){ - if($notRunningUT) - { + CompatibilityAdapterBuilder([bool] $notRunningUT = $false) { + if ($notRunningUT) { $this.BasePath = (join-path $PSScriptRoot '../module/Entra/') $this.HelpFolder = (join-path $this.BasePath './help') $this.Configure((join-path $this.BasePath "/config/ModuleSettings.json")) } } - hidden Configure([string] $ModuleSettingsPath){ + hidden Configure([string] $ModuleSettingsPath) { $settingPath = $ModuleSettingsPath $content = Get-Content -Path $settingPath | ConvertFrom-Json $this.SourceModuleName = $content.sourceModule @@ -185,11 +185,11 @@ class CompatibilityAdapterBuilder { $this.ModuleName = $content.moduleName $this.TypePrefix = $content.typePrefix Import-Module $this.SourceModuleName -Force | Out-Null - foreach ($moduleName in $this.DestinationModuleName){ + foreach ($moduleName in $this.DestinationModuleName) { Import-Module $moduleName -RequiredVersion $content.destinationModuleVersion -Force | Out-Null } - if(!(Test-Path $this.OutputFolder)){ + if (!(Test-Path $this.OutputFolder)) { New-Item -ItemType Directory -Path $this.OutputFolder | Out-Null } @@ -204,50 +204,50 @@ class CompatibilityAdapterBuilder { AddTypes($types) { $this.TypeCustomizations = $types - foreach($type in $types.Keys){ + foreach ($type in $types.Keys) { $this.TypesToCreate += $type } } # Add customization based on the the CommandMap object. AddCustomization([hashtable[]] $Commands) { - foreach($cmd in $Commands) { + foreach ($cmd in $Commands) { $parameters = $null $outputs = $null - if($null -ne $cmd.TargetName){ - if($cmd.Parameters){ + if ($null -ne $cmd.TargetName) { + if ($cmd.Parameters) { $parameters = @{} - foreach($param in $cmd.Parameters){ + foreach ($param in $cmd.Parameters) { $parameters.Add($param.SourceName, [DataMap]::New($param.SourceName, $param.TargetName, $param.ConversionType, [Scriptblock]::Create($param.SpecialMapping))) } } - if($cmd.Outputs){ + if ($cmd.Outputs) { $outputs = @{} - foreach($param in $cmd.Outputs){ + foreach ($param in $cmd.Outputs) { $outputs.Add($param.SourceName, [DataMap]::New($param.SourceName, $param.TargetName, $param.ConversionType, [Scriptblock]::Create($param.SpecialMapping))) } } - $customCommand = [CommandMap]::New($cmd.SourceName,$cmd.TargetName, $parameters, $outputs) + $customCommand = [CommandMap]::New($cmd.SourceName, $cmd.TargetName, $parameters, $outputs) $this.CmdCustomizations.Add($cmd.SourceName, $customCommand) } else { - if($cmd.Parameters){ + if ($cmd.Parameters) { $parameters = @{} - foreach($param in $cmd.Parameters){ + foreach ($param in $cmd.Parameters) { $this.GenericParametersTransformations.Add($param.SourceName, [DataMap]::New($param.SourceName, $param.TargetName, $param.ConversionType, [Scriptblock]::Create($param.SpecialMapping))) } } - if($cmd.Outputs){ + if ($cmd.Outputs) { $outputs = @{} - foreach($param in $cmd.Outputs){ + foreach ($param in $cmd.Outputs) { $this.GenericOutputTransformations.Add($param.SourceName, [DataMap]::New($param.SourceName, $param.TargetName, $param.ConversionType, [Scriptblock]::Create($param.SpecialMapping))) } } - if($null -ne $cmd.SourceName) { + if ($null -ne $cmd.SourceName) { $scriptBlock = [Scriptblock]::Create($cmd.CustomScript) $customCommand = [CommandMap]::New($cmd.SourceName, $scriptBlock) $this.CmdCustomizations.Add($cmd.SourceName, $customCommand) @@ -256,16 +256,16 @@ class CompatibilityAdapterBuilder { } } - AddHelperCommand([string] $FileName){ + AddHelperCommand([string] $FileName) { $properties = Get-ItemProperty -Path $FileName - if($null -ne $properties){ - $name = $properties.PSChildName.Replace(".ps1","") + if ($null -ne $properties) { + $name = $properties.PSChildName.Replace(".ps1", "") $this.HelperCmdletsToExport.Add($name, $(Get-Content -Path $FileName) -join "`n") } } hidden GenerateHelpFiles() { - foreach($file in Get-ChildItem -Path $this.HelpFolder -Filter "*.xml") { + foreach ($file in Get-ChildItem -Path $this.HelpFolder -Filter "*.xml") { Copy-Item $file.FullName $this.OutputFolder -Force } #$helpPath = Join-Path $this.OutputFolder "$($this.ModuleName)-Help.xml" @@ -286,8 +286,8 @@ class CompatibilityAdapterBuilder { $helpCommands = "" $replacePrefix = "-" + $this.NewPrefix $oldPrefix = "-AzureAD" - foreach($file in Get-ChildItem -Path $this.HelpFolder -Filter "*.xml") { - (Get-Content $file.FullName | Select-Object -Skip 2 | Select-Object -SkipLast 1).Replace($oldPrefix,$replacePrefix) | Add-Content -Path $filePath + foreach ($file in Get-ChildItem -Path $this.HelpFolder -Filter "*.xml") { + (Get-Content $file.FullName | Select-Object -Skip 2 | Select-Object -SkipLast 1).Replace($oldPrefix, $replacePrefix) | Add-Content -Path $filePath } return $helpCommands } @@ -305,14 +305,14 @@ class CompatibilityAdapterBuilder { $data = $this.Map() $psm1FileContent = $this.GetFileHeader() - foreach($cmd in $data.Commands) { + foreach ($cmd in $data.Commands) { $psm1FileContent += $cmd.CommandBlock } $psm1FileContent += $this.GetUnsupportedCommand() $psm1FileContent += $this.GetAlisesFunction() - foreach($function in $this.HelperCmdletsToExport.GetEnumerator()){ + foreach ($function in $this.HelperCmdletsToExport.GetEnumerator()) { $psm1FileContent += $function.Value } $psm1FileContent += $this.GetExportMemeber() @@ -322,25 +322,25 @@ class CompatibilityAdapterBuilder { $psm1FileContent | Out-File -FilePath $filePath } - hidden GetInnerTypes([string] $type){ + hidden GetInnerTypes([string] $type) { $object = New-Object -TypeName $type $object.GetType().GetProperties() | ForEach-Object { - if($_.PropertyType.Name -eq 'Nullable`1') { + if ($_.PropertyType.Name -eq 'Nullable`1') { $name = $_.PropertyType.GenericTypeArguments.FullName - if(!$_.PropertyType.GenericTypeArguments.IsEnum){ - if($name -like "$($this.TypePrefix)*") { - if(!$this.TypesToCreate.Contains($name)){ + if (!$_.PropertyType.GenericTypeArguments.IsEnum) { + if ($name -like "$($this.TypePrefix)*") { + if (!$this.TypesToCreate.Contains($name)) { $this.TypesToCreate += $name $this.GetInnerTypes($name) } } } } - elseif($_.PropertyType.Name -eq 'List`1') { + elseif ($_.PropertyType.Name -eq 'List`1') { $name = $_.PropertyType.GenericTypeArguments.FullName - if(!$_.PropertyType.GenericTypeArguments.IsEnum){ - if($name -like "$($this.TypePrefix)*") { - if(!$this.TypesToCreate.Contains($name)){ + if (!$_.PropertyType.GenericTypeArguments.IsEnum) { + if ($name -like "$($this.TypePrefix)*") { + if (!$this.TypesToCreate.Contains($name)) { $this.TypesToCreate += $name $this.GetInnerTypes($name) } @@ -348,10 +348,10 @@ class CompatibilityAdapterBuilder { } } else { - if(!$_.PropertyType.IsEnum){ + if (!$_.PropertyType.IsEnum) { $name = $_.PropertyType.FullName - if($name -like "$($this.TypePrefix)*") { - if(!$this.TypesToCreate.Contains($name)){ + if ($name -like "$($this.TypePrefix)*") { + if (!$this.TypesToCreate.Contains($name)) { $this.TypesToCreate += $name $this.GetInnerTypes($name) } @@ -364,7 +364,7 @@ class CompatibilityAdapterBuilder { hidden [string] GetTypesDefinitions() { $types = $this.TypesToCreate | Sort-Object -Unique - foreach($type in $types) { + foreach ($type in $types) { $this.GetInnerTypes($type) } @@ -379,19 +379,19 @@ class CompatibilityAdapterBuilder { "@ Write-Host "Creating types definitions for $($types.Count) types." - foreach($type in $types) { - Write-Host "- Generating type for $type" - if($type.contains("+")){ - $type = $type.Substring(0,$type.IndexOf("+")) - Write-Host "- Real type is $type" - } - $object = New-Object -TypeName $type - $namespaceNew = $object.GetType().Namespace - $enumsDefined = @() + foreach ($type in $types) { + Write-Host "- Generating type for $type" + if ($type.contains("+")) { + $type = $type.Substring(0, $type.IndexOf("+")) + Write-Host "- Real type is $type" + } + $object = New-Object -TypeName $type + $namespaceNew = $object.GetType().Namespace + $enumsDefined = @() - if($namespace -ne $namespaceNew){ - if($null -ne $namespace){ - $def += @" + if ($namespace -ne $namespaceNew) { + if ($null -ne $namespace) { + $def += @" } namespace $namespaceNew @@ -400,9 +400,9 @@ namespace $namespaceNew using System.Linq; "@ - } - else { - $def += @" + } + else { + $def += @" namespace $namespaceNew { @@ -410,76 +410,76 @@ namespace $namespaceNew using System.Linq; "@ + } + $namespace = $object.GetType().Namespace } - $namespace = $object.GetType().Namespace - } - $name = $object.GetType().Name - if($object.GetType().IsEnum){ $name = $object.GetType().Name - if(!$enumsDefined.Contains($name)){ - $def += $this.GetEnumString($name, $object.GetType().FullName) - $enumsDefined += $name - continue - } - } - $def += @" + if ($object.GetType().IsEnum) { + $name = $object.GetType().Name + if (!$enumsDefined.Contains($name)) { + $def += $this.GetEnumString($name, $object.GetType().FullName) + $enumsDefined += $name + continue + } + } + $def += @" public class $name { "@ - if($this.TypeCustomizations.ContainsKey($object.GetType().FullName)){ - $extraFunctions = $this.TypeCustomizations[$object.GetType().FullName] - $def += @" + if ($this.TypeCustomizations.ContainsKey($object.GetType().FullName)) { + $extraFunctions = $this.TypeCustomizations[$object.GetType().FullName] + $def += @" $extraFunctions } "@ - } - else { - - $object.GetType().GetProperties() | ForEach-Object { - if($_.PropertyType.Name -eq 'Nullable`1') { - $name = $_.PropertyType.GenericTypeArguments.FullName - if($_.PropertyType.GenericTypeArguments.IsEnum){ - $name = $_.PropertyType.GenericTypeArguments.Name - if(!$enumsDefined.Contains($name)){ - $def += $this.GetEnumString($name, $_.PropertyType.GenericTypeArguments.FullName) - $enumsDefined += $name - } - } - $name = "System.Nullable<$($name)>" - } - elseif ($_.PropertyType.Name -eq 'List`1') { - $name = $_.PropertyType.GenericTypeArguments.FullName - if($_.PropertyType.GenericTypeArguments.IsEnum){ - $name = $_.PropertyType.GenericTypeArguments.Name - if(!$enumsDefined.Contains($name)){ - $def += $this.GetEnumString($name, $_.PropertyType.GenericTypeArguments.FullName) - $enumsDefined += $name - } - } - $name = "System.Collections.Generic.List<$($name)>" } else { - $name = $_.PropertyType.FullName - if($_.PropertyType.IsEnum){ - $name = $_.PropertyType.Name - if(!$enumsDefined.Contains($name)){ - $def += $this.GetEnumString($name, $_.PropertyType.FullName) - $enumsDefined += $name + + $object.GetType().GetProperties() | ForEach-Object { + if ($_.PropertyType.Name -eq 'Nullable`1') { + $name = $_.PropertyType.GenericTypeArguments.FullName + if ($_.PropertyType.GenericTypeArguments.IsEnum) { + $name = $_.PropertyType.GenericTypeArguments.Name + if (!$enumsDefined.Contains($name)) { + $def += $this.GetEnumString($name, $_.PropertyType.GenericTypeArguments.FullName) + $enumsDefined += $name + } + } + $name = "System.Nullable<$($name)>" } - } - } - $def += " public $($name) $($_.Name);`n" - } + elseif ($_.PropertyType.Name -eq 'List`1') { + $name = $_.PropertyType.GenericTypeArguments.FullName + if ($_.PropertyType.GenericTypeArguments.IsEnum) { + $name = $_.PropertyType.GenericTypeArguments.Name + if (!$enumsDefined.Contains($name)) { + $def += $this.GetEnumString($name, $_.PropertyType.GenericTypeArguments.FullName) + $enumsDefined += $name + } + } + $name = "System.Collections.Generic.List<$($name)>" + } + else { + $name = $_.PropertyType.FullName + if ($_.PropertyType.IsEnum) { + $name = $_.PropertyType.Name + if (!$enumsDefined.Contains($name)) { + $def += $this.GetEnumString($name, $_.PropertyType.FullName) + $enumsDefined += $name + } + } + } + $def += " public $($name) $($_.Name);`n" + } - $constructor = "" + $constructor = "" - if(1 -eq $object.GetType().GetProperties().Count){ + if (1 -eq $object.GetType().GetProperties().Count) { - $constructor = @" + $constructor = @" public $($object.GetType().Name)() { } @@ -489,17 +489,17 @@ public $($object.GetType().Name)() $($object.GetType().GetProperties()[0].Name) = value; } "@ - } + } - $def += @" + $def += @" $constructor } "@ + } } - } - $def += @" + $def += @" } "@ @@ -522,10 +522,10 @@ public $($object.GetType().Name)() public enum $($enumName){ "@ - [enum]::getvalues([type]$enumType) | ForEach-Object { - $def += " $_ = $($_.value__),`n" - } - $def += @" + [enum]::getvalues([type]$enumType) | ForEach-Object { + $def += " $_ = $($_.value__),`n" + } + $def += @" } "@ @@ -537,39 +537,39 @@ public $($object.GetType().Name)() $files = @("$($this.ModuleName).psd1", "$($this.ModuleName).psm1", "$($this.ModuleName)-Help.xml") $content = Get-Content -Path $settingPath | ConvertFrom-Json $PSData = @{ - Tags = $($content.tags) - LicenseUri = $($content.licenseUri) - ProjectUri = $($content.projectUri) - IconUri = $($content.iconUri) + Tags = $($content.tags) + LicenseUri = $($content.licenseUri) + ProjectUri = $($content.projectUri) + IconUri = $($content.iconUri) ReleaseNotes = $($content.releaseNotes) - Prerelease = $null + Prerelease = $null } $manisfestPath = Join-Path $this.OutputFolder "$($this.ModuleName).psd1" $functions = $this.ModuleMap.CommandsList + "Enable-EntraAzureADAlias" + "Get-EntraUnsupportedCommand" $requiredModules = @() - foreach($module in $content.requiredModules){ - $requiredModules += @{ModuleName = $module; RequiredVersion = $content.requiredModulesVersion} + foreach ($module in $content.requiredModules) { + $requiredModules += @{ModuleName = $module; RequiredVersion = $content.requiredModulesVersion } } $moduleSettings = @{ - Path = $manisfestPath - GUID = $($content.guid) - ModuleVersion = "$($content.version)" - FunctionsToExport = $functions - CmdletsToExport=@() - AliasesToExport=@() - Author = $($content.authors) - CompanyName = $($content.owners) - FileList = $files - RootModule = "$($this.ModuleName).psm1" - Description = 'Microsoft Graph Entra PowerShell.' + Path = $manisfestPath + GUID = $($content.guid) + ModuleVersion = "$($content.version)" + FunctionsToExport = $functions + CmdletsToExport = @() + AliasesToExport = @() + Author = $($content.authors) + CompanyName = $($content.owners) + FileList = $files + RootModule = "$($this.ModuleName).psm1" + Description = 'Microsoft Graph Entra PowerShell.' DotNetFrameworkVersion = $([System.Version]::Parse('4.7.2')) - PowerShellVersion = $([System.Version]::Parse('5.1')) - CompatiblePSEditions = @('Desktop','Core') - RequiredModules = $requiredModules - NestedModules = @() + PowerShellVersion = $([System.Version]::Parse('5.1')) + CompatiblePSEditions = @('Desktop', 'Core') + RequiredModules = $requiredModules + NestedModules = @() } - if($null -ne $content.Prerelease){ + if ($null -ne $content.Prerelease) { $PSData.Prerelease = $content.Prerelease } @@ -579,36 +579,36 @@ public $($object.GetType().Name)() } # Creates the ModuleMap object, this is mainly used by other methods but can be called when debugging or finding missing cmdlets - hidden [MappedCmdCollection] Map(){ + hidden [MappedCmdCollection] Map() { $this.ModuleMap = [MappedCmdCollection]::new($this.ModuleName) $originalCmdlets = $this.GetModuleCommands($this.SourceModuleName, $this.SourceModulePrefixs, $true) $targetCmdlets = $this.GetModuleCommands($this.DestinationModuleName, $this.DestinationPrefixs, $true) $newCmdletData = @() $cmdletsToExport = @() $missingCmdletsToExport = @() - if('Microsoft.Graph.Entra' -eq $this.ModuleName){ + if ('Microsoft.Graph.Entra' -eq $this.ModuleName) { $cmdletsToSkip = @("Add-AzureADMSApplicationOwner", "Get-AzureADMSApplication", "Get-AzureADMSApplicationExtensionProperty", "Get-AzureADMSApplicationOwner", "New-AzureADApplication", "New-AzureADMSApplicationExtensionProperty", "Remove-AzureADMSApplication", "Remove-AzureADMSApplicationExtensionProperty", "Remove-AzureADMSApplicationOwner", "Set-AzureADApplication", "Set-AzureADMSApplicationLogo", "Get-AzureADMSGroup", "New-AzureADGroup", "Remove-AzureADMSGroup", "Set-AzureADGroup") } - else{ - $cmdletsToSkip = @("Add-AzureADMSAdministrativeUnitMember", "Add-AzureADMSScopedRoleMembership", "Get-AzureADMSAdministrativeUnit", "Get-AzureADMSAdministrativeUnitMember", "Get-AzureADMSScopedRoleMembership", "New-AzureADAdministrativeUnit", "Remove-AzureADMSAdministrativeUnit", "Remove-AzureADMSAdministrativeUnitMember", "Remove-AzureADMSScopedRoleMembership", "Set-AzureADAdministrativeUnit", "Add-AzureADMSApplicationOwner", "Get-AzureADMSApplication", "Get-AzureADMSApplicationExtensionProperty", "Get-AzureADMSApplicationOwner", "New-AzureADApplication","New-AzureADMSApplicationExtensionProperty","Remove-AzureADMSApplication","Remove-AzureADMSApplicationExtensionProperty","Remove-AzureADMSApplicationOwner","Set-AzureADApplication","Set-AzureADMSApplicationLogo","Get-AzureADMSGroup","New-AzureADGroup","Remove-AzureADMSGroup","Set-AzureADGroup","Get-AzureADMSPrivilegedRoleAssignment","Get-AzureADMSServicePrincipal","Set-AzureADMSServicePrincipal","Get-AzureADMSUser","Set-AzureADMSUser","New-AzureADMSUser","New-AzureADMSServicePrincipal") + else { + $cmdletsToSkip = @("Add-AzureADMSAdministrativeUnitMember", "Add-AzureADMSScopedRoleMembership", "Get-AzureADMSAdministrativeUnit", "Get-AzureADMSAdministrativeUnitMember", "Get-AzureADMSScopedRoleMembership", "New-AzureADAdministrativeUnit", "Remove-AzureADMSAdministrativeUnit", "Remove-AzureADMSAdministrativeUnitMember", "Remove-AzureADMSScopedRoleMembership", "Set-AzureADAdministrativeUnit", "Add-AzureADMSApplicationOwner", "Get-AzureADMSApplication", "Get-AzureADMSApplicationExtensionProperty", "Get-AzureADMSApplicationOwner", "New-AzureADApplication", "New-AzureADMSApplicationExtensionProperty", "Remove-AzureADMSApplication", "Remove-AzureADMSApplicationExtensionProperty", "Remove-AzureADMSApplicationOwner", "Set-AzureADApplication", "Set-AzureADMSApplicationLogo", "Get-AzureADMSGroup", "New-AzureADGroup", "Remove-AzureADMSGroup", "Set-AzureADGroup", "Get-AzureADMSPrivilegedRoleAssignment", "Get-AzureADMSServicePrincipal", "Set-AzureADMSServicePrincipal", "Get-AzureADMSUser", "Set-AzureADMSUser", "New-AzureADMSUser", "New-AzureADMSServicePrincipal") } - foreach ($cmd in $originalCmdlets.Keys){ + foreach ($cmd in $originalCmdlets.Keys) { if ($cmdletsToSkip -contains $cmd) { continue } $originalCmdlet = $originalCmdlets[$cmd] $newFunction = $this.GetNewCmdTranslation($cmd, $originalCmdlet, $targetCmdlets, $this.NewPrefix) - if($newFunction){ + if ($newFunction) { $newCmdletData += $newFunction $cmdletsToExport += $newFunction.Generate } - else{ + else { $missingCmdletsToExport += $cmd $this.MissingCommandsToMap += $cmd } } - foreach($function in $this.HelperCmdletsToExport.GetEnumerator()){ + foreach ($function in $this.HelperCmdletsToExport.GetEnumerator()) { $cmdletsToExport += $function.Key } @@ -619,7 +619,7 @@ public $($object.GetType().Name)() return $this.ModuleMap } - hidden [scriptblock] GetUnsupportedCommand(){ + hidden [scriptblock] GetUnsupportedCommand() { $unsupported = @" function Get-EntraUnsupportedCommand { Throw [System.NotSupportedException] "This command is not supported by Microsoft Entra PowerShell." @@ -631,7 +631,7 @@ function Get-EntraUnsupportedCommand { } hidden [scriptblock] GetAlisesFunction() { - if($this.ModuleMap){ + if ($this.ModuleMap) { $aliases = '' foreach ($func in $this.ModuleMap.Commands) { $aliases += " Set-Alias -Name $($func.SourceName) -Value $($func.Name) -Scope Global -Force`n" @@ -641,18 +641,16 @@ function Get-EntraUnsupportedCommand { } #Adding direct aliases - $aliasDefinitionsPath ="" - if($this.ModuleName -eq 'Microsoft.Graph.Entra') - { + $aliasDefinitionsPath = "" + if ($this.ModuleName -eq 'Microsoft.Graph.Entra') { $aliasDefinitionsPath = "$PSScriptRoot/EntraAliasDefinitions.ps1" } elseif ($this.ModuleName -eq 'Microsoft.Graph.Entra.Beta') { $aliasDefinitionsPath = "$PSScriptRoot/EntraBetaAliasDefinitions.ps1" } #Adding direct aliases - $aliasDefinitionsPath ="" - if($this.ModuleName -eq 'Microsoft.Graph.Entra') - { + $aliasDefinitionsPath = "" + if ($this.ModuleName -eq 'Microsoft.Graph.Entra') { $aliasDefinitionsPath = "$PSScriptRoot/EntraAliasDefinitions.ps1" } elseif ($this.ModuleName -eq 'Microsoft.Graph.Entra.Beta') { @@ -664,7 +662,7 @@ function Get-EntraUnsupportedCommand { $aliases += $directAliases # Append the content to $aliases } - $aliasFunction = @" + $aliasFunction = @" function Enable-EntraAzureADAlias { $($aliases)} @@ -699,8 +697,8 @@ Set-Variable -name MISSING_CMDS -value @('$($this.ModuleMap.MissingCommandsList hidden [CommandTranslation[]] NewModuleMap([PSCustomObject[]] $Commands) { [CommandTranslation[]] $translations = @() - foreach($Command in $Commands){ - if('' -eq $command.New){ + foreach ($Command in $Commands) { + if ('' -eq $command.New) { $translations += $this.NewCustomFunctionMap($Command) } else { @@ -710,7 +708,7 @@ Set-Variable -name MISSING_CMDS -value @('$($this.ModuleMap.MissingCommandsList return $translations } - hidden [CommandTranslation] NewCustomFunctionMap([PSCustomObject] $Command){ + hidden [CommandTranslation] NewCustomFunctionMap([PSCustomObject] $Command) { Write-Host "Creating custom function map for $($Command.Generate)" $parameterDefinitions = $this.GetParametersDefinitions($Command) $ParamterTransformations = $this.GetParametersTransformations($Command) @@ -737,13 +735,13 @@ $($Command.CustomScript) "@ } $codeBlock = [Scriptblock]::Create($function) - return [CommandTranslation]::New($Command.Generate,$Command.Old,$codeBlock) + return [CommandTranslation]::New($Command.Generate, $Command.Old, $codeBlock) } - hidden [CommandTranslation] NewFunctionMap([PSCustomObject] $Command){ + hidden [CommandTranslation] NewFunctionMap([PSCustomObject] $Command) { Write-Host "Creating new function for $($Command.Generate)" - $cmdLstToSkipKeyIdpair=@( + $cmdLstToSkipKeyIdpair = @( "Get-EntraGroup", "Get-EntraServicePrincipalDelegatedPermissionClassification", "Get-EntraApplication", @@ -775,18 +773,17 @@ $($Command.CustomScript) $ParamterTransformations = $this.GetParametersTransformations($Command) $OutputTransformations = $this.GetOutputTransformations($Command) - if($cmdLstToSkipKeyIdpair.Contains($Command.Generate)) { + if ($cmdLstToSkipKeyIdpair.Contains($Command.Generate)) { $keyId = $this.GetKeyIdPair($Command) } else { - $keyId='' + $keyId = '' } $customHeadersCommandName = "New-EntraCustomHeaders" - if($this.ModuleName -eq 'Microsoft.Graph.Entra.Beta') - { + if ($this.ModuleName -eq 'Microsoft.Graph.Entra.Beta') { $customHeadersCommandName = "New-EntraBetaCustomHeaders" } @@ -814,43 +811,43 @@ $OutputTransformations "@ $codeBlock = [Scriptblock]::Create($function) - return [CommandTranslation]::New($Command.Generate,$Command.Old,$codeBlock) + return [CommandTranslation]::New($Command.Generate, $Command.Old, $codeBlock) } hidden [string] GetParametersDefinitions([PSCustomObject] $Command) { - $commonParameterNames = @("ProgressAction","Verbose", "Debug","ErrorAction", "ErrorVariable", "WarningAction", "WarningVariable", "OutBuffer", "PipelineVariable", "OutVariable", "InformationAction", "InformationVariable","WhatIf","Confirm") - $ignorePropertyParameter = @("Get-EntraBetaApplicationPolicy", "Get-EntraBetaApplicationSignInSummary","Get-EntraBetaPrivilegedRoleAssignment","Get-EntraBetaTrustFrameworkPolicy","Get-EntraBetaPolicy","Get-EntraBetaPolicyAppliedObject","Get-EntraBetaServicePrincipalPolicy","Get-EntraApplicationLogo","Get-EntraBetaApplicationLogo","Get-EntraApplicationKeyCredential","Get-EntraBetaApplicationKeyCredential","Get-EntraBetaServicePrincipalKeyCredential","Get-EntraBetaServicePrincipalPasswordCredential","Get-EntraServicePrincipalKeyCredential","Get-EntraServicePrincipalPasswordCredential") + $commonParameterNames = @("ProgressAction", "Verbose", "Debug", "ErrorAction", "ErrorVariable", "WarningAction", "WarningVariable", "OutBuffer", "PipelineVariable", "OutVariable", "InformationAction", "InformationVariable", "WhatIf", "Confirm") + $ignorePropertyParameter = @("Get-EntraBetaApplicationPolicy", "Get-EntraBetaApplicationSignInSummary", "Get-EntraBetaPrivilegedRoleAssignment", "Get-EntraBetaTrustFrameworkPolicy", "Get-EntraBetaPolicy", "Get-EntraBetaPolicyAppliedObject", "Get-EntraBetaServicePrincipalPolicy", "Get-EntraApplicationLogo", "Get-EntraBetaApplicationLogo", "Get-EntraApplicationKeyCredential", "Get-EntraBetaApplicationKeyCredential", "Get-EntraBetaServicePrincipalKeyCredential", "Get-EntraBetaServicePrincipalPasswordCredential", "Get-EntraServicePrincipalKeyCredential", "Get-EntraServicePrincipalPasswordCredential") $params = $(Get-Command -Name $Command.Old).Parameters $paramsList = @() - $ParamAlias=$null + $ParamAlias = $null foreach ($paramKey in $Command.Parameters.Keys) { - if($commonParameterNames.Contains($paramKey)) { + if ($commonParameterNames.Contains($paramKey)) { continue } $targetParam = $Command.Parameters[$paramKey] $param = $params[$paramKey] $paramType = $param.ParameterType.ToString() $paramtypeToCreate = $param.ParameterType.ToString() - if($param.Name -eq 'All'){ + if ($param.Name -eq 'All') { $paramType = "switch" } - if( ($this.cmdtoSkipNameconverssion -notcontains $Command.Generate) -and (($param.Name -eq 'ObjectId' -or $param.Name -eq 'Id') -and $null -ne $targetParam.TargetName)){ + if ( ($this.cmdtoSkipNameconverssion -notcontains $Command.Generate) -and (($param.Name -eq 'ObjectId' -or $param.Name -eq 'Id') -and $null -ne $targetParam.TargetName)) { if ($targetParam.TargetName) { $ParamAlias = $this.GetParameterAlias($param.Name) $param.Name = $targetParam.TargetName } } - if(($null -ne $this.TypePrefix) -and ($paramType -like "*$($this.TypePrefix)*")){ - if($paramType -like "*List*"){ + if (($null -ne $this.TypePrefix) -and ($paramType -like "*$($this.TypePrefix)*")) { + if ($paramType -like "*List*") { $paramType = "System.Collections.Generic.List``1[$($param.ParameterType.GenericTypeArguments.FullName)]" $paramtypeToCreate = $param.ParameterType.GenericTypeArguments.FullName } - elseif($paramType -like "*Nullable*"){ + elseif ($paramType -like "*Nullable*") { $paramType = "System.Nullable``1[$($param.ParameterType.GenericTypeArguments.FullName)]" $paramtypeToCreate = $param.ParameterType.GenericTypeArguments.FullName } - if(!$this.TypesToCreate.Contains($paramtypeToCreate)) { + if (!$this.TypesToCreate.Contains($paramtypeToCreate)) { $this.TypesToCreate += $paramtypeToCreate } } @@ -859,16 +856,16 @@ $OutputTransformations $($this.GetParameterAttributes($Param))[$($paramType)] `$$($param.Name) "@ $paramsList += $paramBlock - $ParamAlias=$null + $ParamAlias = $null } $addProperty = $true - if('' -ne $Command.New){ + if ('' -ne $Command.New) { $addProperty = $false $targetCmdparams = $(Get-Command -Name $Command.New).Parameters.Keys - if($null -ne $targetCmdparams){ - foreach($param in $targetCmdparams) { - if($param -eq 'Property') { + if ($null -ne $targetCmdparams) { + foreach ($param in $targetCmdparams) { + if ($param -eq 'Property') { $addProperty = $true break } @@ -876,14 +873,14 @@ $OutputTransformations } } - if("Get" -eq $Command.Verb -and !$ignorePropertyParameter.Contains($Command.Generate) -and $addProperty){ + if ("Get" -eq $Command.Verb -and !$ignorePropertyParameter.Contains($Command.Generate) -and $addProperty) { $paramsList += $this.GetPropertyParameterBlock() } return $paramsList -Join ",`n" } - hidden [string] GetPropertyParameterBlock(){ + hidden [string] GetPropertyParameterBlock() { $propertyType = "System.String[]" $arrayAttrib = @() $arrayAttrib += "Mandatory = `$false" @@ -897,40 +894,40 @@ $OutputTransformations return $propertyParamBlock } - hidden [string] GetParameterAlias($param){ + hidden [string] GetParameterAlias($param) { return "[Alias('$param')]" } - hidden [string] GetParameterAttributes($param){ + hidden [string] GetParameterAttributes($param) { $attributesString = "" - foreach($attrib in $param.Attributes){ + foreach ($attrib in $param.Attributes) { $arrayAttrib = @() try { - if($attrib.ParameterSetName -ne "__AllParameterSets"){ + if ($attrib.ParameterSetName -ne "__AllParameterSets") { $arrayAttrib += "ParameterSetName = `"$($attrib.ParameterSetName)`"" } } catch {} - try { - if($attrib.Mandatory){ + try { + if ($attrib.Mandatory) { $arrayAttrib += "Mandatory = `$true" } - } - catch {} + } + catch {} - try { - if($attrib.ValueFromPipeline){ + try { + if ($attrib.ValueFromPipeline) { $arrayAttrib += "ValueFromPipeline = `$true" } - } - catch {} + } + catch {} try { - if($attrib.ValueFromPipelineByPropertyName){ + if ($attrib.ValueFromPipelineByPropertyName) { $arrayAttrib += "ValueFromPipelineByPropertyName = `$true" } } @@ -938,7 +935,7 @@ $OutputTransformations $strAttrib = $arrayAttrib -Join ', ' - if($strAttrib.Length -gt 0){ + if ($strAttrib.Length -gt 0) { $attributesString += "[Parameter($strAttrib)]`n " } } @@ -953,50 +950,51 @@ $OutputTransformations $param = $Command.Parameters[$paramKey] $paramBlock = "" - if([TransformationTypes]::None -eq $param.ConversionType){ + if ([TransformationTypes]::None -eq $param.ConversionType) { $paramBlock = $this.GetParameterTransformationName($param.Name, $param.Name) } - elseif([TransformationTypes]::Name -eq $param.ConversionType){ - if(($this.cmdtoSkipNameconverssion -notcontains $Command.Generate) -and ($param.Name -eq 'ObjectId' -or $param.Name -eq 'Id') -and $null -ne $param.TargetName){ + elseif ([TransformationTypes]::Name -eq $param.ConversionType) { + if (($this.cmdtoSkipNameconverssion -notcontains $Command.Generate) -and ($param.Name -eq 'ObjectId' -or $param.Name -eq 'Id') -and $null -ne $param.TargetName) { $paramBlock = $this.GetParameterTransformationName($param.TargetName, $param.TargetName) - }else{ + } + else { $paramBlock = $this.GetParameterTransformationName($param.Name, $param.TargetName) } } - elseif([TransformationTypes]::Bool2Switch -eq $param.ConversionType){ + elseif ([TransformationTypes]::Bool2Switch -eq $param.ConversionType) { $paramBlock = $this.GetParameterTransformationBoolean2Switch($param.Name, $param.TargetName) } - elseif([TransformationTypes]::SystemSwitch -eq $param.ConversionType){ + elseif ([TransformationTypes]::SystemSwitch -eq $param.ConversionType) { $paramBlock = $this.GetParameterTransformationSystemSwitch($param.Name) } - elseif([TransformationTypes]::ScriptBlock -eq $param.ConversionType){ + elseif ([TransformationTypes]::ScriptBlock -eq $param.ConversionType) { $paramBlock = $this.GetParameterCustom($param) } - elseif([TransformationTypes]::Remove -eq $param.ConversionType){ + elseif ([TransformationTypes]::Remove -eq $param.ConversionType) { $paramBlock = $this.GetParameterException($param) } $paramsList += $paramBlock } - if("Get" -eq $Command.Verb){ + if ("Get" -eq $Command.Verb) { $paramsList += $this.GetCustomParameterTransformation("Property") } return $paramsList } - hidden [string] GetKeyIdPair($Command){ + hidden [string] GetKeyIdPair($Command) { $keys = @() foreach ($paramKey in $Command.Parameters.Keys) { $param = $Command.Parameters[$paramKey] - if($param.NameChanged){ - if($param.Name -eq "ObjectId"){ + if ($param.NameChanged) { + if ($param.Name -eq "ObjectId") { $keys += "$($param.Name) = `"Id`"" } - elseif($param.Name -eq "Id"){ + elseif ($param.Name -eq "Id") { } - else{ + else { $keys += "$($param.Name) = `"$($param.TargetName)`"" } } @@ -1005,34 +1003,37 @@ $OutputTransformations return "`$keysChanged = @{$($keys -Join "; ")}" } - hidden [string] GetParameterTransformationName([string] $OldName, [string] $NewName){ -# $paramBlock = @" -# if(`$null -ne `$PSBoundParameters["$($OldName)"]) -# { -# `$params["$($NewName)"] = `$PSBoundParameters["$($OldName)"] + hidden [string] GetParameterTransformationName([string] $OldName, [string] $NewName) { + # $paramBlock = @" + # if(`$null -ne `$PSBoundParameters["$($OldName)"]) + # { + # `$params["$($NewName)"] = `$PSBoundParameters["$($OldName)"] -# } + # } -# "@ - $paramBlock = if ($OldName -eq "Top") {@" + # "@ + $paramBlock = if ($OldName -eq "Top") { + @" if (`$PSBoundParameters.ContainsKey(`"Top`")) { `$params["$($NewName)"] = `$PSBoundParameters["$($OldName)"] } "@ - } else {@" + } + else { + @" if (`$null -ne `$PSBoundParameters["$($OldName)"]) { `$params["$($NewName)"] = `$PSBoundParameters["$($OldName)"] } "@ -} + } return $paramBlock } - hidden [string] GetParameterTransformationBoolean2Switch([string] $OldName, [string] $NewName){ + hidden [string] GetParameterTransformationBoolean2Switch([string] $OldName, [string] $NewName) { $paramBlock = @" if(`$null -ne `$PSBoundParameters["$($OldName)"]) { @@ -1046,7 +1047,7 @@ $OutputTransformations return $paramBlock } - hidden [string] GetParameterTransformationSystemSwitch([string] $Name){ + hidden [string] GetParameterTransformationSystemSwitch([string] $Name) { $paramBlock = @" if(`$PSBoundParameters.ContainsKey("$($Name)")) { @@ -1058,12 +1059,12 @@ $OutputTransformations } - hidden [string] GetParameterException([DataMap] $Param){ + hidden [string] GetParameterException([DataMap] $Param) { $paramBlock = "" return $paramBlock } - hidden [string] GetParameterCustom([DataMap] $Param){ + hidden [string] GetParameterCustom([DataMap] $Param) { $paramBlock = @" if(`$null -ne `$PSBoundParameters["$($Param.Name)"]) { @@ -1076,7 +1077,7 @@ $OutputTransformations return $paramBlock } - hidden [string] GetCustomParameterTransformation([string] $ParameterName){ + hidden [string] GetCustomParameterTransformation([string] $ParameterName) { $paramBlock = @" if(`$null -ne `$PSBoundParameters["$($ParameterName)"]) { @@ -1088,41 +1089,41 @@ $OutputTransformations } hidden [string] GetOutputTransformations([PSCustomObject] $Command) { - $responseVerbs = @("Get","Add","New") + $responseVerbs = @("Get", "Add", "New") $output = "" - if($this.CmdCustomizations.ContainsKey($Command.Old)) { + if ($this.CmdCustomizations.ContainsKey($Command.Old)) { $cmd = $this.CmdCustomizations[$Command.Old] - if($null -ne $cmd.Outputs){ - foreach($key in $cmd.Outputs.GetEnumerator()) { - $customOutput = $cmd.Outputs[$key.Name] - if([TransformationTypes]::Name -eq $customOutput.ConversionType){ + if ($null -ne $cmd.Outputs) { + foreach ($key in $cmd.Outputs.GetEnumerator()) { + $customOutput = $cmd.Outputs[$key.Name] + if ([TransformationTypes]::Name -eq $customOutput.ConversionType) { $output += $this.GetOutputTransformationName($customOutput.Name, $customOutput.TargetName) } - elseif([TransformationTypes]::ScriptBlock -eq $customOutput.ConversionType){ + elseif ([TransformationTypes]::ScriptBlock -eq $customOutput.ConversionType) { $output += $this.GetOutputTransformationCustom($customOutput) } - elseif([TransformationTypes]::FlatObject -eq $customOutput.ConversionType){ + elseif ([TransformationTypes]::FlatObject -eq $customOutput.ConversionType) { $output += $this.GetOutputTransformationFlatObject($customOutput) } } } } - foreach($key in $this.GenericOutputTransformations.GetEnumerator()) { - $customOutput = $this.GenericOutputTransformations[$key.Name] - if(2 -eq $customOutput.ConversionType){ + foreach ($key in $this.GenericOutputTransformations.GetEnumerator()) { + $customOutput = $this.GenericOutputTransformations[$key.Name] + if (2 -eq $customOutput.ConversionType) { $output += $this.GetOutputTransformationName($customOutput.Name, $customOutput.TargetName) } - elseif([TransformationTypes]::ScriptBlock -eq $customOutput.ConversionType){ + elseif ([TransformationTypes]::ScriptBlock -eq $customOutput.ConversionType) { $output += $this.GetOutputTransformationCustom($customOutput) } - elseif([TransformationTypes]::FlatObject -eq $customOutput.ConversionType){ + elseif ([TransformationTypes]::FlatObject -eq $customOutput.ConversionType) { $output += $this.GetOutputTransformationFlatObject($customOutput) } } - if("" -ne $output){ + if ("" -ne $output) { $transform = @" `$response | ForEach-Object { if(`$null -ne `$_) { @@ -1135,16 +1136,16 @@ $($output) return "" } - hidden [string] GetOutputTransformationName([string] $OldName, [string] $NewName){ - $outputBlock =@" + hidden [string] GetOutputTransformationName([string] $OldName, [string] $NewName) { + $outputBlock = @" Add-Member -InputObject `$_ -MemberType AliasProperty -Name $($NewName) -Value $($OldName) "@ return $outputBlock } - hidden [string] GetOutputTransformationCustom([DataMap] $Param){ - $outputBlock =@" + hidden [string] GetOutputTransformationCustom([DataMap] $Param) { + $outputBlock = @" $($Param.SpecialMapping) Add-Member -InputObject `$_ -MemberType ScriptProperty -Name $($Param.TargetName) -Value `$Value @@ -1152,15 +1153,15 @@ $($output) return $outputBlock } - hidden [string] GetOutputTransformationFlatObject([DataMap] $Param){ - $outputBlock =@" + hidden [string] GetOutputTransformationFlatObject([DataMap] $Param) { + $outputBlock = @" Add-Member -InputObject `$_ -NotePropertyMembers `$_.$($Param.Name) "@ return $outputBlock } - hidden [hashtable] GetModuleCommands([string[]] $ModuleNames, [string[]] $Prefix, [bool] $IgnoreEmptyNoun = $false){ + hidden [hashtable] GetModuleCommands([string[]] $ModuleNames, [string[]] $Prefix, [bool] $IgnoreEmptyNoun = $false) { $names = @() foreach ($moduleName in $ModuleNames) { @@ -1172,11 +1173,11 @@ $($output) $namesDic = @{} foreach ($name in $names) { $cmdComponents = $this.GetParsedCmd($name, $Prefix) - if(!$cmdComponents){ + if (!$cmdComponents) { $this.MissingCommandsToMap += $name continue } - if($IgnoreEmptyNoun -and !$cmdComponents.Noun) { + if ($IgnoreEmptyNoun -and !$cmdComponents.Noun) { continue } @@ -1186,48 +1187,47 @@ $($output) return $namesDic } - hidden [PSCustomObject] GetParsedCmd([string]$Name, [string[]]$Prefixs){ + hidden [PSCustomObject] GetParsedCmd([string]$Name, [string[]]$Prefixs) { foreach ($prefix in $Prefixs) { $components = $name -split '-' $verb = $components[0] $prefixNoun = $components[1] $components = $prefixNoun -split $prefix - if($components.Length -eq 1) - { + if ($components.Length -eq 1) { continue } $noun = $prefixNoun.Substring($prefix.Length, $prefixNoun.Length - $prefix.Length) return [PSCustomObject] @{ - Verb = $verb - Noun = $noun + Verb = $verb + Noun = $noun Prefix = $prefix } } return $null } - hidden [PSCustomObject] GetNewCmdTranslation($SourceCmdName, $SourceCmdlet, $TargetCmdlets, $NewPrefix){ + hidden [PSCustomObject] GetNewCmdTranslation($SourceCmdName, $SourceCmdlet, $TargetCmdlets, $NewPrefix) { $verbsEquivalence = @{ - 'Get' = @('Get') - 'New' = @('New','Add') - 'Add' = @('New','Add') - 'Remove' = @('Remove','Delete') - 'Delete' = @('Remove','Delete') - 'Set' = @('Set','Update') - 'Update' = @('Set','Update') + 'Get' = @('Get') + 'New' = @('New', 'Add') + 'Add' = @('New', 'Add') + 'Remove' = @('Remove', 'Delete') + 'Delete' = @('Remove', 'Delete') + 'Set' = @('Set', 'Update') + 'Update' = @('Set', 'Update') 'Confirm' = @('Confirm') - 'Enable' = @('New') + 'Enable' = @('New') } $targetCmd = $null - if($this.CmdCustomizations.ContainsKey($SourceCmdName)){ + if ($this.CmdCustomizations.ContainsKey($SourceCmdName)) { $targetCmd = $this.CmdCustomizations[$SourceCmdName].TargetName } else { - foreach ($prefix in $this.DestinationPrefixs){ - foreach ($verb in $verbsEquivalence[$SourceCmdlet.Verb]){ + foreach ($prefix in $this.DestinationPrefixs) { + foreach ($verb in $verbsEquivalence[$SourceCmdlet.Verb]) { $tmpCmd = "$($verb)-$($prefix)$($SourceCmdlet.Noun)" - if($TargetCmdlets.ContainsKey($tmpCmd)){ + if ($TargetCmdlets.ContainsKey($tmpCmd)) { $targetCmd = $tmpCmd; break; } @@ -1235,10 +1235,11 @@ $($output) } } - if($null -ne $targetCmd){ - if($SourceCmdlet.Prefix.contains('MS')){ + if ($null -ne $targetCmd) { + if ($SourceCmdlet.Prefix.contains('MS')) { $Prefix = $NewPrefix - } else { + } + else { $prefix = $NewPrefix } @@ -1254,16 +1255,16 @@ $($output) default { $NewName = $SourceCmdlet.Noun } } $cmd = [PSCustomObject]@{ - Old = '{0}-{1}{2}' -f $SourceCmdlet.Verb, $SourceCmdlet.Prefix, $SourceCmdlet.Noun - New = $targetCmd - Generate = '{0}-{1}{2}' -f $SourceCmdlet.Verb, $Prefix, $NewName - Noun = $SourceCmdlet.Noun - Verb = $SourceCmdlet.Verb - Parameters = $null + Old = '{0}-{1}{2}' -f $SourceCmdlet.Verb, $SourceCmdlet.Prefix, $SourceCmdlet.Noun + New = $targetCmd + Generate = '{0}-{1}{2}' -f $SourceCmdlet.Verb, $Prefix, $NewName + Noun = $SourceCmdlet.Noun + Verb = $SourceCmdlet.Verb + Parameters = $null DefaultParameterSet = "" - CustomScript = $null + CustomScript = $null } - if('' -eq $targetCmd){ + if ('' -eq $targetCmd) { $cmd.CustomScript = $this.CmdCustomizations[$SourceCmdName].CustomScript } $cmd.Parameters = $this.GetCmdletParameters($cmd) @@ -1275,19 +1276,19 @@ $($output) return $null } - hidden [string] GetDefaultParameterSet($Cmdlet){ + hidden [string] GetDefaultParameterSet($Cmdlet) { $sourceCmd = Get-Command -Name $Cmdlet return $sourceCmd.DefaultParameterSet } - hidden [hashtable] GetCmdletParameters($Cmdlet){ + hidden [hashtable] GetCmdletParameters($Cmdlet) { $Bool2Switch = @("All") $SystemDebug = @("Verbose", "Debug") $commonParameterNames = @("ErrorAction", "ErrorVariable", "WarningAction", "WarningVariable", "OutBuffer", "PipelineVariable", "OutVariable", "InformationAction", "InformationVariable") $sourceCmd = Get-Command -Name $Cmdlet.Old $targetCmd = $null - if('' -ne $Cmdlet.New){ + if ('' -ne $Cmdlet.New) { $targetCmd = Get-Command -Name $Cmdlet.New } @@ -1296,68 +1297,67 @@ $($output) $param = $sourceCmd.Parameters[$paramKey] $paramObj = [DataMap]::New($param.Name) - if($this.CmdCustomizations.ContainsKey($Cmdlet.Old)) { + if ($this.CmdCustomizations.ContainsKey($Cmdlet.Old)) { $custom = $this.CmdCustomizations[$Cmdlet.Old] - if(($null -ne $custom.Parameters) -and ($custom.Parameters.contains($param.Name))){ + if (($null -ne $custom.Parameters) -and ($custom.Parameters.contains($param.Name))) { $paramsList.Add($param.Name, $custom.Parameters[$param.Name]) continue } - if($custom.SpecialMapping) { + if ($custom.SpecialMapping) { $paramObj.SetNone() $paramsList.Add($param.Name, $paramObj) continue } } - if($this.GenericParametersTransformations.ContainsKey($param.Name)) { + if ($this.GenericParametersTransformations.ContainsKey($param.Name)) { $genericParam = $this.GenericParametersTransformations[$param.Name] - if(5 -eq $genericParam.ConversionType){ + if (5 -eq $genericParam.ConversionType) { $tempName = "$($Cmdlet.Noun)$($genericParam.TargetName)" - if($targetCmd.Parameters.ContainsKey($tempName)){ + if ($targetCmd.Parameters.ContainsKey($tempName)) { $paramObj.SetTargetName($tempName) } - elseif($targetCmd.Parameters.ContainsKey($genericParam.TargetName)){ + elseif ($targetCmd.Parameters.ContainsKey($genericParam.TargetName)) { $paramObj.SetTargetName($genericParam.TargetName) } - else - { + else { foreach ($key in $targetCmd.Parameters.Keys) { - if($key.EndsWith($genericParam.TargetName)){ + if ($key.EndsWith($genericParam.TargetName)) { $paramObj.SetTargetName($key) break } } } - $paramsList.Add($paramObj.Name,$paramObj) - }else{ + $paramsList.Add($paramObj.Name, $paramObj) + } + else { $paramsList.Add($genericParam.Name, $genericParam) } continue } - if($commonParameterNames.Contains($param.Name)) { + if ($commonParameterNames.Contains($param.Name)) { $paramObj.SetNone() } - elseif($Bool2Switch.Contains($param.Name)) { + elseif ($Bool2Switch.Contains($param.Name)) { $paramObj.SetBool2Switch($param.Name) } - elseif($SystemDebug.Contains($param.Name)) { + elseif ($SystemDebug.Contains($param.Name)) { $paramObj.SetSystemSwitch($param.Name) } - else - { - if($targetCmd.Parameters.ContainsKey($param.Name)){ + else { + if ($targetCmd.Parameters.ContainsKey($param.Name)) { $paramObj.SetNone() } } - $paramsList.Add($paramObj.Name,$paramObj) + $paramsList.Add($paramObj.Name, $paramObj) } return $paramsList } - hidden [string] GetFileHeader(){ + hidden [string] GetFileHeader() { return @" # ------------------------------------------------------------------------------ # Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License in the project root for license information. diff --git a/src/EntraAliasDefinitions.ps1 b/src/EntraAliasDefinitions.ps1 index 46582b3ced..1723df121e 100644 --- a/src/EntraAliasDefinitions.ps1 +++ b/src/EntraAliasDefinitions.ps1 @@ -14,4 +14,5 @@ Set-Alias -Name New-EntraServiceAppRoleAssignment -Value New-EntraServicePrincip Set-Alias -Name Add-EntraCustomSecurityAttributeDefinitionAllowedValues -Value Add-EntraCustomSecurityAttributeDefinitionAllowedValue -Scope Global -Force Set-Alias -Name Get-EntraAuditDirectoryLogs -Value Get-EntraAuditDirectoryLog -Scope Global -Force Set-Alias -Name Get-EntraAuditSignInLogs -Value Get-EntraAuditSignInLog -Scope Global -Force -Set-Alias -Name Add-EntraScopedRoleMembership -Value New-EntraScopedRoleMembership -Scope Global -Force \ No newline at end of file +Set-Alias -Name Add-EntraScopedRoleMembership -Value New-EntraScopedRoleMembership -Scope Global -Force +Set-Alias -Name Add-EntraAdministrativeUnitMember -Value New-EntraAdministrativeUnitMember -Scope Global -Force \ No newline at end of file diff --git a/test/module/Entra/Add-EntraAdministrativeUnitMember.Tests.ps1 b/test/module/Entra/New-EntraAdministrativeUnitMember.Tests.ps1 similarity index 79% rename from test/module/Entra/Add-EntraAdministrativeUnitMember.Tests.ps1 rename to test/module/Entra/New-EntraAdministrativeUnitMember.Tests.ps1 index df380af320..db01041ebb 100644 --- a/test/module/Entra/Add-EntraAdministrativeUnitMember.Tests.ps1 +++ b/test/module/Entra/New-EntraAdministrativeUnitMember.Tests.ps1 @@ -10,36 +10,36 @@ BeforeAll { Mock -CommandName Invoke-GraphRequest -MockWith {} -ModuleName Microsoft.Graph.Entra } -Describe "Add-EntraAdministrativeUnitMember tests"{ +Describe "New-EntraAdministrativeUnitMember tests"{ It "Should return empty object"{ - $result = Add-EntraAdministrativeUnitMember -AdministrativeUnitId "f306a126-cf2e-439d-b20f-95ce4bcb7ffa" -RefObjectId "d6873b36-81d6-4c5e-bec0-9e3ca2c86846" + $result = New-EntraAdministrativeUnitMember -AdministrativeUnitId "f306a126-cf2e-439d-b20f-95ce4bcb7ffa" -RefObjectId "d6873b36-81d6-4c5e-bec0-9e3ca2c86846" $result | Should -BeNullOrEmpty Should -Invoke -CommandName Invoke-GraphRequest -ModuleName Microsoft.Graph.Entra -Times 1 } It "Should return empty object with ObjectId"{ - $result = Add-EntraAdministrativeUnitMember -ObjectId "f306a126-cf2e-439d-b20f-95ce4bcb7ffa" -RefObjectId "d6873b36-81d6-4c5e-bec0-9e3ca2c86846" + $result = New-EntraAdministrativeUnitMember -ObjectId "f306a126-cf2e-439d-b20f-95ce4bcb7ffa" -RefObjectId "d6873b36-81d6-4c5e-bec0-9e3ca2c86846" $result | Should -BeNullOrEmpty Should -Invoke -CommandName Invoke-GraphRequest -ModuleName Microsoft.Graph.Entra -Times 1 } It "Should fail when AdministrativeUnitId is empty"{ - { Add-EntraAdministrativeUnitMember -AdministrativeUnitId "" } | Should -Throw "Cannot bind argument to parameter 'AdministrativeUnitId'*" + { New-EntraAdministrativeUnitMember -AdministrativeUnitId "" } | Should -Throw "Cannot bind argument to parameter 'AdministrativeUnitId'*" } It "Should fail when AdministrativeUnitId is null"{ - { Add-EntraAdministrativeUnitMember -AdministrativeUnitId } | Should -Throw "Missing an argument for parameter 'AdministrativeUnitId'*" + { New-EntraAdministrativeUnitMember -AdministrativeUnitId } | Should -Throw "Missing an argument for parameter 'AdministrativeUnitId'*" } It "Should fail when RefObjectId is empty"{ - { Add-EntraAdministrativeUnitMember -RefObjectId "" } | Should -Throw "Cannot bind argument to parameter 'RefObjectId'*" + { New-EntraAdministrativeUnitMember -RefObjectId "" } | Should -Throw "Cannot bind argument to parameter 'RefObjectId'*" } It "Should fail when RefObjectId is null"{ - { Add-EntraAdministrativeUnitMember -RefObjectId } | Should -Throw "Missing an argument for parameter 'RefObjectId'*" + { New-EntraAdministrativeUnitMember -RefObjectId } | Should -Throw "Missing an argument for parameter 'RefObjectId'*" } It "Should fail when invalid paramter is passed"{ - { Add-EntraAdministrativeUnitMember -Demo } | Should -Throw "A parameter cannot be found that matches parameter name 'Demo'*" + { New-EntraAdministrativeUnitMember -Demo } | Should -Throw "A parameter cannot be found that matches parameter name 'Demo'*" } It "Should contain 'User-Agent' header" { - $userAgentHeaderValue = "PowerShell/$psVersion EntraPowershell/$entraVersion Add-EntraAdministrativeUnitMember" - Add-EntraAdministrativeUnitMember -AdministrativeUnitId "aaaaaaaa-1111-2222-3333-cccccccccccc" -RefObjectId "bbbbbbbb-1111-2222-3333-cccccccccccc" - $userAgentHeaderValue = "PowerShell/$psVersion EntraPowershell/$entraVersion Add-EntraAdministrativeUnitMember" + $userAgentHeaderValue = "PowerShell/$psVersion EntraPowershell/$entraVersion New-EntraAdministrativeUnitMember" + New-EntraAdministrativeUnitMember -AdministrativeUnitId "aaaaaaaa-1111-2222-3333-cccccccccccc" -RefObjectId "bbbbbbbb-1111-2222-3333-cccccccccccc" + $userAgentHeaderValue = "PowerShell/$psVersion EntraPowershell/$entraVersion New-EntraAdministrativeUnitMember" Should -Invoke -CommandName Invoke-GraphRequest -ModuleName Microsoft.Graph.Entra -Times 1 -ParameterFilter { $Headers.'User-Agent' | Should -Be $userAgentHeaderValue $true @@ -52,7 +52,7 @@ Describe "Add-EntraAdministrativeUnitMember tests"{ try { # Act & Assert: Ensure the function doesn't throw an exception - { Add-EntraAdministrativeUnitMember -AdministrativeUnitId "f306a126-cf2e-439d-b20f-95ce4bcb7ffa" -RefObjectId "d6873b36-81d6-4c5e-bec0-9e3ca2c86846" -Debug } | Should -Not -Throw + { New-EntraAdministrativeUnitMember -AdministrativeUnitId "f306a126-cf2e-439d-b20f-95ce4bcb7ffa" -RefObjectId "d6873b36-81d6-4c5e-bec0-9e3ca2c86846" -Debug } | Should -Not -Throw } finally { # Restore original confirmation preference $DebugPreference = $originalDebugPreference From eaa48696ce70cff5fe9745ad2dbdddb6c7ec408d Mon Sep 17 00:00:00 2001 From: Steve Mutungi <132555836+SteveMutungi254@users.noreply.github.com> Date: Wed, 13 Nov 2024 11:27:05 +0300 Subject: [PATCH 10/11] Updating toc entry --- module/docs/entra-powershell-v1.0/toc.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/docs/entra-powershell-v1.0/toc.yml b/module/docs/entra-powershell-v1.0/toc.yml index 4c2570f49c..5e0515d6b9 100644 --- a/module/docs/entra-powershell-v1.0/toc.yml +++ b/module/docs/entra-powershell-v1.0/toc.yml @@ -14,8 +14,8 @@ href: Microsoft.Graph.Entra/Add-EntraGroupMember.md - name: Add-EntraGroupOwner href: Microsoft.Graph.Entra/Add-EntraGroupOwner.md - - name: Add-EntraAdministrativeUnitMember - href: Microsoft.Graph.Entra/Add-EntraAdministrativeUnitMember.md + - name: New-EntraAdministrativeUnitMember + href: Microsoft.Graph.Entra/New-EntraAdministrativeUnitMember.md - name: Add-EntraApplicationOwner href: Microsoft.Graph.Entra/Add-EntraApplicationOwner.md - name: Add-EntraLifecyclePolicyGroup From 48f72adea2ddbc7fe60e4594ac5e668355a92844 Mon Sep 17 00:00:00 2001 From: Steve Mutungi <132555836+SteveMutungi254@users.noreply.github.com> Date: Wed, 13 Nov 2024 11:37:45 +0300 Subject: [PATCH 11/11] Adding required roles --- .../New-EntraAdministrativeUnitMember.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/New-EntraAdministrativeUnitMember.md b/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/New-EntraAdministrativeUnitMember.md index 40dc44856d..e976b49ba4 100644 --- a/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/New-EntraAdministrativeUnitMember.md +++ b/module/docs/entra-powershell-v1.0/Microsoft.Graph.Entra/New-EntraAdministrativeUnitMember.md @@ -38,7 +38,9 @@ The `New-EntraAdministrativeUnitMember` cmdlet adds a Microsoft Entra ID adminis Administrative units enable more granular management of permissions and access, particularly in large organizations or where administrative responsibilities are divided across departments or regions. -To add a user, group, or device to an administrative unit, the calling principal must be assigned at least the Privileged Role Administrator Microsoft Entra role. +To add a user, group, or device to an administrative unit, the calling principal must be assigned at least one of the following roles: + +- Privileged Role Administrator ## Examples