The SharePoint Server 2016 dev/test environment in Azure TechNet article steps through the creation of a single-server SharePoint Server 2016 farm in Azure infrastructure services.

The SP2016DevTest_PowerShell.txt file contains all of the PowerShell commands in the article so you can more easily create the Azure elements and configure each virtual machine.

PowerShell
Edit|Remove
# 
# This text file contains all of the PowerShell commands from the TechNet article titled 
# "SharePoint Server 2016 dev/test environment in Azure" at https://technet.microsoft.com/library/mt723354(v=office.16).aspx. 
# Use it to build out a single-server SharePoint Server 2016 farm in Azure infrastructure services. 
# 
# These commands use the latest version of Azure PowerShell. 
 
# Sign in with your Azure account from the PowerShell command prompt on your computer 
Login-AzureRMAccount 
 
# List your subscription names 
Get-AzureRMSubscription | Sort Name | Select Name 
 
# Set your Azure subscription 
# Set the $subscrName variable by replacing everything within the quotes, including the < and > characters, with the correct name. 
$subscrName="<subscription name>" 
Get-AzureRmSubscription -SubscriptionName $subscrName | Select-AzureRmSubscription 
 
# List your resource group names 
Get-AzureRMResourceGroup | Sort ResourceGroupName | Select ResourceGroupName 
 
# Create your new resource group 
$rgName="<resource group name>" 
$locName="<location name, such as West US>" 
New-AzureRMResourceGroup -SubscriptionName $rgName -Location $locName 
 
# Create the Azure virtual network 
$rgName="<name of your new resource group>" 
$locName=(Get-AzureRmResourceGroup -Name $rgName).Location 
$spSubnet=New-AzureRMVirtualNetworkSubnetConfig -Name SP2016Subnet -AddressPrefix 10.0.0.0/24 
New-AzureRMVirtualNetwork -Name SP2016Vnet -ResourceGroupName $rgName -Location $locName -AddressPrefix 10.0.0.0/16 -Subnet $spSubnet -DNSServer 10.0.0.4 
$rule1=New-AzureRMNetworkSecurityRuleConfig -Name "RDPTraffic" -Description "Allow RDP to all VMs on the subnet" -Access Allow -Protocol Tcp -Direction Inbound -Priority 100 -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389 
$rule2 = New-AzureRMNetworkSecurityRuleConfig -Name "WebTraffic" -Description "Allow HTTP to the SharePoint server" -Access Allow -Protocol Tcp -Direction Inbound -Priority 101 -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix "10.0.0.6/32" -DestinationPortRange 80 
New-AzureRMNetworkSecurityGroup -Name SP2016Subnet -ResourceGroupName $rgName -Location $locName -SecurityRules $rule1$rule2 
$vnet=Get-AzureRMVirtualNetwork -ResourceGroupName $rgName -Name SP2016Vnet 
$nsg=Get-AzureRMNetworkSecurityGroup -Name SP2016Subnet -ResourceGroupName $rgName 
Set-AzureRMVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name SP2016Subnet -AddressPrefix "10.0.0.0/24" -NetworkSecurityGroup $nsg 
 
 
########################### 
# Create and configure adVM 
########################### 
 
$rgName="<resource group name>" 
 
# Get the location 
$locName=(Get-AzureRmResourceGroup -Name $rgName).Location 
 
# Create an availability set for domain controller virtual machines 
New-AzureRMAvailabilitySet -ResourceGroupName $rgName -Name dcAvailabilitySet -Location $locName -Sku Aligned  -PlatformUpdateDomainCount 5 -PlatformFaultDomainCount 2 
 
 
 
