Skip to content

Commit 6f1618b

Browse files
initial script, still POC and with nothing sensitive
Still dodgy and needs cleanup
1 parent 753103a commit 6f1618b

1 file changed

Lines changed: 113 additions & 0 deletions

File tree

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
<#
2+
.SYNOPSIS
3+
Creates a small environment in Azure.
4+
5+
.DESCRIPTION
6+
A PowerShell script that creates a small environment in Azure.
7+
8+
.PARAMETER VmSize
9+
The unique identifier of the client (app registration).
10+
11+
.PARAMETER AdministratorCredentials
12+
The credentials of the administrator user.
13+
14+
.OUTPUTS
15+
On success - the environment is created.
16+
On failure - an error message indicating what went wrong.
17+
18+
.EXAMPLE
19+
Create-SmallEnvironment -VmSize $vmSize -AdministratorCredentials $credentials
20+
#>
21+
22+
[CmdletBinding()]
23+
param (
24+
[Parameter(Mandatory = $true, HelpMessage = "Please provide the virtual machine size.")]
25+
[string]$VmSize,
26+
27+
[Parameter(Mandatory = $true, HelpMessage = "Please pass a credentials object for the administrator user.")]
28+
[System.Management.Automation.PSCredential]$AdministratorCredentials
29+
)
30+
31+
############# Environment Settings
32+
$region = "Sweden Central" # swedencentral
33+
$resourceGroupName = "QuantumDMS-BLD-PROD"
34+
35+
$vmName = "QuantumDMS-VM01"
36+
$vmSize = "Standard_D2_v5"
37+
$vmStorageAccountName = "quantumdms$(Get-Random)" # Must be globally unique
38+
39+
$virtualNetworkName = "quantumdms-vnet"
40+
$virtualNetworkNicName = "quantumdms-nic"
41+
$virtualNetworkAddressPrefixes = "192.168.0.0/16" # NOT SURE ABOUT THIS
42+
$virtualNetworkSubnetName = "quantumdms-subnet"
43+
$virtualNetworkSubnetPrefix = "192.168.1.0/24"
44+
45+
$nsgName = "quantumdms-nsg"
46+
#$nsgRuleSSHName = "quantumdms-nsg-ssh"
47+
$nsgRuleWebName = "quantumdms-nsg-web"
48+
$nsgRuleAdminName = "quantumdms-nsg-admin"
49+
$nsgRuleRdpName = "quantumdms-nsg-rdp"
50+
51+
$dataDiskName = "quantumdms-disk-data"
52+
$osDiskName = "quantumdms-disk-os"
53+
$dataDiskSize = 64
54+
55+
$publicIpName = "quantumdms-publicip"
56+
$domainNameLabel = "quantumdms-bld"
57+
$publicIPAllocationMethod = "Static"
58+
############# Environment Settings
59+
60+
# Create Resource Group
61+
New-AzResourceGroup -Name $resourceGroupName -Location $region
62+
63+
# Storage account
64+
New-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $vmStorageAccountName -Type Standard_LRS -Location $region -Kind StorageV2 -AccessTier Hot
65+
66+
# Create a subnet configuration
67+
$subnetConfig = New-AzVirtualNetworkSubnetConfig -Name $virtualNetworkSubnetName -AddressPrefix $virtualNetworkSubnetPrefix
68+
69+
# Create a virtual network
70+
$vnet = New-AzVirtualNetwork -ResourceGroupName $resourceGroupName -Location $region -Name $virtualNetworkName -AddressPrefix $virtualNetworkAddressPrefixes -Subnet $subnetConfig
71+
72+
# Create a public IP address and specify a DNS name
73+
$pip = New-AzPublicIpAddress -ResourceGroupName $resourceGroupName -Location $region -AllocationMethod $publicIPAllocationMethod -IdleTimeoutInMinutes 4 -Name "$publicIpName$(Get-Random)" -DomainNameLabel $domainNameLabel
74+
75+
# Create an inbound network security group rule for port 443
76+
$nsgRuleWeb = New-AzNetworkSecurityRuleConfig -Name $nsgRuleWebName -Protocol Tcp `
77+
-Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 443 -Access Allow
78+
79+
# Create an inbound network security group rule for port 5001
80+
$nsgRuleAdmin = New-AzNetworkSecurityRuleConfig -Name $nsgRuleAdminName -Protocol Tcp `
81+
-Direction Inbound -Priority 1002 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 5001 -Access Allow
82+
83+
# Create an inbound network security group rule for port 3389
84+
$nsgRuleRdp = New-AzNetworkSecurityRuleConfig -Name $nsgRuleRdpName -Protocol Tcp `
85+
-Direction Inbound -Priority 1003 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow
86+
87+
# Create a network security group
88+
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $resourceGroupName -Location $region -Name $nsgName -SecurityRules $nsgRuleWeb,$nsgRuleAdmin,$nsgRuleRdp
89+
90+
# Create a virtual network card and associate it with public IP address and NSG
91+
$nic = New-AzNetworkInterface -Name $virtualNetworkNicName -ResourceGroupName $resourceGroupName -Location $region -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id
92+
93+
# Virtual Machine
94+
$virtualMachineConfig = New-AzVMConfig -VMName $vmName -VMSize $vmSize
95+
96+
Set-AzVMOperatingSystem -VM $virtualMachineConfig -Windows -ComputerName $vmName -Credential $credentials
97+
98+
Set-AzVMSourceImage -VM $virtualMachineConfig -PublisherName "MicrosoftWindowsServer" -Offer "WindowsServer" -Skus "2022-datacenter-azure-edition-core" -Version "latest"
99+
100+
# Set the operating system disk properties on a VM
101+
$setDiskResult = Set-AzVMOSDisk -VM $virtualMachineConfig -CreateOption FromImage -StorageAccountType StandardSSD_LRS -Name $osDiskName
102+
$setDiskResult | Set-AzVMBootDiagnostic -ResourceGroupName $resourceGroupName -StorageAccountName $vmStorageAccountName -Enable | Add-AzVMNetworkInterface -Id $nic.Id
103+
104+
# Create the VM
105+
New-AzVM -ResourceGroupName $resourceGroupName -Location $region -VM $virtualMachineConfig
106+
$vm = Get-AzVm -ResourceGroupName $resourceGroupName -Name $vmName
107+
108+
# Data disk
109+
$diskConfig = New-AzDiskConfig -Location $region -CreateOption Empty -DiskSizeGB $dataDiskSize -SkuName StandardSSD_LRS
110+
$newDataDisk = New-AzDisk -ResourceGroupName $resourceGroupName -DiskName $dataDiskName -Disk $diskConfig
111+
Add-AzVMDataDisk -VM $vm -Name $dataDiskName -CreateOption Attach -ManagedDiskId $newDataDisk.Id -Lun 1
112+
Update-AzVM -VM $vm -ResourceGroupName $vm.ResourceGroupName
113+
Invoke-AzVMRunCommand -VM $vm -CommandId 'RunPowerShellScript' -ScriptString "Get-disk | where-Object Number -eq '1' | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -UseMaximumSize -DriveLetter E | Format-Volume -FileSystem NTFX -NewFileSystemLabel 'QuantumDMS-Data'"

0 commit comments

Comments
 (0)