Udostępnij za pośrednictwem


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:

  1. Otwórz wiersz polecenia.

  2. 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

  1. 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."
    
    } 
    
  2. Po utworzeniu tokenu utwórz token SecureString przy użyciu tokenu:

    $SecureToken = $Token | ConvertTo-SecureString -AsPlainText -Force
    
  3. 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
    
  4. Zapisz skrypt lub kod w bezpiecznej lokalizacji, ponieważ zawiera poufne informacje o poświadczeniach.

Następne kroki