# Create the adVM virtual machine 
$vmName="adVM" 
$vmSize="Standard_D1_v2" 
$vnet=Get-AzureRMVirtualNetwork -Name SP2016Vnet -ResourceGroupName $rgName 
$pip = New-AzureRMPublicIpAddress -Name ($vmName + "-PIP"-ResourceGroupName $rgName -Location $locName -AllocationMethod Dynamic 
$nic = New-AzureRMNetworkInterface -Name ($vmName + "-NIC"-ResourceGroupName $rgName -Location $locName -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -PrivateIpAddress 10.0.0.4 
$avSet=Get-AzureRMAvailabilitySet –Name dcAvailabilitySet –ResourceGroupName $rgName  
$vm=New-AzureRMVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avSet.Id 
$vm=Set-AzureRmVMOSDisk -VM $vm -Name ($vmName +"-OS"-DiskSizeInGB 128 -CreateOption FromImage -StorageAccountType "StandardLRS" 
$diskConfig=New-AzureRmDiskConfig -AccountType "StandardLRS" -Location $locName -CreateOption Empty -DiskSizeGB 20 
$dataDisk1=New-AzureRmDisk -DiskName ($vmName + "-DataDisk1"-Disk $diskConfig -ResourceGroupName $rgName 
$vm=Add-AzureRmVMDataDisk -VM $vm -Name ($vmName + "-DataDisk1"-CreateOption Attach -ManagedDiskId $dataDisk1.Id -Lun 1 
$cred=Get-Credential -Message "Type the name and password of the local administrator account for adVM." 
$vm=Set-AzureRMVMOperatingSystem -VM $vm -Windows -ComputerName adVM -Credential $cred -ProvisionVMAgent -EnableAutoUpdate 
$vm=Set-AzureRMVMSourceImage -VM $vm -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2012-R2-Datacenter -Version "latest" 
$vm=Add-AzureRMVMNetworkInterface -VM $vm -Id $nic.Id 
New-AzureRMVM -ResourceGroupName $rgName -Location $locName -VM $vm 
 
# Add the extra data disk from the PowerShell command prompt on adVM 
Get-Disk | Where PartitionStyle -eq "RAW" | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "WSAD Data" 
 
# Make adVM a domain controller in the new corp.contoso.com forest from the PowerShell command prompt on adVM 
Install-WindowsFeature AD-Domain-Services -IncludeManagementTools 
Install-ADDSForest -DomainName corp.contoso.com -DatabasePath "F:\NTDS" -SysvolPath "F:\SYSVOL" -LogPath "F:\Logs" 
 
# Install Windows Server AD tools and add the sp_farm_db user account from the PowerShell command prompt on adVM 
Add-WindowsFeature RSAT-ADDS-Tools 
New-ADUser -SamAccountName sp_farm_db -AccountPassword (read-host "Set user password" -assecurestring) -name "sp_farm_db" -enabled $true -PasswordNeverExpires $true -ChangePasswordAtLogon $false 
 
############################ 
# Create and configure sqlVM 
############################ 
 
# Log in to Azure from the PowerShell command prompt on your computer 
Login-AzureRmAccount 
 
# Set up key variables 
$subscrName="<name of your Azure subscription>" 
$rgName="<your resource group name>" 
 
# Set the Azure subscription and location 
Get-AzureRmSubscription -Name $subscrName | Select-AzureRmSubscription 
$locName=(Get-AzureRmResourceGroup -Name $rgName).Location 
 
# Create an availability set for SQL Server virtual machines 
New-AzureRMAvailabilitySet -ResourceGroupName $rgName -Name sqlAvailabilitySet -Location $locName -Sku Aligned  -PlatformUpdateDomainCount 5 -PlatformFaultDomainCount 2 
 
# Create the sqlVM virtual machine 
$vmName="sqlVM" 
$vmSize="Standard_D3_V2" 
$vnet=Get-AzureRMVirtualNetwork -Name "SP2016Vnet" -ResourceGroupName $rgName 
$pip=New-AzureRMPublicIpAddress -Name ($vmName + "-PIP"-ResourceGroupName $rgName -Location $locName -AllocationMethod Dynamic 
$nic=New-AzureRMNetworkInterface -Name ($vmName + "-NIC"-ResourceGroupName $rgName -Location $locName -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -PrivateIpAddress "10.0.0.5" 
$avSet=Get-AzureRMAvailabilitySet -Name sqlAvailabilitySet -ResourceGroupName $rgName  
$vm=New-AzureRMVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avSet.Id 
$vm=Set-AzureRmVMOSDisk -VM $vm -Name ($vmName +"-OS"-DiskSizeInGB 128 -CreateOption FromImage -StorageAccountType "StandardLRS" 
$diskSize=100 
$diskConfig=New-AzureRmDiskConfig -AccountType "StandardLRS" -Location $locName -CreateOption Empty -DiskSizeGB $diskSize 
$dataDisk1=New-AzureRmDisk -DiskName ($vmName + "-SQLData"-Disk $diskConfig -ResourceGroupName $rgName 
$vm=Add-AzureRmVMDataDisk -VM $vm -Name ($vmName + "-SQLData"-CreateOption Attach -ManagedDiskId $dataDisk1.Id -Lun 1 
$cred=Get-Credential -Message "Type the name and password of the local administrator account of the SQL Server computer."  
$vm=Set-AzureRMVMOperatingSystem -VM $vm -Windows -ComputerName $vmName -Credential $cred -ProvisionVMAgent -EnableAutoUpdate 
$vm=Set-AzureRMVMSourceImage -VM $vm -PublisherName MicrosoftSQLServer -Offer SQL2014SP1-WS2012R2 -Skus Standard -Version "latest" 
$vm=Add-AzureRMVMNetworkInterface -VM $vm -Id $nic.Id 
New-AzureRMVM -ResourceGroupName $rgName -Location $locName -VM $vm 
 
 
# Add sqlVM to the corp.contoso.com domain from the PowerShell command prompt on sqlVM 
Add-Computer -DomainName "corp.contoso.com" 
Restart-Computer 
 
# Add the extra data disk and create folders on the F: drive from the PowerShell command prompt on sqlVM 
Get-Disk | Where PartitionStyle -eq "RAW" | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "WSAD Data" 
md f:\Data 
md f:\Log 
md f:\Backup 
 
# Configure Windows Firewall to allow SQL traffic from the PowerShell command prompt on sqlVM 
New-NetFirewallRule -DisplayName "SQL Server ports 1433, 1434, and 5022" -Direction Inbound -Protocol TCP -LocalPort 1433,1434,5022 -Action Allow 
 
 
 
########################### 
# Create and configure spVM 
########################### 
 
# Log in to Azure from the PowerShell command prompt on your computer 
Login-AzureRmAccount 
 
# Set up key variables 
$subscrName="<name of your Azure subscription>" 
$rgName="<your resource group name>" 
$dnsName="<unique, public domain name label for the SharePoint server>" 
 
# Set the Azure subscription 
Get-AzureRmSubscription -Name $subscrName | Select-AzureRmSubscription 
 
# Get the location 
$locName=(Get-AzureRmResourceGroup -Name $rgName).Location 
 
# Create an availability set for SharePoint virtual machines 
New-AzureRMAvailabilitySet -ResourceGroupName $rgName -Name spAvailabilitySet -Location $locName -Sku Aligned  -PlatformUpdateDomainCount 5 -PlatformFaultDomainCount 2 
 
# Create the spVM virtual machine 
$vmName="spVM" 
$vmSize="Standard_D3_V2" 
$vm=New-AzureRMVMConfig -VMName $vmName -VMSize $vmSize 
$pip=New-AzureRMPublicIpAddress -Name ($vmName + "-PIP"-ResourceGroupName $rgName -DomainNameLabel $dnsName -Location $locName -AllocationMethod Dynamic 
$vnet=Get-AzureRMVirtualNetwork -Name "SP2016Vnet" -ResourceGroupName $rgName 
$nic=New-AzureRMNetworkInterface -Name ($vmName + "-NIC"-ResourceGroupName $rgName -Location $locName -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -PrivateIpAddress "10.0.0.6" 
$avSet=Get-AzureRMAvailabilitySet –Name spAvailabilitySet –ResourceGroupName $rgName  
$vm=New-AzureRMVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avSet.Id 
$vm=Set-AzureRmVMOSDisk -VM $vm -Name ($vmName +"-OS"-DiskSizeInGB 128 -CreateOption FromImage -StorageAccountType "StandardLRS" 
$cred=Get-Credential -Message "Type the name and password of the local administrator account." 
$vm=Set-AzureRMVMOperatingSystem -VM $vm -Windows -ComputerName $vmName -Credential $cred -ProvisionVMAgent -EnableAutoUpdate 
$vm=Set-AzureRMVMSourceImage -VM $vm -PublisherName "MicrosoftSharePoint" -Offer "MicrosoftSharePointServer" -Skus "2016" -Version "latest" 
$vm=Add-AzureRMVMNetworkInterface -VM $vm -Id $nic.Id 
New-AzureRMVM -ResourceGroupName $rgName -Location $locName -VM $vm 
 
# Add spVM to the corp.contoso.com domain from the PowerShell command prompt on spVM 
Add-Computer -DomainName "corp.contoso.com" 
Restart-Computer 
 
 
# Display the DNS name for the alternate access mapping from the PowerShell command prompt on your computer 
Write-Host (Get-AzureRMPublicIpaddress -Name "spVM-PIP" -ResourceGroup $rgName).DnsSettings.Fqdn 
 
# 
# Stop the VMs in the farm from the PowerShell command prompt on your computer 
# 
$rgName="<your resource group name>" 
Stop-AzureRMVM -Name spVM -ResourceGroupName $rgName -Force 
Stop-AzureRMVM -Name sqlVM -ResourceGroupName $rgName -Force 
Stop-AzureRMVM -Name adVM -ResourceGroupName $rgName -Force 
 
 
# 
# Start the VMs in the farm from the PowerShell command prompt on your computer 
# 
$rgName="<your resource group name>" 
Start-AzureRMVM -Name adVM -ResourceGroupName $rgName 
Start-AzureRMVM -Name sqlVM -ResourceGroupName $rgName 
Start-AzureRMVM -Name spVM -ResourceGroupName $rgName