PowerShell: Erstellen eines virtuellen Dienstendpunkts und einer VNet-Regel für SQLPowerShell: Create a Virtual Service endpoint and VNet rule for SQL

VNET-Regeln sind eine Firewallsicherheitsfunktion, die steuert, ob der Datenbankserver für Ihre Einzeldatenbanken und Ihren Pool für elastische Datenbanken in Azure SQL-Datenbank oder für Ihre Datenbanken in SQL Data Warehouse Nachrichten akzeptiert, die von bestimmten Subnetzen in virtuellen Netzwerken gesendet werden.Virtual network rules are one firewall security feature that controls whether the database server for your single databases and elastic pool in Azure SQL Database or for your databases in SQL Data Warehouse accepts communications that are sent from particular subnets in virtual networks.

Wichtig

Dieser Artikel gilt für den Azure SQL-Datenbankserver sowie für Datenbanken von SQL-Datenbank und SQL Data Warehouse, die auf dem Azure SQL-Datenbankserver erstellt werden.This article applies to Azure SQL server, and to both SQL Database and SQL Data Warehouse databases that are created on the Azure SQL server. Der Einfachheit halber wird nur SQL-Datenbank verwendet, wenn sowohl SQL-Datenbank als auch SQL Data Warehouse gemeint sind.For simplicity, SQL Database is used when referring to both SQL Database and SQL Data Warehouse. Dieser Artikel gilt nicht für die Bereitstellungsoption Verwaltete Instanz in Azure SQL-Datenbank, da dieser kein Dienstendpunkt zugeordnet ist.This article does not apply to a managed instance deployment in Azure SQL Database because it does not have a service endpoint associated with it.

Dieser Artikel stellt ein PowerShell-Skript bereit, das folgende Vorgänge ausführt, und erläutert dieses:This article provides and explains a PowerShell script that takes the following actions:

  1. Erstellt einen virtuellen Dienstendpunkt von Microsoft Azure in Ihrem Subnetz.Creates a Microsoft Azure Virtual Service endpoint on your subnet.
  2. Fügt den Endpunkt zur Firewall Ihres Azure SQL-Datenbank-Servers hinzu, um eine VNET-Regel zu erstellen.Adds the endpoint to the firewall of your Azure SQL Database server, to create a virtual network rule.

Gründe für das Erstellen einer Regel werden hier erläutert: Virtuelle Dienstendpunkte für Azure SQL-Datenbank.Your motivations for creating a rule are explained in: Virtual Service endpoints for Azure SQL Database.

Tipp

Wenn Sie nur den Typnamen des virtuellen Dienstendpunkts für SQL-Datenbank bewerten oder zu Ihrem Subnetz hinzufügen müssen, fahren Sie mit dem direkteren PowerShell-Skript fort.If all you need is to assess or add the Virtual Service endpoint type name for SQL Database to your subnet, you can skip ahead to our more direct PowerShell script.

Hinweis

Dieser Artikel wurde aktualisiert und beinhaltet jetzt das neue Az-Modul von Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Sie können das AzureRM-Modul weiterhin verwenden, das bis mindestens Dezember 2020 weiterhin Fehlerbehebungen erhält.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Weitere Informationen zum neuen Az-Modul und zur Kompatibilität mit AzureRM finden Sie unter Introducing the new Azure PowerShell Az module (Einführung in das neue Az-Modul von Azure PowerShell).To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Anweisungen zur Installation des Az-Moduls finden Sie unter Install Azure PowerShell (Installieren von Azure PowerShell).For Az module installation instructions, see Install Azure PowerShell.

Wichtig

Das PowerShell Azure Resource Manager-Modul wird von der Azure SQL-Datenbank weiterhin unterstützt, aber alle zukünftigen Entwicklungen erfolgen für das Az.Sql-Modul.The PowerShell Azure Resource Manager module is still supported by Azure SQL Database, but all future development is for the Az.Sql module. Informationen zu diesen Cmdlets finden Sie unter AzureRM.Sql.For these cmdlets, see AzureRM.Sql. Die Argumente für die Befehle im Az- und den AzureRm-Modulen sind im Wesentlichen identisch.The arguments for the commands in the Az module and in the AzureRm modules are substantially identical.

