From f4c758c6e21a23773532334ea839b8be70d7996d Mon Sep 17 00:00:00 2001 From: Gert Van Der Heyden Date: Fri, 20 Sep 2024 15:15:22 +0200 Subject: [PATCH 01/18] added EmailValue option to use user principal name as email too --- d365fo.tools/functions/import-d365aaduser.ps1 | 37 ++++++++++++++----- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/d365fo.tools/functions/import-d365aaduser.ps1 b/d365fo.tools/functions/import-d365aaduser.ps1 index abf0ea94..5869e85d 100644 --- a/d365fo.tools/functions/import-d365aaduser.ps1 +++ b/d365fo.tools/functions/import-d365aaduser.ps1 @@ -63,6 +63,12 @@ .PARAMETER AadGroupId Azure Active directory user group ID containing users to be imported + .PARAMETER EmailValue + Specify which field to use as EMAIL value when importing the users. + Available options 'Mail' / 'UserPrincipalName' + + Default is 'Mail' + .EXAMPLE PS C:\> Import-D365AadUser -Users "Claire@contoso.com","Allen@contoso.com" @@ -164,7 +170,11 @@ function Import-D365AadUser { [switch] $ForceExactAadGroupName, [Parameter(Mandatory = $true, Position = 14, ParameterSetName = "GroupIdImport")] - [string] $AadGroupId + [string] $AadGroupId, + + [Parameter(Mandatory = $false, Position = 15)] + [ValidateSet('Mail', 'UserPrincipalName')] + [string] $EmailValue = "Mail" ) $UseTrustedConnection = Test-TrustedConnection $PSBoundParameters @@ -253,10 +263,11 @@ function Import-D365AadUser { if ($SkipAzureAd -eq $true) { $name = Get-LoginFromEmail $user $null = $azureAdUsers.Add([PSCustomObject]@{ - Mail = $user - GivenName = $name - DisplayName = $name - ObjectId = '' + Mail = $user + GivenName = $name + DisplayName = $name + ObjectId = '' + UserPrincipalName = $user }) } else { @@ -324,14 +335,22 @@ function Import-D365AadUser { if ($NameValue -eq 'DisplayName') { $name = $user.DisplayName + $NameSuffix } - else { $name = $user.GivenName + $NameSuffix } - Write-PSFMessage -Level Verbose -Message "Name for user $($user.Mail) : $name" - Write-PSFMessage -Level Verbose -Message "Importing $($user.Mail) - SID $sid - Provider $identityProvider" - Import-AadUserIntoD365FO $SqlCommand $user.Mail $name $id $sid $StartupCompany $identityProvider $networkDomain $user.ObjectId + $email = "" + if ($EmailValue -eq 'Mail') { + $email = $user.Mail + } + else { + $email = $user.UserPrincipalName + } + + Write-PSFMessage -Level Verbose -Message "Name for user $email : $name" + Write-PSFMessage -Level Verbose -Message "Importing $email - SID $sid - Provider $identityProvider" + + Import-AadUserIntoD365FO $SqlCommand $email $name $id $sid $StartupCompany $identityProvider $networkDomain $user.ObjectId if (Test-PSFFunctionInterrupt) { return } } From c8b621a6b6bc1fc0841ed4f981215509cb305b76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=B6tz=20Jensen?= Date: Mon, 23 Sep 2024 18:39:42 +0200 Subject: [PATCH 02/18] add Import-D365AadUser V2 version add in https://github.com/d365collaborative/d365fo.tools/issues/856#issuecomment-2368169697 --- d365fo.tools/functions/import-d365aaduser.ps1 | 63 +++++++++++++------ 1 file changed, 44 insertions(+), 19 deletions(-) diff --git a/d365fo.tools/functions/import-d365aaduser.ps1 b/d365fo.tools/functions/import-d365aaduser.ps1 index 5869e85d..d7d0946f 100644 --- a/d365fo.tools/functions/import-d365aaduser.ps1 +++ b/d365fo.tools/functions/import-d365aaduser.ps1 @@ -192,11 +192,11 @@ function Import-D365AadUser { Write-PSFMessage -Level Verbose -Message "Trying to connect to the Azure Active Directory" if ($PSBoundParameters.ContainsKey("AzureAdCredential") -eq $true) { - $null = Connect-AzureAD -ErrorAction Stop -Credential $AzureAdCredential + Login-AzAccount -Credential $AzureAdCredential -ErrorAction Stop } else { if ($SkipAzureAd -eq $false) { - $null = Connect-AzureAD -ErrorAction Stop + Login-AzAccount -ErrorAction Stop } } } @@ -212,16 +212,31 @@ function Import-D365AadUser { if ($PSCmdlet.ParameterSetName -eq 'GroupIdImport') { Write-PSFMessage -Level Verbose -Message "Search AadGroup by its ID : $AadGroupId" - $group = Get-AzureADGroup -ObjectId $AadGroupId + + $resObj = Invoke-AzRestMethod -Uri "https://graph.microsoft.com/v1.0/groups/$AadGroupId" + + if ($resObj.StatusCode -like "2**") { + $group = $resObj.Content | ConvertFrom-Json + } } else { if ($ForceExactAadGroupName) { Write-PSFMessage -Level Verbose -Message "Search AadGroup by its exactly name : $AadGroupName" - $group = Get-AzureADGroup -Filter "DisplayName eq '$AadGroupName'" + + $resObj = Invoke-AzRestMethod -Uri "https://graph.microsoft.com/v1.0/groups?`$filter=DisplayName eq '$AadGroupName'" + + if ($resObj.StatusCode -like "2**") { + $group = $resObj.Content | ConvertFrom-Json | Select-Object -ExpandProperty value + } } else { Write-PSFMessage -Level Verbose -Message "Search AadGroup by searching with its name : $AadGroupName" - $group = Get-AzureADGroup -SearchString $AadGroupName + + $resObj = Invoke-AzRestMethod -Uri "https://graph.microsoft.com/v1.0/groups?`$filter=startswith(DisplayName,'$AadGroupName')" + + if ($resObj.StatusCode -like "2**") { + $group = $resObj.Content | ConvertFrom-Json | Select-Object -ExpandProperty value + } } } @@ -243,16 +258,22 @@ function Import-D365AadUser { return } - $userlist = Get-AzureADGroupMember -ObjectId $group[0].ObjectId + $resMembersObj = Invoke-AzRestMethod -Uri "https://graph.microsoft.com/v1.0/groups/$($group.id)/members" + + if ($resMembersObj.StatusCode -like "2**") { + $userlist = $resMembersObj.Content | ConvertFrom-Json | Select-Object -ExpandProperty value + } foreach ($user in $userlist) { - if ($user.ObjectType -eq "User") { - $azureAdUser = Get-AzureADUser -ObjectId $user.ObjectId - if ($null -eq $azureAdUser.Mail) { + if ($user.'@odata.type' -eq "#microsoft.graph.user") { + + $azureAdUser = Invoke-AzRestMethod -Uri "https://graph.microsoft.com/v1.0/users/$($user.id)" + + if ($null -eq $azureAdUser.mail) { Write-PSFMessage -Level Critical "User $($user.ObjectId) did not have an Mail" } else { - $null = $azureAdUsers.Add((Get-AzureADUser -ObjectId $user.ObjectId)) + $null = $azureAdUsers.Add($azureAdUser) } } } @@ -263,15 +284,19 @@ function Import-D365AadUser { if ($SkipAzureAd -eq $true) { $name = Get-LoginFromEmail $user $null = $azureAdUsers.Add([PSCustomObject]@{ - Mail = $user - GivenName = $name - DisplayName = $name - ObjectId = '' - UserPrincipalName = $user + mail = $user + givenName = $name + displayName = $name + ObjectId = '' + userPrincipalName = $user }) } else { - $aadUser = Get-AzureADUser -SearchString $user + $resObj = Invoke-AzRestMethod -Uri "https://graph.microsoft.com/v1.0/users?`$filter=mail eq '$user' or userPrincipalName eq '$user'" + + if ($resObj.StatusCode -like "2**") { + $aadUser = $resObj.Content | ConvertFrom-Json | Select-Object -ExpandProperty value | Select-Object -First 1 + } if ($null -eq $aadUser) { Write-PSFMessage -Level Critical "Could not find user $user in AzureAAd" @@ -316,7 +341,7 @@ function Import-D365AadUser { if ($IdValue -eq 'Login') { $id = $IdPrefix + $(Get-LoginFromEmail $user.Mail) } - elseif($IdValue -eq 'UserPrincipalName') { + elseif ($IdValue -eq 'UserPrincipalName') { $id = $IdPrefix + $user.UserPrincipalName } else { @@ -325,11 +350,10 @@ function Import-D365AadUser { if ($id.Length -gt 20) { $oldId = $id - $id = $id -replace '^(.{0,20}).*','$1' + $id = $id -replace '^(.{0,20}).*', '$1' Write-PSFMessage -Level Host -Message "The id '$oldId' does not fit the 20 character limit on UserInfo table's ID field and will be truncated to '$id'" } - Write-PSFMessage -Level Verbose -Message "Id for user $($user.Mail) : $id" $name = "" if ($NameValue -eq 'DisplayName') { @@ -347,6 +371,7 @@ function Import-D365AadUser { $email = $user.UserPrincipalName } + Write-PSFMessage -Level Verbose -Message "Id for user $email : $id" Write-PSFMessage -Level Verbose -Message "Name for user $email : $name" Write-PSFMessage -Level Verbose -Message "Importing $email - SID $sid - Provider $identityProvider" From 5168329a5ab6c30fd57eec74b4a0ef58eab41f21 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Tue, 24 Sep 2024 18:15:40 +0200 Subject: [PATCH 03/18] add tenant id parameter --- d365fo.tools/functions/import-d365aaduser.ps1 | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/d365fo.tools/functions/import-d365aaduser.ps1 b/d365fo.tools/functions/import-d365aaduser.ps1 index d7d0946f..0211b5e0 100644 --- a/d365fo.tools/functions/import-d365aaduser.ps1 +++ b/d365fo.tools/functions/import-d365aaduser.ps1 @@ -174,7 +174,9 @@ function Import-D365AadUser { [Parameter(Mandatory = $false, Position = 15)] [ValidateSet('Mail', 'UserPrincipalName')] - [string] $EmailValue = "Mail" + [string] $EmailValue = "Mail", + + [string] $TenantId ) $UseTrustedConnection = Test-TrustedConnection $PSBoundParameters @@ -192,11 +194,11 @@ function Import-D365AadUser { Write-PSFMessage -Level Verbose -Message "Trying to connect to the Azure Active Directory" if ($PSBoundParameters.ContainsKey("AzureAdCredential") -eq $true) { - Login-AzAccount -Credential $AzureAdCredential -ErrorAction Stop + Login-AzAccount -Credential $AzureAdCredential -ErrorAction Stop -TenantId $TenantId } else { if ($SkipAzureAd -eq $false) { - Login-AzAccount -ErrorAction Stop + Login-AzAccount -ErrorAction Stop -TenantId $TenantId } } } From 26b2eac499d8c9d2a2f132bd0a90e15a8c9fc5ec Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Thu, 3 Oct 2024 12:24:47 +0200 Subject: [PATCH 04/18] add TenantId variable --- d365fo.tools/internal/scripts/variables.ps1 | 1 + 1 file changed, 1 insertion(+) diff --git a/d365fo.tools/internal/scripts/variables.ps1 b/d365fo.tools/internal/scripts/variables.ps1 index 4bcd088f..7320cf52 100644 --- a/d365fo.tools/internal/scripts/variables.ps1 +++ b/d365fo.tools/internal/scripts/variables.ps1 @@ -39,6 +39,7 @@ Update-ModuleVariables $environment = Get-ApplicationEnvironment $Script:AOSPath = $environment.Aos.AppRoot +$Script:TenantId = $environment.Aad.TenantDomainGUID $dataAccess = $environment.DataAccess From 569fc0360f52345a69a3968be82a434798a59fd3 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Thu, 3 Oct 2024 12:25:13 +0200 Subject: [PATCH 05/18] improve environment variables structure --- d365fo.tools/internal/scripts/variables.ps1 | 45 ++++++++++++--------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/d365fo.tools/internal/scripts/variables.ps1 b/d365fo.tools/internal/scripts/variables.ps1 index 7320cf52..d11d21ab 100644 --- a/d365fo.tools/internal/scripts/variables.ps1 +++ b/d365fo.tools/internal/scripts/variables.ps1 @@ -36,56 +36,61 @@ $Script:MRConfigFile = 'C:\FinancialReporting\Server\ApplicationService\bin\MRSe #Update all module variables Update-ModuleVariables +# Environment variables $environment = Get-ApplicationEnvironment -$Script:AOSPath = $environment.Aos.AppRoot $Script:TenantId = $environment.Aad.TenantDomainGUID -$dataAccess = $environment.DataAccess +$aos = $environment.Aos +$Script:AOSPath = $aos.AppRoot +$Script:PackageDirectory = $aos.PackageDirectory +$Script:MetaDataDir = $aos.MetadataDirectory +$dataAccess = $environment.DataAccess $Script:DatabaseServer = $dataAccess.DbServer - $Script:DatabaseName = $dataAccess.Database +$Script:DatabaseUserName = $dataAccess.SqlUser +$Script:DatabaseUserPassword = $dataAccess.SqlPwd -$Script:BinDir = $environment.Common.BinDir - -$Script:PackageDirectory = $environment.Aos.PackageDirectory - -$Script:MetaDataDir = $environment.Aos.MetadataDirectory - -$Script:BinDirTools = $environment.Common.DevToolsBinDir +$common = $environment.Common +$Script:BinDir = $common.BinDir +$Script:BinDirTools = $common.DevToolsBinDir +$Script:IsOnebox = $common.IsOneboxEnvironment $Script:ServerRole = [ServerRole]::Unknown -$RoleVaule = $(If ($environment.Monitoring.MARole -eq "" -or $environment.Monitoring.MARole -eq "dev") { "Development" } Else { $environment.Monitoring.MARole }) - +$RoleVaule = $( + If ($environment.Monitoring.MARole -eq "" -or $environment.Monitoring.MARole -eq "dev") { + "Development" + } Else { + $environment.Monitoring.MARole + } +) if ($null -ne $RoleVaule) { $Script:ServerRole = [ServerRole][Enum]::Parse([type]"ServerRole", $RoleVaule, $true); } +$infrastructure = $environment.Infrastructure $Script:EnvironmentType = [EnvironmentType]::Unknown $Script:CanUseTrustedConnection = $false -if ($environment.Infrastructure.HostName -like "*cloud.onebox.dynamics.com*") { +if ($infrastructure.HostName -like "*cloud.onebox.dynamics.com*") { $Script:EnvironmentType = [EnvironmentType]::LocalHostedTier1 $Script:CanUseTrustedConnection = $true } -elseif ($environment.Infrastructure.HostName -match "(cloudax|axcloud).*dynamics.com") { +elseif ($infrastructure.HostName -match "(cloudax|axcloud).*dynamics.com") { $Script:EnvironmentType = [EnvironmentType]::AzureHostedTier1 $Script:CanUseTrustedConnection = $true } -elseif ($environment.Infrastructure.HostName -like "*sandbox.ax.dynamics.com*") { +elseif ($infrastructure.HostName -like "*sandbox.ax.dynamics.com*") { $Script:EnvironmentType = [EnvironmentType]::MSHostedTier1 $Script:CanUseTrustedConnection = $true } -elseif ($environment.Infrastructure.HostName -like "*sandbox.operations.*dynamics.com*") { +elseif ($infrastructure.HostName -like "*sandbox.operations.*dynamics.com*") { $Script:EnvironmentType = [EnvironmentType]::MSHostedTier2 } +$Script:Url = $infrastructure.HostUrl -$Script:Url = $environment.Infrastructure.HostUrl -$Script:DatabaseUserName = $dataAccess.SqlUser -$Script:DatabaseUserPassword = $dataAccess.SqlPwd $Script:Company = "DAT" -$Script:IsOnebox = $environment.Common.IsOneboxEnvironment $RegSplat = @{ Path = "HKLM:\SOFTWARE\Microsoft\Dynamics\Deployment\" From e542b1cf87bfb40c589f2fefca99c1ed244245c1 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Thu, 3 Oct 2024 12:29:29 +0200 Subject: [PATCH 06/18] provide default tenant id --- d365fo.tools/functions/import-d365aaduser.ps1 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/d365fo.tools/functions/import-d365aaduser.ps1 b/d365fo.tools/functions/import-d365aaduser.ps1 index 0211b5e0..b59fb2c0 100644 --- a/d365fo.tools/functions/import-d365aaduser.ps1 +++ b/d365fo.tools/functions/import-d365aaduser.ps1 @@ -176,7 +176,8 @@ function Import-D365AadUser { [ValidateSet('Mail', 'UserPrincipalName')] [string] $EmailValue = "Mail", - [string] $TenantId + [Parameter(Mandatory = $false, Position = 16)] + [string] $TenantId = $Script:TenantId ) $UseTrustedConnection = Test-TrustedConnection $PSBoundParameters From 218e9609e0ef8d398521cd39f2379375619bd902 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Thu, 3 Oct 2024 12:56:25 +0200 Subject: [PATCH 07/18] remove AzureAD dependency resolves #744 --- .github/workflows/dependencies.yml | 5 ----- build/vsts-prerequisites.ps1 | 2 +- build/vsts-validate-psscriptanalyzer.ps1 | 2 +- build/vsts-validate.ps1 | 2 +- d365fo.tools/d365fo.tools.psd1 | 1 - 5 files changed, 3 insertions(+), 9 deletions(-) diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml index 1e6a0c66..ef06655b 100644 --- a/.github/workflows/dependencies.yml +++ b/.github/workflows/dependencies.yml @@ -14,11 +14,6 @@ jobs: uses: PowershellFrameworkCollective/psframework@32c18f13173be8cc6b6803c63c40b9d7ab5aec12 # version 1.0.12 - name: Azure.Storage uses: Azure/azure-powershell@v4.4.0-September2017 # unclear which commit/tag corresponds to https://www.powershellgallery.com/packages/Azure.Storage/4.4.0 - # AzureAd does not seem to have a public GitHub repository - # - name: AzureAd - # uses: - - name: PSNotification - uses: Splaxi/PSNotification@b344c3dfdb04db1a338f203d1a0c5ae72d67ae89 # version 0.5.3 - name: PSOAuthHelper uses: Splaxi/PSOAuthHelper@837a2da63bf76e86f339a4e43e38df5a3b82affe # version 0.3.0 - name: ImportExcel diff --git a/build/vsts-prerequisites.ps1 b/build/vsts-prerequisites.ps1 index 68dda50d..19149705 100644 --- a/build/vsts-prerequisites.ps1 +++ b/build/vsts-prerequisites.ps1 @@ -2,7 +2,7 @@ Write-Host "The user running is: $($env:UserName)" # $modules = @("PSFramework", "Az.Storage", "AzureAd", "PSNotification", "PSOAuthHelper", "PowerShellGet", "PackageManagement","ImportExcel","PSScriptAnalyzer") -$modules = @("PSFramework", "PSScriptAnalyzer", "Az.Storage", "AzureAd", "PSNotification", "PSOAuthHelper", "ImportExcel") +$modules = @("PSFramework", "PSScriptAnalyzer", "Az.Storage", "PSOAuthHelper", "ImportExcel") Install-Module "Pester" -MaximumVersion 4.99.99 -Force -Confirm:$false -Scope CurrentUser -AllowClobber -SkipPublisherCheck diff --git a/build/vsts-validate-psscriptanalyzer.ps1 b/build/vsts-validate-psscriptanalyzer.ps1 index 98892d91..d3ae8474 100644 --- a/build/vsts-validate-psscriptanalyzer.ps1 +++ b/build/vsts-validate-psscriptanalyzer.ps1 @@ -14,7 +14,7 @@ Write-Host "Working on the machine named: $($env:computername)" Write-Host "The user running is: $($env:UserName)" -$modules = @("PSFramework", "PSScriptAnalyzer", "Az.Storage", "AzureAd", "PSNotification", "PSOAuthHelper", "ImportExcel") +$modules = @("PSFramework", "PSScriptAnalyzer", "Az.Storage", "PSOAuthHelper", "ImportExcel") foreach ($item in $modules) { $module = Get-Module -Name $item -ErrorAction SilentlyContinue diff --git a/build/vsts-validate.ps1 b/build/vsts-validate.ps1 index e17d06b2..80a1f362 100644 --- a/build/vsts-validate.ps1 +++ b/build/vsts-validate.ps1 @@ -17,7 +17,7 @@ Write-Host "Working on the machine named: $($env:computername)" Write-Host "The user running is: $($env:UserName)" -$modules = @("PSFramework", "PSScriptAnalyzer", "Az.Storage", "AzureAd", "PSNotification", "PSOAuthHelper", "ImportExcel") +$modules = @("PSFramework", "PSScriptAnalyzer", "Az.Storage", "PSOAuthHelper", "ImportExcel") foreach ($item in $modules) { $module = Get-Module -Name $item -ErrorAction SilentlyContinue diff --git a/d365fo.tools/d365fo.tools.psd1 b/d365fo.tools/d365fo.tools.psd1 index 42054bbb..7acdeb3e 100644 --- a/d365fo.tools/d365fo.tools.psd1 +++ b/d365fo.tools/d365fo.tools.psd1 @@ -30,7 +30,6 @@ RequiredModules = @( @{ ModuleName = 'PSFramework'; ModuleVersion = '1.0.12' } , @{ ModuleName = 'Az.Storage'; ModuleVersion = '1.11.0' } - , @{ ModuleName = 'AzureAd'; ModuleVersion = '2.0.1.16' } , @{ ModuleName = 'PSOAuthHelper'; ModuleVersion = '0.3.0' } , @{ ModuleName = 'ImportExcel'; ModuleVersion = '7.1.0' } ) From 5a07a68396addc3cdc7a4615ad4998fe0c9e7244 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Thu, 3 Oct 2024 13:39:54 +0200 Subject: [PATCH 08/18] add cmdlet authors --- d365fo.tools/functions/import-d365aaduser.ps1 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/d365fo.tools/functions/import-d365aaduser.ps1 b/d365fo.tools/functions/import-d365aaduser.ps1 index b59fb2c0..1061b8c7 100644 --- a/d365fo.tools/functions/import-d365aaduser.ps1 +++ b/d365fo.tools/functions/import-d365aaduser.ps1 @@ -112,6 +112,8 @@ Author: Charles Colombel (@dropshind) Author: Mötz Jensen (@Splaxi) Author: Miklós Molnár (@scifimiki) + Author: Gert Van der Heyden (@gertvdh) + Author: Florian Hopfner (@FH-Inway) At no circumstances can this cmdlet be used to import users into a PROD environment. From 2d200f40f6b686dd9753a53137694d0ee84e9e6a Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Thu, 3 Oct 2024 13:43:13 +0200 Subject: [PATCH 09/18] add -TenantId parameter documentation and example --- d365fo.tools/functions/import-d365aaduser.ps1 | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/d365fo.tools/functions/import-d365aaduser.ps1 b/d365fo.tools/functions/import-d365aaduser.ps1 index 1061b8c7..c1e74905 100644 --- a/d365fo.tools/functions/import-d365aaduser.ps1 +++ b/d365fo.tools/functions/import-d365aaduser.ps1 @@ -68,6 +68,11 @@ Available options 'Mail' / 'UserPrincipalName' Default is 'Mail' + + .PARAMETER TenantId + The TenantId to use when connecting to Azure Active Directory + + Uses the tenant id of the current environment if not specified. .EXAMPLE PS C:\> Import-D365AadUser -Users "Claire@contoso.com","Allen@contoso.com" @@ -104,6 +109,12 @@ Imports Claire and Allen as users. Will NOT make you connect to the Azure Active Directory(AAD). The needed details will be based on the e-mail address only, and the rest will be blanked. + + .EXAMPLE + PS C:\> Import-D365AadUser -Users "Claire@contoso.com","Allen@contoso.com" -TenantId "99999999-aaaa-bbbb-cccc-9999999999" + + Imports Claire and Allen as users. Uses tenant id "99999999-aaaa-bbbb-cccc-9999999999" + when connecting to Azure Active Directory(AAD). .NOTES Tags: User, Users, Security, Configuration, Permission, AAD, Azure Active Directory, Group, Groups From 2b59419f624c4c920bc26fdcb609df4374d1b740 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Thu, 3 Oct 2024 14:02:20 +0200 Subject: [PATCH 10/18] add tenant id debug information --- d365fo.tools/functions/import-d365aaduser.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/d365fo.tools/functions/import-d365aaduser.ps1 b/d365fo.tools/functions/import-d365aaduser.ps1 index c1e74905..417166c8 100644 --- a/d365fo.tools/functions/import-d365aaduser.ps1 +++ b/d365fo.tools/functions/import-d365aaduser.ps1 @@ -205,7 +205,7 @@ function Import-D365AadUser { $canonicalProvider = Get-CanonicalIdentityProvider try { - Write-PSFMessage -Level Verbose -Message "Trying to connect to the Azure Active Directory" + Write-PSFMessage -Level Verbose -Message "Trying to connect to the Azure Active Directory with tenant id '$TenantId'" if ($PSBoundParameters.ContainsKey("AzureAdCredential") -eq $true) { Login-AzAccount -Credential $AzureAdCredential -ErrorAction Stop -TenantId $TenantId From a5bbd6f75460a37990c939f68039ee0788ca45cb Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Thu, 3 Oct 2024 17:01:00 +0200 Subject: [PATCH 11/18] fix hasFiles expression --- .github/workflows/update-generated-text.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-generated-text.yml b/.github/workflows/update-generated-text.yml index 860eff96..2d99e4da 100644 --- a/.github/workflows/update-generated-text.yml +++ b/.github/workflows/update-generated-text.yml @@ -18,7 +18,7 @@ jobs: uses: actions/cache@v3 with: path: C:\Users\runneradmin\Documents\WindowsPowerShell\Modules - key: 20210527|${{ hashFiles('**/vsts-prerequisites.ps1, **/buildtools.ps1') }} + key: 20210527|${{ hashFiles('**/vsts-prerequisites.ps1', '**/buildtools.ps1') }} - name: Prerequisites if: steps.cache-powershell-modules.outputs.cache-hit != 'true' shell: powershell From 273cb1fb9be2ec2f72ba6d2accf0eceb27481a73 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Thu, 3 Oct 2024 17:12:05 +0200 Subject: [PATCH 12/18] update action versions --- .github/workflows/build.yml | 28 ++++++++++----------- .github/workflows/update-generated-text.yml | 6 ++--- .github/workflows/update-wiki.yml | 2 +- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index de416cb9..2f0043f7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,9 +15,9 @@ jobs: name: Prerequisites runs-on: windows-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Cache Powershell Modules - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: C:\Users\runneradmin\Documents\WindowsPowerShell\Modules key: 20210527|${{ hashFiles('**/vsts-prerequisites.ps1') }} @@ -30,10 +30,10 @@ jobs: runs-on: windows-latest needs: prerequisites steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Cache Powershell Modules id: cache-powershell-modules - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: C:\Users\runneradmin\Documents\WindowsPowerShell\Modules key: 20210527|${{ hashFiles('**/vsts-prerequisites.ps1') }} @@ -46,7 +46,7 @@ jobs: run: build\vsts-validate.ps1 -TestGeneral $true -TestFunctions $false -Exclude "PSScriptAnalyzer.Tests.ps1" - name: Publish Test Results **/TEST-*.xml if: always() - uses: EnricoMi/publish-unit-test-result-action/composite@v2 + uses: EnricoMi/publish-unit-test-result-action/windows@v2 with: files: '**/TEST-*.xml' check_name: 'General Unit Tests Results' @@ -57,10 +57,10 @@ jobs: runs-on: windows-latest needs: prerequisites steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Cache Powershell Modules id: cache-powershell-modules - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: C:\Users\runneradmin\Documents\WindowsPowerShell\Modules key: 20210527|${{ hashFiles('**/vsts-prerequisites.ps1') }} @@ -73,7 +73,7 @@ jobs: run: build\vsts-validate-psscriptanalyzer.ps1 -TestPublic $true -TestInternal $false - name: Publish Test Results **/TEST-*.xml if: always() - uses: EnricoMi/publish-unit-test-result-action/composite@v2 + uses: EnricoMi/publish-unit-test-result-action/windows@v2 with: files: '**/TEST-*.xml' check_name: 'Public Functions Unit Tests Results' @@ -84,10 +84,10 @@ jobs: runs-on: windows-latest needs: Prerequisites steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Cache Powershell Modules id: cache-powershell-modules - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: C:\Users\runneradmin\Documents\WindowsPowerShell\Modules key: 20210527|${{ hashFiles('**/vsts-prerequisites.ps1') }} @@ -100,7 +100,7 @@ jobs: run: build\vsts-validate-psscriptanalyzer.ps1 -TestPublic $false -TestInternal $true - name: Publish Test Results **/TEST-*.xml if: always() - uses: EnricoMi/publish-unit-test-result-action/composite@v2 + uses: EnricoMi/publish-unit-test-result-action/windows@v2 with: files: '**/TEST-*.xml' check_name: 'Internal Functions Unit Tests Results' @@ -111,10 +111,10 @@ jobs: runs-on: windows-latest needs: prerequisites steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Cache Powershell Modules id: cache-powershell-modules - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: C:\Users\runneradmin\Documents\WindowsPowerShell\Modules key: 20210527|${{ hashFiles('**/vsts-prerequisites.ps1') }} @@ -127,7 +127,7 @@ jobs: run: build\vsts-validate.ps1 -TestGeneral $false -TestFunctions $true - name: Publish Test Results **/TEST-*.xml if: always() - uses: EnricoMi/publish-unit-test-result-action/composite@v2 + uses: EnricoMi/publish-unit-test-result-action/windows@v2 with: files: '**/TEST-*.xml' check_name: 'Individual Unit Tests Results' diff --git a/.github/workflows/update-generated-text.yml b/.github/workflows/update-generated-text.yml index 2d99e4da..11eaa17a 100644 --- a/.github/workflows/update-generated-text.yml +++ b/.github/workflows/update-generated-text.yml @@ -12,10 +12,10 @@ jobs: name: Generate text runs-on: windows-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Cache Powershell Modules id: cache-powershell-modules - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: C:\Users\runneradmin\Documents\WindowsPowerShell\Modules key: 20210527|${{ hashFiles('**/vsts-prerequisites.ps1', '**/buildtools.ps1') }} @@ -40,7 +40,7 @@ jobs: shell: powershell run: build\generate-findcommandindex.ps1 - name: Create a pull request for changes - uses: peter-evans/create-pull-request@v5 + uses: peter-evans/create-pull-request@v7 with: commit-message: | 🤖 Fix best practice deviations diff --git a/.github/workflows/update-wiki.yml b/.github/workflows/update-wiki.yml index c6ad416f..5c0389ac 100644 --- a/.github/workflows/update-wiki.yml +++ b/.github/workflows/update-wiki.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Publish wiki folder to repository wiki uses: FH-Inway/github-wiki-publish-action@rsync From ba66eeb86540e59762339955c35b5a293a655682 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Sat, 5 Oct 2024 13:16:42 +0200 Subject: [PATCH 13/18] log information about installed modules --- build/buildtools.ps1 | 3 ++- build/vsts-prerequisites.ps1 | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/build/buildtools.ps1 b/build/buildtools.ps1 index 5d607234..1d1c8f44 100644 --- a/build/buildtools.ps1 +++ b/build/buildtools.ps1 @@ -14,6 +14,7 @@ foreach ($item in $modules) { Write-Host "Installing $item" -ForegroundColor Cyan Install-Module -Name $item -Force -Confirm:$false -Scope CurrentUser -AllowClobber -SkipPublisherCheck } - + Import-Module $item -Force + Get-Module -Name $item } \ No newline at end of file diff --git a/build/vsts-prerequisites.ps1 b/build/vsts-prerequisites.ps1 index 68dda50d..4e822b9f 100644 --- a/build/vsts-prerequisites.ps1 +++ b/build/vsts-prerequisites.ps1 @@ -4,6 +4,7 @@ Write-Host "The user running is: $($env:UserName)" # $modules = @("PSFramework", "Az.Storage", "AzureAd", "PSNotification", "PSOAuthHelper", "PowerShellGet", "PackageManagement","ImportExcel","PSScriptAnalyzer") $modules = @("PSFramework", "PSScriptAnalyzer", "Az.Storage", "AzureAd", "PSNotification", "PSOAuthHelper", "ImportExcel") +Write-Host "Installing Pester, maximum version 4.99.99" -ForegroundColor Cyan Install-Module "Pester" -MaximumVersion 4.99.99 -Force -Confirm:$false -Scope CurrentUser -AllowClobber -SkipPublisherCheck foreach ($item in $modules) { @@ -14,6 +15,7 @@ foreach ($item in $modules) { Write-Host "Installing $item" -ForegroundColor Cyan Install-Module -Name $item -Force -Confirm:$false -Scope CurrentUser -AllowClobber -SkipPublisherCheck } - + Import-Module $item -Force + Get-Module -Name $item } \ No newline at end of file From 8eaee90c0faa624d729c820cdccf2664cb5eb7d0 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Sat, 5 Oct 2024 13:42:35 +0200 Subject: [PATCH 14/18] create unique patch branch name for each pull request branch Previously, if there were multiple pull requests A and B active at the same time, a run of this action for B would overwrite the branch with the fixes from a previous run for A. --- .github/workflows/update-generated-text.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/update-generated-text.yml b/.github/workflows/update-generated-text.yml index 11eaa17a..9cdfab18 100644 --- a/.github/workflows/update-generated-text.yml +++ b/.github/workflows/update-generated-text.yml @@ -47,4 +47,5 @@ jobs: This pull request was automatically created by the d365fo.tools-Generate-Text action' title: '🤖 Fix best practice deviations' - body: 'This pull request was automatically created by the d365fo.tools-Generate-Text action. See [Building tools](https://github.com/d365collaborative/d365fo.tools/wiki/Building-tools) for more information.' \ No newline at end of file + body: 'This pull request was automatically created by the d365fo.tools-Generate-Text action. See [Building tools](https://github.com/d365collaborative/d365fo.tools/wiki/Building-tools) for more information.' + branch: 'update-generated-text/pull-request-patch-for-branch-${{ github.ref_name }}' \ No newline at end of file From d780e23c4349559c1aa778e4646babdb2718f3ee Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Sat, 28 Sep 2024 13:37:36 +0200 Subject: [PATCH 15/18] :twisted_rightwards_arrows: switch from development to master as default branch To simplify the application lifecycle management and to provide a cleaner commit history, the default branch was switched form development to master. The development branch will eventually be deleted and there will be only master as the single permanent branch of the repository. --- .github/workflows/build.yml | 2 +- .github/workflows/update-wiki.yml | 2 +- contributing.md | 4 ++-- wiki/Branching.md | 6 +++--- wiki/Building-tools.md | 12 ++++++------ wiki/Configuration.md | 6 +++--- wiki/images/Branch.001.png | Bin 42886 -> 40515 bytes wiki/images/Branch.002.png | Bin 20899 -> 17527 bytes wiki/images/Branch.007.png | Bin 28818 -> 23883 bytes 9 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index de416cb9..d9cec869 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,7 +5,7 @@ name: d365fo.tools-PR-Test on: push: branches: - - development + - master pull_request: workflow_dispatch: diff --git a/.github/workflows/update-wiki.yml b/.github/workflows/update-wiki.yml index c6ad416f..5acf3296 100644 --- a/.github/workflows/update-wiki.yml +++ b/.github/workflows/update-wiki.yml @@ -7,7 +7,7 @@ on: - 'wiki/**' - 'docs/**' branches: - - development + - master # Allows you to run this workflow manually from the Actions tab workflow_dispatch: diff --git a/contributing.md b/contributing.md index 131ee06e..e20c9130 100644 --- a/contributing.md +++ b/contributing.md @@ -18,7 +18,7 @@ If you wanna help out to make the module even more robust Documentation is really the area we welcome any help possible. The documentation refers to CBH (Comment Based Help). The CBH documentation is included with each command and is the content you see when you run `Get-Help Function-Name`. If any of that content is not clear enough or if the examples in the functions are not working, you should say so (e.g. raise an issue on GitHub or contact us on twitter). Even if you are a casual user or a PowerShell newbie, we need your angle to make it as straight forward and clear as possible. ## Contribute New Commands -Start out reviewing the [list of functions on in the docs folder](https://github.com/d365collaborative/d365fo.tools/tree/development/docs), or pulling the list from the module with `Get-Command -Module d365fo.tools -CommandType Function | Out-GridView`. If you find something similar already exists, open [a new issue on GitHub](https://github.com/d365collaborative/d365fo.tools/issues/new) to request an enhancement to that command. If nothing similar pops up, either ping @splaxi on twitter with your idea about the new command or open a new issue on GitHub with details or requirements you need. +Start out reviewing the [list of functions on in the docs folder](https://github.com/d365collaborative/d365fo.tools/tree/master/docs), or pulling the list from the module with `Get-Command -Module d365fo.tools -CommandType Function | Out-GridView`. If you find something similar already exists, open [a new issue on GitHub](https://github.com/d365collaborative/d365fo.tools/issues/new) to request an enhancement to that command. If nothing similar pops up, either ping @splaxi on twitter with your idea about the new command or open a new issue on GitHub with details or requirements you need. ## Report Bugs [Open a new issue](https://github.com/d365collaborative/d365fo.tools/issues/new) on GitHub and fill in all the details. The title should report the affected function, followed by a brief description (e.g. _Get-D365Environment - Add property x to default view_). The provided template holds most of the details coders need to fix the issue. @@ -26,7 +26,7 @@ Start out reviewing the [list of functions on in the docs folder](https://github ## Fix Bugs If you feel for fixing a bug, but don't know GitHub enough, the dbatools.io project has a good starting guide. We are on the same team, so instead of us writing a guide that is close to theirs - we simply point to theirs [step-by-step guide](https://dbatools.io/firstpull). -[Open a PR](https://github.com/d365collaborative/d365fo.tools/pulls) targeting ideally just one ps1 file (the PR needs to target the *development* branch), with the name of the function being fixed as a title. Everyone will chime in reviewing the code and either approve the PR or request changes. The more targeted and focused the PR, the easier to merge, the fastest to go into the next release. Keep them as simple as possible to speed up the process. +[Open a PR](https://github.com/d365collaborative/d365fo.tools/pulls) targeting ideally just one ps1 file (the PR needs to target the *master* branch), with the name of the function being fixed as a title. Everyone will chime in reviewing the code and either approve the PR or request changes. The more targeted and focused the PR, the easier to merge, the fastest to go into the next release. Keep them as simple as possible to speed up the process. ## Branching Make sure to read our [branching guide](https://github.com/d365collaborative/d365fo.tools/wiki/Branching) on the wiki to get a good starting point. diff --git a/wiki/Branching.md b/wiki/Branching.md index df329931..519cb3a3 100644 --- a/wiki/Branching.md +++ b/wiki/Branching.md @@ -7,11 +7,11 @@ One of the benefits of having a feature branch is that if you want to submit mul ## **Create a new branch from the desktop client** 1. Make sure that you have selected your local repository -2. Make sure that you have selected the development branch +2. Make sure that you have selected the master branch [[images/Branch.001.png]] -3. Click on the **development** branch icon in the top +3. Click on the **master** branch icon in the top 4. Click on the **New branch** button in the drop down menu [[images/Branch.002.png]] @@ -36,6 +36,6 @@ One of the benefits of having a feature branch is that if you want to submit mul [[images/Branch.006.png]] 11. Your default browser will now load and go to github -12. Make sure that you compared the branch against the **development** branch in the d365fo.tools repository +12. Make sure that you compared the branch against the **master** branch in the d365fo.tools repository [[images/Branch.007.png]] \ No newline at end of file diff --git a/wiki/Building-tools.md b/wiki/Building-tools.md index 80df6cfd..6b7c5511 100644 --- a/wiki/Building-tools.md +++ b/wiki/Building-tools.md @@ -1,8 +1,8 @@ When you contribute to the d365fo.tools project you will quickly learn that we have several validation steps that might throw an error when you are creating PR's against the repository. -These validations are checked when you create a pull request. The checks are done by GitHub Actions and are defined in the [build.yml](https://github.com/d365collaborative/d365fo.tools/blob/development/.github/workflows/build.yml) file. The GitHub Action will run the PowerShell scripts in the [build](https://github.com/d365collaborative/d365fo.tools/tree/development/build) folder of the repository starting with `vsts-`. +These validations are checked when you create a pull request. The checks are done by GitHub Actions and are defined in the [build.yml](https://github.com/d365collaborative/d365fo.tools/blob/master/.github/workflows/build.yml) file. The GitHub Action will run the PowerShell scripts in the [build](https://github.com/d365collaborative/d365fo.tools/tree/master/build) folder of the repository starting with `vsts-`. -For some of the checks, we have created PowerShell scripts that can be used to automatically make the changes needed to pass the validation. You can run these scripts locally on your machine to make the changes needed before you create a pull request. They are also available as a GitHub Action defined in the [update-generated-text.yml](https://github.com/d365collaborative/d365fo.tools/blob/development/.github/workflows/update-generated-text.yml). If you have your own fork of the repository, you can use this action to automatically update the generated files in your pull requests. +For some of the checks, we have created PowerShell scripts that can be used to automatically make the changes needed to pass the validation. You can run these scripts locally on your machine to make the changes needed before you create a pull request. They are also available as a GitHub Action defined in the [update-generated-text.yml](https://github.com/d365collaborative/d365fo.tools/blob/master/.github/workflows/update-generated-text.yml). If you have your own fork of the repository, you can use this action to automatically update the generated files in your pull requests. To run the scripts locally, follow the instructions below. @@ -13,16 +13,16 @@ To run the scripts locally, follow the instructions below. * `Install-Module platyPS -Force -Confirm:$false` ## **Format Comment Based help** -We try to keep the formatting of the Comment Based Help the same across every contributor. This is done by the [Format-CommentBasedHelp.ps1](https://github.com/d365collaborative/d365fo.tools/tree/development/build/format-commentbasedhelp.ps1) script. If you want to find out more about comment based help, take a look at [about Comment Based Help](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comment_based_help). +We try to keep the formatting of the Comment Based Help the same across every contributor. This is done by the [Format-CommentBasedHelp.ps1](https://github.com/d365collaborative/d365fo.tools/tree/master/build/format-commentbasedhelp.ps1) script. If you want to find out more about comment based help, take a look at [about Comment Based Help](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comment_based_help). ## **Generate-ParameterUnitTests** -We try to mitigate the drifting changes that might get introduced when multiple people contribute to the same project. We also try to ensure that the parameters do not change **without** us knowing about it. This helps us update the examples inside the Comment Based Help and therefor the user base. This is done by the [Generate-ParameterUnitTests.ps1](https://github.com/d365collaborative/d365fo.tools/tree/development/build/generate-parameterunittests.ps1) script. This script will generate a new test file for each command in the module, using the `Invoke-PSMDTemplate` cmdlet of [PSModuleDevelopment](https://github.com/PowershellFrameworkCollective/PSModuleDevelopment). The tests will check a list of best practices. +We try to mitigate the drifting changes that might get introduced when multiple people contribute to the same project. We also try to ensure that the parameters do not change **without** us knowing about it. This helps us update the examples inside the Comment Based Help and therefor the user base. This is done by the [Generate-ParameterUnitTests.ps1](https://github.com/d365collaborative/d365fo.tools/tree/master/build/generate-parameterunittests.ps1) script. This script will generate a new test file for each command in the module, using the `Invoke-PSMDTemplate` cmdlet of [PSModuleDevelopment](https://github.com/PowershellFrameworkCollective/PSModuleDevelopment). The tests will check a list of best practices. ## **Update-Docs** -Whenever we release a new version of the module, we push the updated markdown files used for documentation, to make sure that users can lookup parameter names and parameterset specification. This is done by the [Update-Docs.ps1](https://github.com/d365collaborative/d365fo.tools/tree/development/build/update-docs.ps1) script. The markdown files are created from the Comment Based Help in the module. The `New-MarkdownHelp` cmdlet of [platyPS](https://learn.microsoft.com/en-us/powershell/utility-modules/platyps/overview) is used to create the markdown files. +Whenever we release a new version of the module, we push the updated markdown files used for documentation, to make sure that users can lookup parameter names and parameterset specification. This is done by the [Update-Docs.ps1](https://github.com/d365collaborative/d365fo.tools/tree/master/build/update-docs.ps1) script. The markdown files are created from the Comment Based Help in the module. The `New-MarkdownHelp` cmdlet of [platyPS](https://learn.microsoft.com/en-us/powershell/utility-modules/platyps/overview) is used to create the markdown files. ## **Generate-FindCommandIndex** -The [Find-D365Command](Find-D365Command.md) is used to find commands in the module. It acts faster than the built-in Get-Help cmdlet, but it requires a file to be updated whenever a new command is added to the module. This script will update the file with the new command. Find the script in the build folder of the repository: [Generate-FindCommandIndex.ps1](https://github.com/d365collaborative/d365fo.tools/tree/development/build/Generate-FindCommandIndex.ps1). +The [Find-D365Command](Find-D365Command.md) is used to find commands in the module. It acts faster than the built-in Get-Help cmdlet, but it requires a file to be updated whenever a new command is added to the module. This script will update the file with the new command. Find the script in the build folder of the repository: [Generate-FindCommandIndex.ps1](https://github.com/d365collaborative/d365fo.tools/tree/master/build/Generate-FindCommandIndex.ps1). ## **Closing notes** The reason why we keep these steps manual for the time being is to make sure that nothing gets updated without we either knowing about it or without us making a "decision" to update these things. \ No newline at end of file diff --git a/wiki/Configuration.md b/wiki/Configuration.md index 280da3a2..b76a2967 100644 --- a/wiki/Configuration.md +++ b/wiki/Configuration.md @@ -2,7 +2,7 @@ Many d365fo.tools cmdlets use default values for their parameters. This makes th # An example -For example, the [Get-D365Module](https://github.com/d365collaborative/d365fo.tools/blob/development/d365fo.tools/functions/get-d365module.ps1) cmdlet has a `-PackageDirectory` parameter. The documentation for the parameter says *Normally it is located under AOSService directory in "PackagesLocalDirectory" - Default value is fetched from the current configuration on the machine*. Looking at the code of the cmdlet, it specifies the parameter like this: `[string] $PackageDirectory = $Script:PackageDirectory`. +For example, the [Get-D365Module](https://github.com/d365collaborative/d365fo.tools/blob/master/d365fo.tools/functions/get-d365module.ps1) cmdlet has a `-PackageDirectory` parameter. The documentation for the parameter says *Normally it is located under AOSService directory in "PackagesLocalDirectory" - Default value is fetched from the current configuration on the machine*. Looking at the code of the cmdlet, it specifies the parameter like this: `[string] $PackageDirectory = $Script:PackageDirectory`. We will come back to this example in the following sections to explain how the default value is determined. @@ -14,7 +14,7 @@ For the purpose of the d365fo.tools module, the script scope lets us define vari # Setting the default values -The values of the variables in the script scope are set in several internal scripts that get executed when the module is imported. You can see this in the [postimport.ps1](https://github.com/d365collaborative/d365fo.tools/blob/development/d365fo.tools/internal/scripts/postimport.ps1) script, where the [variables.ps1](https://github.com/d365collaborative/d365fo.tools/blob/development/d365fo.tools/internal/scripts/variables.ps1) script is called. This script sets the default values for many variables in the module. +The values of the variables in the script scope are set in several internal scripts that get executed when the module is imported. You can see this in the [postimport.ps1](https://github.com/d365collaborative/d365fo.tools/blob/master/d365fo.tools/internal/scripts/postimport.ps1) script, where the [variables.ps1](https://github.com/d365collaborative/d365fo.tools/blob/master/d365fo.tools/internal/scripts/variables.ps1) script is called. This script sets the default values for many variables in the module. ## It depends @@ -37,7 +37,7 @@ The common theme for these variables is that they are based on configuration val Another important thing to note is that the configuration values are persisted between sessions. This means that the user only has to set the configuration values once, and they will be used as default values for the variables in all future sessions of the module. -This also applies to the `Update-ModuleVariables` function, but the configuration values are not set by the user, but by the module itself. The configuration values are specified in the [configuration.ps1](https://github.com/d365collaborative/d365fo.tools/blob/development/d365fo.tools/internal/configurations/configuration.ps1) script. To understand how those configurations work, we first need to learn about the PSFramework module. +This also applies to the `Update-ModuleVariables` function, but the configuration values are not set by the user, but by the module itself. The configuration values are specified in the [configuration.ps1](https://github.com/d365collaborative/d365fo.tools/blob/master/d365fo.tools/internal/configurations/configuration.ps1) script. To understand how those configurations work, we first need to learn about the PSFramework module. ## PSFramework diff --git a/wiki/images/Branch.001.png b/wiki/images/Branch.001.png index f312d91a52afc0054790f3dd6c1bae05870fe044..9292f70ac0766f981edae3a67fad8e6e55330522 100644 GIT binary patch literal 40515 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 literal 42886 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 P1~D_SHm*4B`P=^hSX~(j diff --git a/wiki/images/Branch.002.png b/wiki/images/Branch.002.png index 9bbd5bc18a79d3e1dbe9ddd11baded4c5ba7aca4..75e8c5716c58a01b20f655af724d295830595b27 100644 GIT binary patch literal 17527 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 PCOhiw=f(Z@)ZhLcTtSPc From 3526b72877a1ba4d5d0271bfeefe4397dd26ba2c Mon Sep 17 00:00:00 2001 From: FH-Inway Date: Fri, 8 Nov 2024 17:41:08 +0000 Subject: [PATCH 16/18] =?UTF-8?q?=F0=9F=A4=96=20Fix=20best=20practice=20de?= =?UTF-8?q?viations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This pull request was automatically created by the d365fo.tools-Generate-Text action' --- d365fo.tools/bin/d365fo.tools-index.json | 20 ++++++- d365fo.tools/functions/import-d365aaduser.ps1 | 8 +-- .../functions/Import-D365AadUser.Tests.ps1 | 32 ++++++++++-- docs/Import-D365AadUser.md | 52 +++++++++++++++++-- 4 files changed, 100 insertions(+), 12 deletions(-) diff --git a/d365fo.tools/bin/d365fo.tools-index.json b/d365fo.tools/bin/d365fo.tools-index.json index 5e1f0819..d89e5add 100644 --- a/d365fo.tools/bin/d365fo.tools-index.json +++ b/d365fo.tools/bin/d365fo.tools-index.json @@ -5404,6 +5404,22 @@ true, "false", "" + ], + [ + "EmailValue", + "Specify which field to use as EMAIL value when importing the users.\r\nAvailable options \u0027Mail\u0027 / \u0027UserPrincipalName\u0027\nDefault is \u0027Mail\u0027", + "", + false, + "false", + "Mail" + ], + [ + "TenantId", + "The TenantId to use when connecting to Azure Active Directory\nUses the tenant id of the current environment if not specified.", + "", + false, + "false", + "$Script:TenantId" ] ], "Alias": "", @@ -5411,8 +5427,8 @@ "Synopsis": "Used to import Aad users into D365FO", "Name": "Import-D365AadUser", "Links": null, - "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eImport-D365AadUser -Users \"Claire@contoso.com\",\"Allen@contoso.com\"\nImports Claire and Allen as users\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003e$myPassword = ConvertTo-SecureString \"MyPasswordIsSecret\" -AsPlainText -Force\nPS C:\\\u003e $myCredentials = New-Object System.Management.Automation.PSCredential (\"MyEmailIsAlso\", $myPassword)\nPS C:\\\u003e Import-D365AadUser -Users \"Claire@contoso.com\",\"Allen@contoso.com\" -AzureAdCredential $myCredentials\nThis will import Claire and Allen as users.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eImport-D365AadUser -AadGroupName \"CustomerTeam1\"\nif more than one group match the AadGroupName, you can use the ExactAadGroupName parameter\r\nImport-D365AadUser -AadGroupName \"CustomerTeam1\" -ForceExactAadGroupName\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eImport-D365AadUser -AadGroupName \"CustomerTeam1\" -ForceExactAadGroupName\nThis is used to force the cmdlet to find the exact named group in Azure Active Directory.\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eImport-D365AadUser -AadGroupId \"99999999-aaaa-bbbb-cccc-9999999999\"\nImports all the users that is present in the AAD Group called CustomerTeam1\n-------------------------- EXAMPLE 6 --------------------------\nPS C:\\\u003eImport-D365AadUser -Users \"Claire@contoso.com\",\"Allen@contoso.com\" -SkipAzureAd\nImports Claire and Allen as users.\r\nWill NOT make you connect to the Azure Active Directory(AAD).\r\nThe needed details will be based on the e-mail address only, and the rest will be blanked.", - "Syntax": "Import-D365AadUser [-Users] \u003cString[]\u003e [[-StartupCompany] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-IdPrefix] \u003cString\u003e] [[-NameSuffix] \u003cString\u003e] [[-IdValue] \u003cString\u003e] [[-NameValue] \u003cString\u003e] [[-AzureAdCredential] \u003cPSCredential\u003e] [[-SkipAzureAd]] [\u003cCommonParameters\u003e]\nImport-D365AadUser [-AadGroupName] \u003cString\u003e [[-StartupCompany] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-IdPrefix] \u003cString\u003e] [[-NameSuffix] \u003cString\u003e] [[-IdValue] \u003cString\u003e] [[-NameValue] \u003cString\u003e] [[-AzureAdCredential] \u003cPSCredential\u003e] [[-ForceExactAadGroupName]] [\u003cCommonParameters\u003e]\nImport-D365AadUser [[-StartupCompany] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-IdPrefix] \u003cString\u003e] [[-NameSuffix] \u003cString\u003e] [[-IdValue] \u003cString\u003e] [[-NameValue] \u003cString\u003e] [[-AzureAdCredential] \u003cPSCredential\u003e] [-AadGroupId] \u003cString\u003e [\u003cCommonParameters\u003e]" + "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eImport-D365AadUser -Users \"Claire@contoso.com\",\"Allen@contoso.com\"\nImports Claire and Allen as users\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003e$myPassword = ConvertTo-SecureString \"MyPasswordIsSecret\" -AsPlainText -Force\nPS C:\\\u003e $myCredentials = New-Object System.Management.Automation.PSCredential (\"MyEmailIsAlso\", $myPassword)\nPS C:\\\u003e Import-D365AadUser -Users \"Claire@contoso.com\",\"Allen@contoso.com\" -AzureAdCredential $myCredentials\nThis will import Claire and Allen as users.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eImport-D365AadUser -AadGroupName \"CustomerTeam1\"\nif more than one group match the AadGroupName, you can use the ExactAadGroupName parameter\r\nImport-D365AadUser -AadGroupName \"CustomerTeam1\" -ForceExactAadGroupName\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eImport-D365AadUser -AadGroupName \"CustomerTeam1\" -ForceExactAadGroupName\nThis is used to force the cmdlet to find the exact named group in Azure Active Directory.\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eImport-D365AadUser -AadGroupId \"99999999-aaaa-bbbb-cccc-9999999999\"\nImports all the users that is present in the AAD Group called CustomerTeam1\n-------------------------- EXAMPLE 6 --------------------------\nPS C:\\\u003eImport-D365AadUser -Users \"Claire@contoso.com\",\"Allen@contoso.com\" -SkipAzureAd\nImports Claire and Allen as users.\r\nWill NOT make you connect to the Azure Active Directory(AAD).\r\nThe needed details will be based on the e-mail address only, and the rest will be blanked.\n-------------------------- EXAMPLE 7 --------------------------\nPS C:\\\u003eImport-D365AadUser -Users \"Claire@contoso.com\",\"Allen@contoso.com\" -TenantId \"99999999-aaaa-bbbb-cccc-9999999999\"\nImports Claire and Allen as users. Uses tenant id \"99999999-aaaa-bbbb-cccc-9999999999\"\r\nwhen connecting to Azure Active Directory(AAD).", + "Syntax": "Import-D365AadUser [-Users] \u003cString[]\u003e [[-StartupCompany] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-IdPrefix] \u003cString\u003e] [[-NameSuffix] \u003cString\u003e] [[-IdValue] \u003cString\u003e] [[-NameValue] \u003cString\u003e] [[-AzureAdCredential] \u003cPSCredential\u003e] [[-SkipAzureAd]] [[-EmailValue] \u003cString\u003e] [[-TenantId] \u003cString\u003e] [\u003cCommonParameters\u003e]\nImport-D365AadUser [-AadGroupName] \u003cString\u003e [[-StartupCompany] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-IdPrefix] \u003cString\u003e] [[-NameSuffix] \u003cString\u003e] [[-IdValue] \u003cString\u003e] [[-NameValue] \u003cString\u003e] [[-AzureAdCredential] \u003cPSCredential\u003e] [[-ForceExactAadGroupName]] [[-EmailValue] \u003cString\u003e] [[-TenantId] \u003cString\u003e] [\u003cCommonParameters\u003e]\nImport-D365AadUser [[-StartupCompany] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-IdPrefix] \u003cString\u003e] [[-NameSuffix] \u003cString\u003e] [[-IdValue] \u003cString\u003e] [[-NameValue] \u003cString\u003e] [[-AzureAdCredential] \u003cPSCredential\u003e] [-AadGroupId] \u003cString\u003e [[-EmailValue] \u003cString\u003e] [[-TenantId] \u003cString\u003e] [\u003cCommonParameters\u003e]" }, { "CommandName": "Import-D365Bacpac", diff --git a/d365fo.tools/functions/import-d365aaduser.ps1 b/d365fo.tools/functions/import-d365aaduser.ps1 index 417166c8..9b989f72 100644 --- a/d365fo.tools/functions/import-d365aaduser.ps1 +++ b/d365fo.tools/functions/import-d365aaduser.ps1 @@ -68,10 +68,10 @@ Available options 'Mail' / 'UserPrincipalName' Default is 'Mail' - + .PARAMETER TenantId The TenantId to use when connecting to Azure Active Directory - + Uses the tenant id of the current environment if not specified. .EXAMPLE @@ -109,11 +109,11 @@ Imports Claire and Allen as users. Will NOT make you connect to the Azure Active Directory(AAD). The needed details will be based on the e-mail address only, and the rest will be blanked. - + .EXAMPLE PS C:\> Import-D365AadUser -Users "Claire@contoso.com","Allen@contoso.com" -TenantId "99999999-aaaa-bbbb-cccc-9999999999" - Imports Claire and Allen as users. Uses tenant id "99999999-aaaa-bbbb-cccc-9999999999" + Imports Claire and Allen as users. Uses tenant id "99999999-aaaa-bbbb-cccc-9999999999" when connecting to Azure Active Directory(AAD). .NOTES diff --git a/d365fo.tools/tests/functions/Import-D365AadUser.Tests.ps1 b/d365fo.tools/tests/functions/Import-D365AadUser.Tests.ps1 index 3a2020ad..2404cd04 100644 --- a/d365fo.tools/tests/functions/Import-D365AadUser.Tests.ps1 +++ b/d365fo.tools/tests/functions/Import-D365AadUser.Tests.ps1 @@ -206,24 +206,50 @@ $parameter.ParameterSets['GroupIdImport'].ValueFromPipelineByPropertyName | Should -Be $False $parameter.ParameterSets['GroupIdImport'].ValueFromRemainingArguments | Should -Be $False } + It 'Should have the expected parameter EmailValue' { + $parameter = (Get-Command Import-D365AadUser).Parameters['EmailValue'] + $parameter.Name | Should -Be 'EmailValue' + $parameter.ParameterType.ToString() | Should -Be System.String + $parameter.IsDynamic | Should -Be $False + $parameter.ParameterSets.Keys | Should -Be '__AllParameterSets' + $parameter.ParameterSets.Keys | Should -Contain '__AllParameterSets' + $parameter.ParameterSets['__AllParameterSets'].IsMandatory | Should -Be $False + $parameter.ParameterSets['__AllParameterSets'].Position | Should -Be 15 + $parameter.ParameterSets['__AllParameterSets'].ValueFromPipeline | Should -Be $False + $parameter.ParameterSets['__AllParameterSets'].ValueFromPipelineByPropertyName | Should -Be $False + $parameter.ParameterSets['__AllParameterSets'].ValueFromRemainingArguments | Should -Be $False + } + It 'Should have the expected parameter TenantId' { + $parameter = (Get-Command Import-D365AadUser).Parameters['TenantId'] + $parameter.Name | Should -Be 'TenantId' + $parameter.ParameterType.ToString() | Should -Be System.String + $parameter.IsDynamic | Should -Be $False + $parameter.ParameterSets.Keys | Should -Be '__AllParameterSets' + $parameter.ParameterSets.Keys | Should -Contain '__AllParameterSets' + $parameter.ParameterSets['__AllParameterSets'].IsMandatory | Should -Be $False + $parameter.ParameterSets['__AllParameterSets'].Position | Should -Be 16 + $parameter.ParameterSets['__AllParameterSets'].ValueFromPipeline | Should -Be $False + $parameter.ParameterSets['__AllParameterSets'].ValueFromPipelineByPropertyName | Should -Be $False + $parameter.ParameterSets['__AllParameterSets'].ValueFromRemainingArguments | Should -Be $False + } } Describe "Testing parameterset UserListImport" { <# UserListImport -Users - UserListImport -Users -StartupCompany -DatabaseServer -DatabaseName -SqlUser -SqlPwd -IdPrefix -NameSuffix -IdValue -NameValue -AzureAdCredential -SkipAzureAd + UserListImport -Users -StartupCompany -DatabaseServer -DatabaseName -SqlUser -SqlPwd -IdPrefix -NameSuffix -IdValue -NameValue -AzureAdCredential -SkipAzureAd -EmailValue -TenantId #> } Describe "Testing parameterset GroupNameImport" { <# GroupNameImport -AadGroupName - GroupNameImport -AadGroupName -StartupCompany -DatabaseServer -DatabaseName -SqlUser -SqlPwd -IdPrefix -NameSuffix -IdValue -NameValue -AzureAdCredential -ForceExactAadGroupName + GroupNameImport -AadGroupName -StartupCompany -DatabaseServer -DatabaseName -SqlUser -SqlPwd -IdPrefix -NameSuffix -IdValue -NameValue -AzureAdCredential -ForceExactAadGroupName -EmailValue -TenantId #> } Describe "Testing parameterset GroupIdImport" { <# GroupIdImport -AadGroupId - GroupIdImport -StartupCompany -DatabaseServer -DatabaseName -SqlUser -SqlPwd -IdPrefix -NameSuffix -IdValue -NameValue -AzureAdCredential -AadGroupId + GroupIdImport -StartupCompany -DatabaseServer -DatabaseName -SqlUser -SqlPwd -IdPrefix -NameSuffix -IdValue -NameValue -AzureAdCredential -AadGroupId -EmailValue -TenantId #> } diff --git a/docs/Import-D365AadUser.md b/docs/Import-D365AadUser.md index e39dd8bf..b7e0ea1a 100644 --- a/docs/Import-D365AadUser.md +++ b/docs/Import-D365AadUser.md @@ -17,7 +17,7 @@ Used to import Aad users into D365FO Import-D365AadUser [-Users] [[-StartupCompany] ] [[-DatabaseServer] ] [[-DatabaseName] ] [[-SqlUser] ] [[-SqlPwd] ] [[-IdPrefix] ] [[-NameSuffix] ] [[-IdValue] ] [[-NameValue] ] [[-AzureAdCredential] ] - [-SkipAzureAd] [] + [-SkipAzureAd] [[-EmailValue] ] [[-TenantId] ] [] ``` ### GroupNameImport @@ -25,7 +25,7 @@ Import-D365AadUser [-Users] [[-StartupCompany] ] [[-DatabaseS Import-D365AadUser [-AadGroupName] [[-StartupCompany] ] [[-DatabaseServer] ] [[-DatabaseName] ] [[-SqlUser] ] [[-SqlPwd] ] [[-IdPrefix] ] [[-NameSuffix] ] [[-IdValue] ] [[-NameValue] ] [[-AzureAdCredential] ] - [-ForceExactAadGroupName] [] + [-ForceExactAadGroupName] [[-EmailValue] ] [[-TenantId] ] [] ``` ### GroupIdImport @@ -33,7 +33,7 @@ Import-D365AadUser [-AadGroupName] [[-StartupCompany] ] [[-Data Import-D365AadUser [[-StartupCompany] ] [[-DatabaseServer] ] [[-DatabaseName] ] [[-SqlUser] ] [[-SqlPwd] ] [[-IdPrefix] ] [[-NameSuffix] ] [[-IdValue] ] [[-NameValue] ] [[-AzureAdCredential] ] [-AadGroupId] - [] + [[-EmailValue] ] [[-TenantId] ] [] ``` ## DESCRIPTION @@ -90,6 +90,15 @@ Imports Claire and Allen as users. Will NOT make you connect to the Azure Active Directory(AAD). The needed details will be based on the e-mail address only, and the rest will be blanked. +### EXAMPLE 7 +``` +Import-D365AadUser -Users "Claire@contoso.com","Allen@contoso.com" -TenantId "99999999-aaaa-bbbb-cccc-9999999999" +``` + +Imports Claire and Allen as users. +Uses tenant id "99999999-aaaa-bbbb-cccc-9999999999" +when connecting to Azure Active Directory(AAD). + ## PARAMETERS ### -AadGroupName @@ -334,6 +343,41 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -EmailValue +Specify which field to use as EMAIL value when importing the users. +Available options 'Mail' / 'UserPrincipalName' + +Default is 'Mail' + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: False +Position: 16 +Default value: Mail +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -TenantId +The TenantId to use when connecting to Azure Active Directory + +Uses the tenant id of the current environment if not specified. + +```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: False +Position: 17 +Default value: $Script:TenantId +Accept pipeline input: False +Accept wildcard characters: False +``` + ### CommonParameters This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). @@ -348,6 +392,8 @@ Author: Rasmus Andersen (@ITRasmus) Author: Charles Colombel (@dropshind) Author: Mötz Jensen (@Splaxi) Author: Miklós Molnár (@scifimiki) +Author: Gert Van der Heyden (@gertvdh) +Author: Florian Hopfner (@FH-Inway) At no circumstances can this cmdlet be used to import users into a PROD environment. From 4702af8c45af2e685440eae833d3e24421cf2d95 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Sun, 10 Nov 2024 11:13:42 +0100 Subject: [PATCH 17/18] remove trailing space --- d365fo.tools/functions/import-d365aaduser.ps1 | 2 +- d365fo.tools/internal/scripts/variables.ps1 | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/d365fo.tools/functions/import-d365aaduser.ps1 b/d365fo.tools/functions/import-d365aaduser.ps1 index 9b989f72..e8da6703 100644 --- a/d365fo.tools/functions/import-d365aaduser.ps1 +++ b/d365fo.tools/functions/import-d365aaduser.ps1 @@ -381,7 +381,7 @@ function Import-D365AadUser { $email = "" if ($EmailValue -eq 'Mail') { - $email = $user.Mail + $email = $user.Mail } else { $email = $user.UserPrincipalName diff --git a/d365fo.tools/internal/scripts/variables.ps1 b/d365fo.tools/internal/scripts/variables.ps1 index d11d21ab..e0b423d0 100644 --- a/d365fo.tools/internal/scripts/variables.ps1 +++ b/d365fo.tools/internal/scripts/variables.ps1 @@ -59,10 +59,10 @@ $Script:IsOnebox = $common.IsOneboxEnvironment $Script:ServerRole = [ServerRole]::Unknown $RoleVaule = $( - If ($environment.Monitoring.MARole -eq "" -or $environment.Monitoring.MARole -eq "dev") { - "Development" + If ($environment.Monitoring.MARole -eq "" -or $environment.Monitoring.MARole -eq "dev") { + "Development" } Else { - $environment.Monitoring.MARole + $environment.Monitoring.MARole } ) if ($null -ne $RoleVaule) { From 04e95250eb69cbad008adcb7ae9fafc25ea2b69c Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Sun, 10 Nov 2024 11:14:41 +0100 Subject: [PATCH 18/18] replace alias --- d365fo.tools/functions/import-d365aaduser.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/d365fo.tools/functions/import-d365aaduser.ps1 b/d365fo.tools/functions/import-d365aaduser.ps1 index e8da6703..8f139be9 100644 --- a/d365fo.tools/functions/import-d365aaduser.ps1 +++ b/d365fo.tools/functions/import-d365aaduser.ps1 @@ -208,11 +208,11 @@ function Import-D365AadUser { Write-PSFMessage -Level Verbose -Message "Trying to connect to the Azure Active Directory with tenant id '$TenantId'" if ($PSBoundParameters.ContainsKey("AzureAdCredential") -eq $true) { - Login-AzAccount -Credential $AzureAdCredential -ErrorAction Stop -TenantId $TenantId + Connect-AzAccount -Credential $AzureAdCredential -ErrorAction Stop -TenantId $TenantId } else { if ($SkipAzureAd -eq $false) { - Login-AzAccount -ErrorAction Stop -TenantId $TenantId + Connect-AzAccount -ErrorAction Stop -TenantId $TenantId } } }