Tworzenie skryptu instalacji nienadzorowanej dla łącznika sieci prywatnej firmy Microsoft Entra
Ten artykuł ułatwia utworzenie skryptu programu Windows PowerShell, który umożliwia instalację nienadzorowaną i rejestrację łącznika sieci prywatnej firmy Microsoft Entra.
Instalacja nienadzorowana jest przydatna, gdy chcesz:
- Zainstaluj łącznik na serwerach z systemem Windows, które nie mają włączonego interfejsu użytkownika lub nie możesz uzyskać dostępu do pulpitu zdalnego.
- Instalowanie i rejestrowanie wielu łączników jednocześnie.
- Zintegruj instalację i rejestrację łącznika w ramach innej procedury.
- Utwórz standardowy obraz serwera zawierający bity łącznika, ale nie jest zarejestrowany.
Aby łącznik sieci prywatnej działał, należy zarejestrować go w usłudze Microsoft Entra ID. Rejestracja odbywa się w interfejsie użytkownika podczas instalowania łącznika, ale możesz użyć programu PowerShell do zautomatyzowania procesu.
Istnieją dwa kroki instalacji nienadzorowanej. Najpierw zainstaluj łącznik. Następnie zarejestruj łącznik przy użyciu identyfikatora Entra firmy Microsoft.
Ważne
Jeśli instalujesz łącznik dla chmury Microsoft Azure Government, zapoznaj się z wymaganiami wstępnymi i krokami instalacji. Chmura Microsoft Azure Government wymaga włączenia dostępu do innego zestawu adresów URL i dodatkowego parametru do uruchomienia instalacji.
Instalowanie łącznika
Wykonaj następujące kroki, aby zainstalować łącznik bez rejestrowania go:
Otwórz wiersz polecenia.
Uruchom następujące polecenie. Flaga oznacza cichą
/q
instalację. Cicha instalacja nie monituje o zaakceptowanie umowy licencyjnej użytkownika końcowego.MicrosoftEntraPrivateNetworkConnectorInstaller.exe REGISTERCONNECTOR="false" /q
Rejestrowanie łącznika przy użyciu identyfikatora Entra firmy Microsoft
Zarejestruj łącznik przy użyciu tokenu utworzonego w trybie offline.
Rejestrowanie łącznika przy użyciu tokenu utworzonego w trybie offline
Utwórz token offline przy użyciu klasy przy użyciu
AuthenticationContext
wartości w tym fragmencie kodu lub poleceniach cmdlet programu PowerShell:Korzystanie z języka C#:
using System; using System.Linq; using System.Collections.Generic; using Microsoft.Identity.Client; class Program { #region constants /// <summary> /// The AAD authentication endpoint uri /// </summary> static readonly string AadAuthenticationEndpoint = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize"; /// <summary> /// The application ID of the connector in AAD /// </summary> static readonly string ConnectorAppId = "55747057-9b5d-4bd4-b387-abf52a8bd489"; /// <summary> /// The AppIdUri of the registration service in AAD /// </summary> static readonly string RegistrationServiceAppIdUri = "https://proxy.cloudwebappproxy.net/registerapp/user_impersonation"; #endregion #region private members private string token; private string tenantID; #endregion public void GetAuthenticationToken() { IPublicClientApplication clientApp = PublicClientApplicationBuilder .Create(ConnectorAppId) .WithDefaultRedirectUri() // will automatically use the default Uri for native app .WithAuthority(AadAuthenticationEndpoint) .Build(); AuthenticationResult authResult = null; IAccount account = null; IEnumerable<string> scopes = new string[] { RegistrationServiceAppIdUri }; try { authResult = await clientApp.AcquireTokenSilent(scopes, account).ExecuteAsync(); } catch (MsalUiRequiredException ex) { authResult = await clientApp.AcquireTokenInteractive(scopes).ExecuteAsync(); } if (authResult == null || string.IsNullOrEmpty(authResult.AccessToken) || string.IsNullOrEmpty(authResult.TenantId)) { Trace.TraceError("Authentication result, token or tenant id returned are null"); throw new InvalidOperationException("Authentication result, token or tenant id returned are null"); } token = authResult.AccessToken; tenantID = authResult.TenantId; } }
Przy użyciu programu PowerShell:
# Loading DLLs Find-PackageProvider -Name NuGet| Install-PackageProvider -Force Register-PackageSource -Name nuget.org -Location https://www.nuget.org/api/v2 -ProviderName NuGet Install-Package Microsoft.IdentityModel.Abstractions -ProviderName Nuget -RequiredVersion 6.22.0.0 Install-Module Microsoft.Identity.Client add-type -path "C:\Program Files\PackageManagement\NuGet\Packages\Microsoft.IdentityModel.Abstractions.6.22.0\lib\net461\Microsoft.IdentityModel.Abstractions.dll" add-type -path "C:\Program Files\WindowsPowerShell\Modules\Microsoft.Identity.Client\4.53.0\Microsoft.Identity.Client.dll" # The AAD authentication endpoint uri $authority = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize" #The application ID of the connector in AAD $connectorAppId = "55747057-9b5d-4bd4-b387-abf52a8bd489"; #The AppIdUri of the registration service in AAD $registrationServiceAppIdUri = "https://proxy.cloudwebappproxy.net/registerapp/user_impersonation" # Define the resources and scopes you want to call $scopes = New-Object System.Collections.ObjectModel.Collection["string"] $scopes.Add($registrationServiceAppIdUri) $app = [Microsoft.Identity.Client.PublicClientApplicationBuilder]::Create($connectorAppId).WithAuthority($authority).WithDefaultRedirectUri().Build() [Microsoft.Identity.Client.IAccount] $account = $null # Acquiring the token $authResult = $null $authResult = $app.AcquireTokenInteractive($scopes).WithAccount($account).ExecuteAsync().ConfigureAwait($false).GetAwaiter().GetResult() # Check AuthN result If (($authResult) -and ($authResult.AccessToken) -and ($authResult.TenantId)) { $token = $authResult.AccessToken $tenantId = $authResult.TenantId Write-Output "Success: Authentication result returned." } Else { Write-Output "Error: Authentication result, token or tenant id returned with null." }
Po utworzeniu tokenu utwórz token
SecureString
przy użyciu tokenu:$SecureToken = $Token | ConvertTo-SecureString -AsPlainText -Force
Uruchom następujące polecenie programu Windows PowerShell, zastępując element
<tenant GUID>
identyfikatorem katalogu:.\RegisterConnector.ps1 -modulePath "C:\Program Files\Microsoft Entra private network connector\Modules\" -moduleName "MicrosoftEntraPrivateNetworkConnectorPSModule" -Authenticationmode Token -Token $SecureToken -TenantId <tenant GUID> -Feature ApplicationProxy
Zapisz skrypt lub kod w bezpiecznej lokalizacji, ponieważ zawiera poufne informacje o poświadczeniach.