Wichtige CmdletsMajor cmdlets

In diesem Artikel wird das Cmdlet New-AzSqlServerVirtualNetworkRule erläutert, das den Subnetzendpunkt zur Zugriffssteuerungsliste (Access Control List, ACL) Ihres Azure SQL-Datenbank-Servers hinzufügt und dadurch eine Regel erstellt.This article emphasizes the New-AzSqlServerVirtualNetworkRule cmdlet that adds the subnet endpoint to the access control list (ACL) of your Azure SQL Database server, thereby creating a rule.

Die folgende Liste zeigt die Abfolge von anderen wichtigen Cmdlets, die Sie ausführen müssen, um den Aufruf von New-AzSqlServerVirtualNetworkRule vorzubereiten.The following list shows the sequence of other major cmdlets that you must run to prepare for your call to New-AzSqlServerVirtualNetworkRule. In diesem Artikel werden diese Aufrufe in script 3 "Virtual network rule" (Skript 3: VNET-Regel) ausgeführt.In this article, these calls occur in script 3 "Virtual network rule":

  1. New-AzVirtualNetworkSubnetConfig: Erstellt ein Subnetzobjekt.New-AzVirtualNetworkSubnetConfig: Creates a subnet object.
  2. New-AzVirtualNetwork: Erstellt Ihr virtuelles Netzwerk und weist diesem das Subnetz zu.New-AzVirtualNetwork: Creates your virtual network, giving it the subnet.
  3. Set-AzVirtualNetworkSubnetConfig: Weist Ihrem Subnetz einen virtuellen Dienstendpunkt zu.Set-AzVirtualNetworkSubnetConfig: Assigns a Virtual Service endpoint to your subnet.
  4. Set-AzVirtualNetwork: Behält Updates bei, die für Ihr virtuelles Netzwerk vorgenommen wurden.Set-AzVirtualNetwork: Persists updates made to your virtual network.
  5. New-AzSqlServerVirtualNetworkRule: Sobald Ihr Subnetz ein Endpunkt ist, wird dieses als VNET-Regel der ACL Ihres Azure SQL-Datenbank-Servers hinzugefügt.New-AzSqlServerVirtualNetworkRule: After your subnet is an endpoint, adds your subnet as a virtual network rule, into the ACL of your Azure SQL Database server.
    • Dieses Cmdlet bietet den Parameter -IgnoreMissingVNetServiceEndpoint ab Azure RM PowerShell-Modul Version 5.1.1.This cmdlet Offers the parameter -IgnoreMissingVNetServiceEndpoint, starting in Azure RM PowerShell Module version 5.1.1.

Voraussetzungen für das Ausführen von PowerShellPrerequisites for running PowerShell

  • Sie können sich bereits bei Azure anmelden, z. B. über das Azure-Portal.You can already log in to Azure, such as through the Azure portal.
  • Sie können bereits PowerShell-Skripts ausführen.You can already run PowerShell scripts.

Hinweis

Vergewissern Sie sich, dass Dienstendpunkte für das VNet/Subnetz aktiviert sind, das Sie dem Server hinzufügen möchten, da andernfalls die VNet-Firewallregel nicht erstellt werden kann.Please ensure that service endpoints are turned on for the VNet/Subnet that you want to add to your Server otherwise creation of the VNet Firewall Rule will fail.

Ein in vier Blöcke unterteiltes SkriptOne script divided into four chunks

