<# Product name : RH-Hawk Microsoft 365 Kalender Freigabe Version information : 1.0 Update time : 2021/09 #> [CmdletBinding()] param() Function Prerequisite() { # Windows Versionen werden überprüft if ([System.Environment]::OSVersion.Version.Major -lt 10) { Write-Host "Diese PowerShell-Skriptdatei kann nur auf PowerShell in Windows 10 und Windows Server 2016 oder höher ausgeführt werden. Bitte aktualisieren Sie Ihre Windows-Version." -ForegroundColor Red -BackgroundColor white Exit } # Set SecurityProtocol to be compatible with W2016 server [Net.ServicePointManager]::SecurityProtocol = 'Ssl3, Tls, Tls11, Tls12' if ((Get-Module -ListAvailable -Name "AzureAD") -eq $null) { Install-Module "AzureAD" -Scope CurrentUser } Import-Module AzureAD } <# Dieses Skript erstellt die für dieses Beispiel benötigten Azure AD-Anwendungen und aktualisiert die Konfigurationsdateien für die Visual Studio-Projekte aus den Daten in den Azure AD-Anwendungen. Bevor Sie dieses Skript ausführen, müssen Sie die AzureAD-Cmdlets als Administrator installieren. Dafür: 1) Führen Sie Powershell als Administrator aus 2) Geben Sie im PowerShell-Fenster Folgendes ein: Install-Module AzureAD #> # Fügt die erforderlichenZugriffe (ausgedrückt als durch Pipes getrennte Zeichenfolge) der erforderlichenZugriffsstruktur hinzu # Die exponierten Berechtigungen befinden sich in der $exposedPermissions-Sammlung, und der Berechtigungstyp (Scope | Role) wird # in $permissionType . beschrieben Function AddResourcePermission($requiredAccess, ` $exposedPermissions, [string]$requiredAccesses, [string]$permissionType) { foreach ($permission in $requiredAccesses.Trim().Split("|")) { foreach ($exposedPermission in $exposedPermissions) { if ($exposedPermission.Value -eq $permission) { $resourceAccess = New-Object Microsoft.Open.AzureAD.Model.ResourceAccess $resourceAccess.Type = $permissionType # Scope = Delegated permissions | Role = Application permissions $resourceAccess.Id = $exposedPermission.Id # Verzeichnisdaten lesen $requiredAccess.ResourceAccess.Add($resourceAccess) } } } } # # Beispiel: GetRequiredPermissions "Microsoft Graph" "Graph.Read|User.Read" # Zu finden: http://stackoverflow.com/questions/42164581/how-to-configure-a-new-azure-ad-application-through-powershell Function GetRequiredPermissions([string] $applicationDisplayName, [string] $requiredDelegatedPermissions, [string]$requiredApplicationPermissions, $servicePrincipal) { # Wenn uns der Dienstprinzipal übergeben wird, verwenden wir ihn direkt, andernfalls finden wir ihn über den Anzeigenamen (der möglicherweise nicht eindeutig ist). if ($servicePrincipal) { $sp = $servicePrincipal } else { $sp = Get-AzureADServicePrincipal -Filter "DisplayName eq '$applicationDisplayName'" } $appid = $sp.AppId $requiredAccess = New-Object Microsoft.Open.AzureAD.Model.RequiredResourceAccess $requiredAccess.ResourceAppId = $appid $requiredAccess.ResourceAccess = New-Object System.Collections.Generic.List[Microsoft.Open.AzureAD.Model.ResourceAccess] # $sp.Oauth2Permissions | Select Id,AdminConsentDisplayName,Value: Um die Liste aller delegierten Berechtigungen für die Anwendung anzuzeigen: if ($requiredDelegatedPermissions) { AddResourcePermission $requiredAccess -exposedPermissions $sp.Oauth2Permissions -requiredAccesses $requiredDelegatedPermissions -permissionType "Scope" } # $sp.AppRoles | Select Id,AdminConsentDisplayName,Value: Um die Liste aller Anwendungsberechtigungen für die Anwendung anzuzeigen if ($requiredApplicationPermissions) { AddResourcePermission $requiredAccess -exposedPermissions $sp.AppRoles -requiredAccesses $requiredApplicationPermissions -permissionType "Role" } return $requiredAccess } Function GetUnusedFileName([string] $desiredName, [string] $desiredExtension) { $location = Get-Location $path = "$($location)\$($desiredName).$($desiredExtension)" $count = 1 while(Test-Path $path -PathType Leaf) { $path = "$($location)\$($desiredName) ($($count)).$($desiredExtension)" $count += 1 } return $path } Function ConfigureApplications { # Zugangsdaten abrufen $creds = Connect-AzureAD if (!$creds) { Write-Host "[ERROR] Fail to get creds." -ForegroundColor Red -BackgroundColor white Exit } $tenantId = $creds.Tenant.Id # App-Namen vorbereiten $appName = "Microsoft 365 RH-Hawk Kalender Freigabe" # Bringen den Benutzer dazu, das Skript auszuführen $user = Get-AzureADUser -ObjectId $creds.Account.Id # Erstellt die Client AAD Applikation Write-Host "[INFO] Client-Anwendung erstellen ($appName)" $clientAadApplication = New-AzureADApplication -DisplayName $appName $owner = Get-AzureADApplicationOwner -ObjectId $clientAadApplication.ObjectId if ($owner -eq $null) { Add-AzureADApplicationOwner -ObjectId $clientAadApplication.ObjectId -RefObjectId $user.ObjectId Write-Host "[INFO] '$($user.UserPrincipalName)' als App-Inhaber zur App hinzugefügt '$($appName)'" } Write-Host "[INFO] Erstellung der Client-Anwendung abgeschlossen ($appName)" # URL der AAD-Applikation im Azure Portal $clientPortalUrl = "https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/CallAnAPI/appId/" + $clientAadApplication.AppId + "/objectId/" + $clientAadApplication.ObjectId + "/isMSAApp/" $requiredResourcesAccess = New-Object System.Collections.Generic.List[Microsoft.Open.AzureAD.Model.RequiredResourceAccess] # Erforderlichen Ressourcenzugriff hinzufügen Write-Host "[INFO] API-Berechtigungen erhalten für Microsoft Graph" $requiredPermissions = GetRequiredPermissions -applicationDisplayName "Microsoft Graph" ` -requiredDelegatedPermissions "Mail.Read|Calendars.ReadWrite"; $requiredResourcesAccess.Add($requiredPermissions) Write-Host "[INFO] Berechtigungen erteilen..." Set-AzureADApplication -ObjectId $clientAadApplication.ObjectId -RequiredResourceAccess $requiredResourcesAccess Set-AzureADApplication -ObjectId $clientAadApplication.ObjectId -PublicClient $true Write-Host "===================================================================================" Write-Host "| |" Write-Host "| Ihre Azure AD-Anwendung wurde erfolgreich generiert. |" Write-Host "| |" Write-Host "===================================================================================" Write-Host "Mandanten ID:" Write-Host "$($tenantId)" -ForegroundColor Green Write-Host "Applikations ID:" Write-Host "$($clientAadApplication.AppId)" -ForegroundColor Green Write-Host "" Write-Host "" Write-Host "Kopieren Sie die unten angezeigte URL und öffnen Sie sie in Ihrem Browser:" Write-Host "$clientPortalUrl" -ForegroundColor Yellow Write-Host "" } # Pre-requisites Prerequisite ConfigureApplications