使用 PowerShell 在 Azure VM 上建立 SQL Server
適用於:Azure SQL 受控執行個體
此 PowerShell 腳本範例會在 Azure 中建立 Windows SQL Server 虛擬機(VM)。
使用 Azure Cloud Shell
Azure Cloud Shell 是裝載於 Azure 中的互動式殼層環境,可在瀏覽器中使用。 您可以使用 Bash 或 PowerShell 搭配 Cloud Shell,與 Azure 服務共同使用。 您可以使用 Cloud Shell 預先安裝的命令,執行本文提到的程式碼,而不必在本機環境上安裝任何工具。
要啟動 Azure Cloud Shell:
選項 | 範例/連結 |
---|---|
選取程式碼區塊右上角的 [試用]。 選取 [試用] 並不會自動將程式碼複製到 Cloud Shell 中。 | ![]() |
請前往 https://shell.azure.com,或選取 [啟動 Cloud Shell] 按鈕,在瀏覽器中開啟 Cloud Shell。 | ![]() |
選取 Azure 入口網站右上方功能表列上的 [Cloud Shell] 按鈕。 | ![]() |
若要在 Azure Cloud Shell 中執行本文中的程式碼:
啟動 Cloud Shell。
選取程式碼區塊上的 [複製] 按鈕,複製程式碼。
透過在 Windows 和 Linux 上選取 Ctrl+Shift+V;或在 macOS 上選取 Cmd+Shift+V,將程式碼貼到 Cloud Shell 工作階段中。
選取 Enter 鍵執行程式碼。
如果選擇在本機安裝並使用 PowerShell,此教學課程需要 Azure PowerShell 1.4.0 或更新版本。 如果您需要升級,請參閱安裝 Azure PowerShell 模組。 如果正在本機執行 PowerShell,也需要執行 Connect-AzAccount
,以建立與 Azure 的連線。
設定變數
$SubscriptionId = "<Enter Subscription ID>"
$Location = "<Enter Location>"
$ResourceGroupName = "<Enter Resource Group Name>"
$userName = "<Enter User Name for the virtual machine"
$StorageName = "sqlvm" + "storage"
$StorageSku = "Premium_LRS"
$InterfaceName = $ResourceGroupName + "ServerInterface"
$NsgName = $ResourceGroupName + "nsg"
$TCPIPAllocationMethod = "Dynamic"
$VNetName = $ResourceGroupName + "VNet"
$SubnetName = "Default"
$VNetAddressPrefix = "10.0.0.0/16"
$VNetSubnetAddressPrefix = "10.0.0.0/24"
$DomainName = $ResourceGroupName
$VMName = $ResourceGroupName + "VM"
$ComputerName = $ResourceGroupName + "Server"
$VMSize = "Standard_DS13"
$OSDiskName = $VMName + "OSDisk"
$OfferName = "SQL2022-WS2022"
$PublisherName = "MicrosoftSQLServer"
$Version = "latest"
$Sku = "SQLDEV-GEN2"
$License = 'PAYG'
# Define a credential object
$SecurePassword = ConvertTo-SecureString '<strong password>' `
-AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential ($userName, $securePassword)
範例指令碼
# Set subscription context
Connect-AzAccount
$subscriptionContextParams = @{
SubscriptionId = $SubscriptionId
}
Set-AzContext @subscriptionContextParams
# Create a resource group
$resourceGroupParams = @{
Name = $resourceGroupName
Location = $Location
Tag = @{Owner="SQLDocs-Samples"}
}
$resourceGroup = New-AzResourceGroup @resourceGroupParams
# Create storage account
$StorageAccount = New-AzStorageAccount -ResourceGroupName $ResourceGroupName `
-Name $StorageName -SkuName $StorageSku `
-Kind "Storage" -Location $Location
# Create a subnet configuration
$SubnetConfig = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $VNetSubnetAddressPrefix
# Create a virtual network
$VNet = New-AzVirtualNetwork -Name $VNetName `
-ResourceGroupName $ResourceGroupName -Location $Location `
-AddressPrefix $VNetAddressPrefix -Subnet $SubnetConfig
# Create a public IP address
$PublicIp = New-AzPublicIpAddress -Name $InterfaceName `
-ResourceGroupName $ResourceGroupName -Location $Location `
-AllocationMethod $TCPIPAllocationMethod -DomainNameLabel $DomainName
# Create a network security group rule
$NsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name "RDPRule" -Protocol Tcp `
-Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * `
-DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow
$NsgRuleSQL = New-AzNetworkSecurityRuleConfig -Name "MSSQLRule" -Protocol Tcp `
-Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * `
-DestinationAddressPrefix * -DestinationPortRange 1433 -Access Allow
# Create a network security group
$Nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName `
-Location $Location -Name $NsgName `
-SecurityRules $NsgRuleRDP,$NsgRuleSQL
# Create a network interface
$Interface = New-AzNetworkInterface -Name $InterfaceName `
-ResourceGroupName $ResourceGroupName -Location $Location `
-SubnetId $VNet.Subnets[0].Id -PublicIpAddressId $PublicIp.Id `
-NetworkSecurityGroupId $Nsg.Id
# Create a virtual machine configuration
$VMName = $ResourceGroupName + "VM"
$VMConfig = New-AzVMConfig -VMName $VMName -VMSize $VMSize |
Set-AzVMOperatingSystem -Windows -ComputerName $VMName -Credential $Cred -ProvisionVMAgent -EnableAutoUpdate |
Set-AzVMSourceImage -PublisherName $PublisherName -Offer $OfferName -Skus $Sku -Version $Version |
Add-AzVMNetworkInterface -Id $Interface.Id
# Create the VM
New-AzVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VMConfig
# Register the SQL IaaS Agent extension to your subscription
Register-AzResourceProvider -ProviderNamespace Microsoft.SqlVirtualMachine
# Register SQL Server VM with the extension
New-AzSqlVM -Name $VMName -ResourceGroupName $ResourceGroupName -Location $Location `
-LicenseType $License
清除部署
使用下列命令來移除資源群組及其所有相關聯的資源。
# Clean up deployment
# Stop-AzVM -Name $VMName -ResourceGroupName $ResourceGroupName
# Remove-AzResourceGroup -ResourceGroupName $ResourceGroupName
指令碼說明
本文中的文稿會使用下列命令:
Command | 注意 |
---|---|
Get-AzVMImageOffer | 列出所有 Azure VM 映像。 |
Get-AzVMImageSku | 列出特定供應專案的 SKU。 |
New-AzResourceGroup | 建立用來存放所有資源的資源群組。 |
New-AzStorageAccount | 建立新的 Azure 記憶體帳戶。 |
New-AzVirtualNetworkSubnetConfig | 建立並設定新的子網。 |
New-AzVirtualNetwork | 建立虛擬網路。 |
New-AzPublicIpAddress | 建立公用 IP 位址。 |
New-AzNetworkSecurityGroup | 建立新的安全組。 |
New-AzNetworkInterface | 建立網路介面。 |
New-AzVMConfig | 建立可設定的虛擬機物件。 |
Add-AzVMNetworkInterface | 將網路介面新增至虛擬機。 |
Register-AzResourceProvider | 註冊資源提供者。 |
New-AzSqlVM | 建立或更新 SQL 虛擬機 資源。 |
Stop-AzVM | 停止 Azure 虛擬機。 |
Remove-AzResourceGroup | 拿掉 Azure 中的資源群組。 |
相關內容
如需有關 Azure PowerShell 的詳細資訊,請參閱 Azure PowerShell 文件。