Das PowerShell-Beispielskript ist in eine Abfolge von kleineren Skripts unterteilt.Our demonstration PowerShell script is divided into a sequence of smaller scripts. Die Aufteilung erleichtert das Lernen und bietet Flexibilität.The division eases learning and provides flexibility. Die Skripts müssen in ihrer angegebenen Reihenfolge ausgeführt werden.The scripts must be run in their indicated sequence. Wenn Sie keine Zeit für das Ausführen der Skripts haben: Die tatsächliche Testausgabe wird nach Skript 4 angezeigt.If you do not have time now to run the scripts, our actual test output is displayed after script 4.

Skript 1: VariablesScript 1: Variables

Dieses erste PowerShell-Skript weist Variablen Werte zu.This first PowerShell script assigns values to variables. Die nachfolgenden Skripts hängen von diesen Variablen ab.The subsequent scripts depend on these variables.

Wichtig

Bevor Sie dieses Skript ausführen, können Sie die Werte bei Bedarf bearbeiten.Before you run this script, you can edit the values, if you like. Wenn Sie beispielsweise bereits über eine Ressourcengruppe verfügen, sollten Sie den Namen Ihrer Ressourcengruppe dem zugewiesenen Wert entsprechend bearbeiten.For example, if you already have a resource group, you might want to edit your resource group name as the assigned value.

Ihr Abonnementname sollte in das Skript eingefügt werden.Your subscription name should be edited into the script.

Quellcode von PowerShell-Skript 1PowerShell script 1 source code

######### Script 1 ########################################
##   LOG into to your Azure account.                     ##
##   (Needed only one time per powershell.exe session.)  ##
###########################################################

$yesno = Read-Host 'Do you need to log into Azure (only one time per powershell.exe session)?  [yes/no]';
if ('yes' -eq $yesno) { Connect-AzAccount; }

###########################################################
##  Assignments to variables used by the later scripts.  ##
###########################################################

# You can edit these values, if necessary.

$SubscriptionName = 'yourSubscriptionName';
Select-AzSubscription -SubscriptionName $SubscriptionName;

$ResourceGroupName = 'RG-YourNameHere';
$Region            = 'westcentralus';

$VNetName            = 'myVNet';
$SubnetName          = 'mySubnet';
$VNetAddressPrefix   = '10.1.0.0/16';
$SubnetAddressPrefix = '10.1.1.0/24';
$VNetRuleName        = 'myFirstVNetRule-ForAcl';

$SqlDbServerName         = 'mysqldbserver-forvnet';
$SqlDbAdminLoginName     = 'ServerAdmin';
$SqlDbAdminLoginPassword = 'ChangeYourAdminPassword1';

$ServiceEndpointTypeName_SqlDb = 'Microsoft.Sql';  # Official type name.

Write-Host 'Completed script 1, the "Variables".';

Skript 2: VoraussetzungenScript 2: Prerequisites

Dieses Skript bereitet Sie auf den nächsten Schritt vor, in dem die Endpunktaktion stattfindet.This script prepares for the next script, where the endpoint action is. Dieses Skript erstellt die im Folgenden aufgelisteten Elemente für Sie, jedoch nur, wenn diese nicht bereits vorhanden sind.This script creates for you the following listed items, but only if they do not already exist. Sie können Skript 2 überspringen, wenn Sie sicher sind, dass diese Elemente bereits vorhanden sind:You can skip script 2 if you are sure these items already exist:

  • Azure-RessourcengruppeAzure resource group
  • Azure SQL-Datenbank-ServerAzure SQL Database server

Quellcode von PowerShell-Skript 2PowerShell script 2 source code

######### Script 2 ########################################
##   Ensure your Resource Group already exists.          ##
###########################################################

Write-Host "Check whether your Resource Group already exists.";

$gottenResourceGroup = $null;

$gottenResourceGroup = Get-AzResourceGroup `
  -Name        $ResourceGroupName `
  -ErrorAction SilentlyContinue;

