wvd-templates/diagnostics-sample/deploy/scripts/CreateADAppRegistrationforDiagnostics.ps1 (113 lines of code) (raw):

<# .SYNOPSIS Create an Azure AD App Registration .DESCRIPTION This script is used to create an Azure AD App Registration .ROLE Administrator #> Param( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $AppName, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $SubscriptionId ) # Set the ExecutionPolicy Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser -Force -Confirm:$false # Import Az and AzureAD modules Import-Module Az Import-Module AzureAD # Get the context $context= Get-AzContext if($context -eq $null) { Write-Error "Please authenticate to Azure & Azure AD using Login-AzAccount and Connect-AzureAD cmdlets and then run this script" exit } # Select the subscription $Subscription = Select-AzSubscription -SubscriptionId $SubscriptionId Set-AzContext -SubscriptionObject $Subscription.ExtendedProperties # Get the Role Assignment of the authenticated user $RoleAssignment = Get-AzRoleAssignment -SignInName $context.Account # Validate whether the authenticated user having the Owner or Contributor role if($RoleAssignment.RoleDefinitionName -eq "Owner" -or $RoleAssignment.RoleDefinitionName -eq "Contributor") { # Check whether the AD Application exist/ not $existingApplication = Get-AzADApplication -DisplayName $AppName -ErrorAction SilentlyContinue if ($existingApplication -ne $null) { $appId = $existingApplication.ApplicationId Write-Output "An AAD Application already exists with AppName $AppName(Application Id: $appId). Choose a different AppName" -Verbose exit } Try { # Create a new AD Application with provided AppName $azAdApplication=New-AzureADApplication -DisplayName $AppName -PublicClient $false -AvailableToOtherTenants $false } catch { Write-Error "You must call the Connect-AzureAD cmdlet before calling any other cmdlets" exit } # Create a Client Secret $startDate = Get-Date $endDate = $startDate.AddYears(1) $Guid = New-Guid $PasswordCredential = New-Object -TypeName Microsoft.Open.AzureAD.Model.PasswordCredential $PasswordCredential.StartDate = $startDate $PasswordCredential.EndDate = $startDate.AddYears(1) $PasswordCredential.KeyId = $Guid $PasswordCredential.Value = ([System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(($Guid))))+"=" $ClientSecret=$PasswordCredential.Value Write-Output "Creating a new Application in AAD" -Verbose # Create an app credential to the Application $SecureClientSecret=ConvertTo-SecureString -String $ClientSecret -AsPlainText -Force New-AzADAppCredential -ObjectId $azAdApplication.ObjectId -Password $SecureClientSecret -StartDate $startDate -EndDate $startDate.AddYears(1) # Get the ClientId $ClientId = $azAdApplication.AppId Write-Output "Azure AAD Application creation completed successfully with AppName $AppName (Application Id is: $ClientId)" -Verbose # Create new Service Principal Write-Output "Creating a new Service Principal" -Verbose $ServicePrincipal = New-AzADServicePrincipal -ApplicationId $ClientId # Get the Service Principal Get-AzADServicePrincipal -ApplicationId $ClientId $ServicePrincipalName = $ServicePrincipal.ServicePrincipalNames Write-Output "Service Principal creation completed successfully with $ServicePrincipalName)" -Verbose # Set windows virtual desktop permission to Client App Registration $WVDServPrincipalApi = Get-AzADServicePrincipal -ApplicationId "5a0aa725-4958-4b0c-80a9-34562e23f3b7" $WVDApiPrincipal = Get-AzureADServicePrincipal -ObjectId $WVDServPrincipalApi.Id $AzureWVDApiAccess = New-Object -TypeName "Microsoft.Open.AzureAD.Model.RequiredResourceAccess" $AzureWVDApiAccess.ResourceAppId = $WVDApiPrincipal.AppId foreach($permission in $WVDApiPrincipal.Oauth2Permissions) { $AzureWVDApiAccess.ResourceAccess += New-Object -TypeName "Microsoft.Open.AzureAD.Model.ResourceAccess" -ArgumentList $permission.Id,"Scope" } # Set windows virtual desktop permission to Client App Registration $AzLogAnalyticsAPI = Get-AzADServicePrincipal -ApplicationId "ca7f3f0b-7d91-482c-8e09-c5d840d0eac5" $AzureLogAnalyticsApiPrincipal = Get-AzureADServicePrincipal -ObjectId $AzLogAnalyticsAPI.Id $AzureLogAnalyticsApiAccess = New-Object -TypeName "Microsoft.Open.AzureAD.Model.RequiredResourceAccess" $AzureLogAnalyticsApiAccess.ResourceAppId = $AzureLogAnalyticsApiPrincipal.AppId foreach($permission in $AzureLogAnalyticsApiPrincipal.Oauth2Permissions) { $AzureLogAnalyticsApiAccess.ResourceAccess += New-Object -TypeName "Microsoft.Open.AzureAD.Model.ResourceAccess" -ArgumentList $permission.Id,"Scope" } # Set Microsoft Graph API permission to Client App Registration $MsftGraphApi = Get-AzADServicePrincipal -ApplicationId "00000003-0000-0000-c000-000000000000" $AzureGraphApiPrincipal = Get-AzureADServicePrincipal -ObjectId $MsftGraphApi.Id $AzureGraphApiAccess = New-Object -TypeName "Microsoft.Open.AzureAD.Model.RequiredResourceAccess" $AzureGraphApiAccess.ResourceAppId = $AzureGraphApiPrincipal.AppId $permission = $AzureGraphApiPrincipal.Oauth2Permissions | Where-Object {$_.Value -eq "User.Read"} $AzureGraphApiAccess.ResourceAccess += New-Object -TypeName "Microsoft.Open.AzureAD.Model.ResourceAccess" -ArgumentList $permission.Id,"Scope" # Add the WVD API,Log Analytics API and Microsoft Graph API permissions to the ADApplication Set-AzureADApplication -ObjectId $azAdApplication.ObjectId -RequiredResourceAccess $AzureLogAnalyticsApiAccess,$AzureWVDApiAccess,$AzureGraphApiAccess -ErrorAction Stop # Get the Client Id/Application Id and Client Secret Write-Output "Client Id : $ClientId" Write-Output "Client Secret Key: $ClientSecret" } else { Write-Output "Authenticated user should have the Owner/Contributor permissions" }