if ($null -eq $gottenResourceGroup)
{
    Write-Host "Creating your missing Resource Group - $ResourceGroupName.";

    $gottenResourceGroup = New-AzResourceGroup `
      -Name $ResourceGroupName `
      -Location $Region;

    $gottenResourceGroup;
}
else { Write-Host "Good, your Resource Group already exists - $ResourceGroupName."; }

$gottenResourceGroup = $null;

###########################################################
## Ensure your Azure SQL Database server already exists. ##
###########################################################

Write-Host "Check whether your Azure SQL Database server already exists.";

$sqlDbServer = $null;

$sqlDbServer = Get-AzSqlServer `
  -ResourceGroupName $ResourceGroupName `
  -ServerName        $SqlDbServerName `
  -ErrorAction       SilentlyContinue;

if ($null -eq $sqlDbServer)
{
    Write-Host "Creating the missing Azure SQL Database server - $SqlDbServerName.";

    Write-Host "Gather the credentials necessary to next create an Azure SQL Database server.";

    $sqlAdministratorCredentials = New-Object `
      -TypeName     System.Management.Automation.PSCredential `
      -ArgumentList `
        $SqlDbAdminLoginName, `
        $(ConvertTo-SecureString `
            -String      $SqlDbAdminLoginPassword `
            -AsPlainText `
            -Force `
         );

    if ($null -eq $sqlAdministratorCredentials)
    {
        Write-Host "ERROR, unable to create SQL administrator credentials.  Now ending.";
        return;
    }

    Write-Host "Create your Azure SQL Database server.";

    $sqlDbServer = New-AzSqlServer `
      -ResourceGroupName $ResourceGroupName `
      -ServerName        $SqlDbServerName `
      -Location          $Region `
      -SqlAdministratorCredentials $sqlAdministratorCredentials;

    $sqlDbServer;
}
else { Write-Host "Good, your Azure SQL Database server already exists - $SqlDbServerName."; }

$sqlAdministratorCredentials = $null;
$sqlDbServer                 = $null;

Write-Host 'Completed script 2, the "Prerequisites".';

Skript 3: Erstellen eines Endpunkts und einer RegelScript 3: Create an endpoint and a rule

Dieses Skript erstellt ein virtuelles Netzwerk mit einem Subnetz.This script creates a virtual network with a subnet. Das Skript weist Ihrem Subnetz dann den Endpunkttyp Microsoft.Sql zu.Then the script assigns the Microsoft.Sql endpoint type to your subnet. Schließlich fügt das Skript Ihr Subnetz zu der Zugriffssteuerungsliste (ACL) Ihres SQL-Datenbank-Servers hinzu und erstellt dadurch eine Regel.Finally the script adds your subnet to the access control list (ACL) of your SQL Database server, thereby creating a rule.

Quellcode von PowerShell-Skript 3PowerShell script 3 source code

######### Script 3 ########################################
##   Create your virtual network, and give it a subnet.  ##
###########################################################

Write-Host "Define a subnet '$SubnetName', to be given soon to a virtual network.";

$subnet = New-AzVirtualNetworkSubnetConfig `
  -Name            $SubnetName `
  -AddressPrefix   $SubnetAddressPrefix `
  -ServiceEndpoint $ServiceEndpointTypeName_SqlDb;

Write-Host "Create a virtual network '$VNetName'." `
  "  Give the subnet to the virtual network that we created.";

$vnet = New-AzVirtualNetwork `
  -Name              $VNetName `
  -AddressPrefix     $VNetAddressPrefix `
  -Subnet            $subnet `
  -ResourceGroupName $ResourceGroupName `
  -Location          $Region;

###########################################################
##   Create a Virtual Service endpoint on the subnet.    ##
###########################################################

Write-Host "Assign a Virtual Service endpoint 'Microsoft.Sql' to the subnet.";

$vnet = Set-AzVirtualNetworkSubnetConfig `
  -Name            $SubnetName `
  -AddressPrefix   $SubnetAddressPrefix `
  -VirtualNetwork  $vnet `
  -ServiceEndpoint $ServiceEndpointTypeName_SqlDb;

Write-Host "Persist the updates made to the virtual network > subnet.";

$vnet = Set-AzVirtualNetwork `
  -VirtualNetwork $vnet;

$vnet.Subnets[0].ServiceEndpoints;  # Display the first endpoint.

###########################################################
##   Add the Virtual Service endpoint Id as a rule,      ##
##   into SQL Database ACLs.                             ##
###########################################################

Write-Host "Get the subnet object.";

$vnet = Get-AzVirtualNetwork `
  -ResourceGroupName $ResourceGroupName `
  -Name              $VNetName;

$subnet = Get-AzVirtualNetworkSubnetConfig `
  -Name           $SubnetName `
  -VirtualNetwork $vnet;

Write-Host "Add the subnet .Id as a rule, into the ACLs for your Azure SQL Database server.";

$vnetRuleObject1 = New-AzSqlServerVirtualNetworkRule `
  -ResourceGroupName      $ResourceGroupName `
  -ServerName             $SqlDbServerName `
  -VirtualNetworkRuleName $VNetRuleName `
  -VirtualNetworkSubnetId $subnet.Id;

$vnetRuleObject1;

Write-Host "Verify that the rule is in the SQL DB ACL.";

$vnetRuleObject2 = Get-AzSqlServerVirtualNetworkRule `
  -ResourceGroupName      $ResourceGroupName `
  -ServerName             $SqlDbServerName `
  -VirtualNetworkRuleName $VNetRuleName;

$vnetRuleObject2;

Write-Host 'Completed script 3, the "Virtual-Network-Rule".';

Skript 4: BereinigungScript 4: Clean-up

Dieses abschließende Skript löscht die Ressourcen, die das vorherige Skript zur Veranschaulichung erstellt hat.This final script deletes the resources that the previous scripts created for the demonstration. Das Skript fordert Sie jedoch zur Bestätigung auf, bevor Folgendes gelöscht wird:However, the script asks for confirmation before it deletes the following:

  • Azure SQL-Datenbank-ServerAzure SQL Database server
  • Azure-RessourcengruppeAzure Resource Group

Sie können Skript 4 jederzeit nach dem Abschluss von Skript 1 ausführen.You can run script 4 any time after script 1 completes.

Quellcode von PowerShell-Skript 4PowerShell script 4 source code

######### Script 4 ########################################
##   Clean-up phase A:  Unconditional deletes.           ##
##                                                       ##
##   1. The test rule is deleted from SQL DB ACL.        ##
##   2. The test endpoint is deleted from the subnet.    ##
##   3. The test virtual network is deleted.             ##
###########################################################

Write-Host "Delete the rule from the SQL DB ACL.";

Remove-AzSqlServerVirtualNetworkRule `
  -ResourceGroupName      $ResourceGroupName `
  -ServerName             $SqlDbServerName `
  -VirtualNetworkRuleName $VNetRuleName `
  -ErrorAction            SilentlyContinue;

Write-Host "Delete the endpoint from the subnet.";

$vnet = Get-AzVirtualNetwork `
  -ResourceGroupName $ResourceGroupName `
  -Name              $VNetName;

Remove-AzVirtualNetworkSubnetConfig `
  -Name $SubnetName `
  -VirtualNetwork $vnet;

Write-Host "Delete the virtual network (thus also deletes the subnet).";

Remove-AzVirtualNetwork `
  -Name              $VNetName `
  -ResourceGroupName $ResourceGroupName `
  -ErrorAction       SilentlyContinue;

###########################################################
##   Clean-up phase B:  Conditional deletes.             ##
##                                                       ##
##   These might have already existed, so user might     ##
##   want to keep.                                       ##
##                                                       ##
##   1. Azure SQL Database server                        ##
##   2. Azure resource group                             ##
###########################################################

$yesno = Read-Host 'CAUTION !: Do you want to DELETE your Azure SQL Database server AND your Resource Group?  [yes/no]';
if ('yes' -eq $yesno)
{
    Write-Host "Remove the Azure SQL DB server.";

    Remove-AzSqlServer `
      -ServerName        $SqlDbServerName `
      -ResourceGroupName $ResourceGroupName `
      -ErrorAction       SilentlyContinue;

    Write-Host "Remove the Azure Resource Group.";

    Remove-AzResourceGroup `
      -Name        $ResourceGroupName `
      -ErrorAction SilentlyContinue;
}
else
{
    Write-Host "Skipped over the DELETE of SQL Database and resource group.";
}

Write-Host 'Completed script 4, the "Clean-Up".';

Tatsächliche Ausgabe aus Skript 1 bis 4Actual output from scripts 1 through 4

Als nächstes wird die Ausgabe des Testlaufs in abgekürztem Format angezeigt.The output from our test run is displayed next, in an abbreviated format. Die Ausgabe kann hilfreich sein, falls Sie die PowerShell-Skripts jetzt nicht ausführen möchten.The output might be helpful in case you do not want to actually run the PowerShell scripts now.

[C:\WINDOWS\system32\]
0 >> C:\Demo\PowerShell\sql-database-vnet-service-endpoint-powershell-s1-variables.ps1
Do you need to log into Azure (only one time per powershell.exe session)?  [yes/no]: yes


Environment           : AzureCloud
Account               : xx@microsoft.com
TenantId              : 11111111-1111-1111-1111-111111111111
SubscriptionId        : 22222222-2222-2222-2222-222222222222
SubscriptionName      : MySubscriptionName
CurrentStorageAccount :



[C:\WINDOWS\system32\]
0 >> C:\Demo\PowerShell\sql-database-vnet-service-endpoint-powershell-s2-prerequisites.ps1
Check whether your Resource Group already exists.
Creating your missing Resource Group - RG-YourNameHere.


ResourceGroupName : RG-YourNameHere
Location          : westcentralus
ProvisioningState : Succeeded
Tags              :
ResourceId        : /subscriptions/22222222-2222-2222-2222-222222222222/resourceGroups/RG-YourNameHere

Check whether your Azure SQL Database server already exists.
Creating the missing Azure SQL Database server - mysqldbserver-forvnet.
Gather the credentials necessary to next create an Azure SQL Database server.
Create your Azure SQL Database server.

ResourceGroupName        : RG-YourNameHere
ServerName               : mysqldbserver-forvnet
Location                 : westcentralus
SqlAdministratorLogin    : ServerAdmin
SqlAdministratorPassword :
ServerVersion            : 12.0
Tags                     :
Identity                 :

Completed script 2, the "Prerequisites".

[C:\WINDOWS\system32\]
0 >> C:\Demo\PowerShell\sql-database-vnet-service-endpoint-powershell-s3-vnet-rule.ps1
Define a subnet 'mySubnet', to be given soon to a virtual network.
Create a virtual network 'myVNet'.   Give the subnet to the virtual network that we created.
WARNING: The output object type of this cmdlet will be modified in a future release.
Assign a Virtual Service endpoint 'Microsoft.Sql' to the subnet.
Persist the updates made to the virtual network > subnet.

Get the subnet object.
Add the subnet .Id as a rule, into the ACLs for your Azure SQL Database server.
ProvisioningState Service       Locations
----------------- -------       ---------
Succeeded         Microsoft.Sql {westcentralus}

Verify that the rule is in the SQL DB ACL.

Completed script 3, the "Virtual-Network-Rule".

[C:\WINDOWS\system32\]
0 >> C:\Demo\PowerShell\sql-database-vnet-service-endpoint-powershell-s4-clean-up.ps1
Delete the rule from the SQL DB ACL.

Delete the endpoint from the subnet.


Delete the virtual network (thus also deletes the subnet).
CAUTION !: Do you want to DELETE your Azure SQL Database server AND your Resource Group?  [yes/no]: yes
Remove the Azure SQL DB server.

ResourceGroupName        : RG-YourNameHere
ServerName               : mysqldbserver-forvnet
Location                 : westcentralus
SqlAdministratorLogin    : ServerAdmin
SqlAdministratorPassword :
ServerVersion            : 12.0
Tags                     :
Identity                 :

Remove the Azure Resource Group.
True
Completed script 4, the "Clean-Up".

Hier endet das PowerShell-Hauptskript.This is the end of our main PowerShell script.

Überprüfen, dass Ihr Subnetz ein Endpunkt istVerify your subnet is an endpoint

Wenn Ihr Subnetz bereits zum Typnamen Microsoft.Sql zugewiesen wurde, ist dieses bereits ein virtueller Dienstendpunkt.You might have a subnet that was already assigned the Microsoft.Sql type name, meaning it is already a Virtual Service endpoint. Sie können das Azure-Portal verwenden, um eine VNET-Regel für den Endpunkt zu erstellen.You could use the Azure portal to create a virtual network rule from the endpoint.

Falls Sie nicht sicher sind, ob Ihr Subnetz über den Typnamen Microsoft.Sql verfügt,Or, you might be unsure whether your subnet has the Microsoft.Sql type name. führen Sie folgendes PowerShell-Skript aus, um diese Aktionen durchzuführen:You can run the following PowerShell script to take these actions:

  1. Ermitteln, ob das Subnetz über den Typnamen Microsoft.Sql verfügt.Ascertain whether your subnet has the Microsoft.Sql type name.
  2. Zuweisen des Typnamens, wenn dieser nicht vorhanden ist (optional).Optionally, assign the type name if it is absent.
    • Das Skript fordert Sie zur Bestätigung auf, bevor der fehlende Typname angewendet wird.The script asks you to confirm, before it applies the absent type name.

Phasen des SkriptsPhases of the script

Im Folgenden finden Sie die Phasen des PowerShell-Skripts:Here are the phases of the PowerShell script:

  1. Melden Sie sich bei Ihrem Azure-Konto an. Dies ist nur einmal pro PowerShell-Sitzung nötig.LOG into to your Azure account, needed only once per PS session. Weisen Sie die Variablen zu.Assign variables.
  2. Suchen Sie Ihr virtuelles Netzwerk und dann Ihr Subnetz.Search for your virtual network, and then for your subnet.
  3. Ist Ihr Subnetz als Microsoft.Sql-Endpunktservertyp markiert?Is your subnet tagged as Microsoft.Sql endpoint server type?
  4. Fügen Sie Ihrem Subnetz einen virtuellen Dienstendpunkt des Typnamens Microsoft.Sql zu.Add a Virtual Service endpoint of type name Microsoft.Sql, on your subnet.

Wichtig

Bevor Sie dieses Skript ausführen, müssen Sie die Werte bearbeiten, die den $-Variablen am Anfang des Skripts zugewiesen sind.Before you run this script, you must edit the values assigned to the $-variables, near the top of the script.

Direkter PowerShell-QuellcodeDirect PowerShell source code

In diesem PowerShell-Skript werden keine Aktualisierungen vorgenommen, es sei denn, Sie antworten mit „Ja“, wenn Sie zur Bestätigung aufgefordert werden.This PowerShell script does not update anything, unless you respond yes if is asks you for confirmation. Das Skript kann den Typnamen Microsoft.Sql zu Ihrem Subnetz hinzufügen.The script can add the type name Microsoft.Sql to your subnet. Das Skript versucht dies jedoch nur, wenn das Subnetz keinen Typnamen besitzt.But the script tries the add only if your subnet lacks the type name.

### 1. LOG into to your Azure account, needed only once per PS session.  Assign variables.

$yesno = Read-Host 'Do you need to log into Azure (only one time per powershell.exe session)?  [yes/no]';
if ('yes' -eq $yesno) { Connect-AzAccount; }

# Assignments to variables used by the later scripts.
# You can EDIT these values, if necessary.

$SubscriptionName  = 'yourSubscriptionName';
Select-AzSubscription -SubscriptionName "$SubscriptionName";

$ResourceGroupName   = 'yourRGName';
$VNetName            = 'yourVNetName';
$SubnetName          = 'yourSubnetName';
$SubnetAddressPrefix = 'Obtain this value from the Azure portal.'; # Looks roughly like: '10.0.0.0/24'

$ServiceEndpointTypeName_SqlDb = 'Microsoft.Sql';  # Do NOT edit. Is official value.

### 2. Search for your virtual network, and then for your subnet.

# Search for the virtual network.
$vnet = $null;
$vnet = Get-AzVirtualNetwork `
  -ResourceGroupName $ResourceGroupName `
  -Name              $VNetName;

if ($vnet -eq $null)
{
    Write-Host "Caution: No virtual network found by the name '$VNetName'.";
    Return;
}

$subnet = $null;
for ($nn=0; $nn -lt $vnet.Subnets.Count; $nn++)
{
    $subnet = $vnet.Subnets[$nn];
    if ($subnet.Name -eq $SubnetName)
    { break; }
    $subnet = $null;
}

if ($subnet -eq $null)
{
    Write-Host "Caution: No subnet found by the name '$SubnetName'";
    Return;
}

### 3. Is your subnet tagged as 'Microsoft.Sql' endpoint server type?

$endpointMsSql = $null;
for ($nn=0; $nn -lt $subnet.ServiceEndpoints.Count; $nn++)
{
    $endpointMsSql = $subnet.ServiceEndpoints[$nn];
    if ($endpointMsSql.Service -eq $ServiceEndpointTypeName_SqlDb)
    {
        $endpointMsSql;
        break;
    }
    $endpointMsSql = $null;
}

if ($endpointMsSql -ne $null)
{
    Write-Host "Good: Subnet found, and is already tagged as an endpoint of type '$ServiceEndpointTypeName_SqlDb'.";
    Return;
}
else
{
    Write-Host "Caution: Subnet found, but not yet tagged as an endpoint of type '$ServiceEndpointTypeName_SqlDb'.";

    # Ask the user for confirmation.
    $yesno = Read-Host 'Do you want the PS script to apply the endpoint type name to your subnet?  [yes/no]';
    if ('no' -eq $yesno) { Return; }
}

### 4. Add a Virtual Service endpoint of type name 'Microsoft.Sql', on your subnet.

$vnet = Set-AzVirtualNetworkSubnetConfig `
  -Name            $SubnetName `
  -AddressPrefix   $SubnetAddressPrefix `
  -VirtualNetwork  $vnet `
  -ServiceEndpoint $ServiceEndpointTypeName_SqlDb;

# Persist the subnet update.
$vnet = Set-AzVirtualNetwork `
  -VirtualNetwork $vnet;

for ($nn=0; $nn -lt $vnet.Subnets.Count; $nn++)
{ $vnet.Subnets[0].ServiceEndpoints; }  # Display.

Tatsächliche AusgabeActual output

Der folgende Block zeigt das tatsächliche Feedback (mit Schönheitskorrekturen) an.The following block displays our actual feedback (with cosmetic edits).

<# Our output example (with cosmetic edits), when the subnet was already tagged:

Do you need to log into Azure (only one time per powershell.exe session)?  [yes/no]: no


Environment           : AzureCloud
Account               : xx@microsoft.com
TenantId              : 11111111-1111-1111-1111-111111111111
SubscriptionId        : 22222222-2222-2222-2222-222222222222
SubscriptionName      : MySubscriptionName
CurrentStorageAccount :


ProvisioningState : Succeeded
Service           : Microsoft.Sql
Locations         : {westcentralus}

Good: Subnet found, and is already tagged as an endpoint of type 'Microsoft.Sql'.
#>