1
1
function New-AzVm {
2
2
[CmdletBinding ()]
3
3
param (
4
- [PSCredential ] $credential ,
5
- [string ] $imageName = " Win2012R2Datacenter" ,
6
- [string ] $name = " vmTest"
4
+ [Parameter ()][PSCredential ] $Credential ,
5
+ [Parameter ()][string ] $Name = " VM" ,
6
+ [Parameter ()][string ] $ImageName = " Win2012R2Datacenter" ,
7
+ [Parameter ()][string ] $ResourceGroupName = $Name + " ResourceGroup" ,
8
+ [Parameter ()][string ] $Location = " eastus" ,
9
+ [Parameter ()][string ] $VirtualNetworkName = $Name + " VirtualNetwork" ,
10
+ [Parameter ()][string ] $PublicIpAddressName = $Name + " PublicIpAddress" ,
11
+ [Parameter ()][string ] $SecurityGroupName = $Name + " SecurityGroup" ,
12
+ [Parameter ()][string ] $NetworkInterfaceName = $Name + " NetworkInterface"
7
13
)
8
14
9
15
PROCESS {
10
- if (-not $credential ) {
11
- $credential = Get-Credential
16
+ if (-not $Credential ) {
17
+ $Credential = Get-Credential
12
18
}
13
19
14
20
# Find VM Image
15
- $vmImageName = $imageName
16
- $vmImage = $images | Where-Object { $_.Name -eq $vmImageName } | Select-Object - First 1
21
+ $vmImage = $images | Where-Object { $_.Name -eq $ImageName } | Select-Object - First 1
22
+ if (-not $vmImage ) {
23
+ throw " Unknown image: " + $ImageName
24
+ }
17
25
18
26
Write-Host $vmImage
19
27
20
28
# Location
21
29
Write-Host " Load locations..."
22
- $location = (Get-AzureRmLocation | Select-Object - First 1 - Wait).Location
23
- $location = " eastus"
30
+ # $Location = (Get-AzureRmLocation | Select-Object -First 1 -Wait).Location
24
31
Write-Host " done"
25
32
26
33
# Resource Group
27
- $resourceGroupName = " resourceGroupTest"
28
- $resource = New-AzureRmResourceGroup - Name $resourceGroupName - Location $location
34
+ $resource = New-AzureRmResourceGroup - Name $ResourceGroupName - Location $Location
29
35
30
36
# Virtual Network
31
- $virtualNetworkName = " virtualNetworkTest"
32
37
$virtualNetworkAddressPrefix = " 192.168.0.0/16"
33
- $subnet = @ { Name = " subnetTest" ; AddressPrefix = " 192.168.1.0/24" }
34
- $subnetConfig = New-AzureRmVirtualNetworkSubnetConfig - Name $subnet.Name - AddressPrefix $subnet.AddressPrefix
38
+ $subnet = @ { Name = $Name + " Subnet" ; AddressPrefix = " 192.168.1.0/24" }
39
+ $subnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
40
+ - Name $subnet.Name `
41
+ - AddressPrefix $subnet.AddressPrefix
35
42
$virtualNetwork = New-AzureRmVirtualNetwork `
36
- - ResourceGroupName $resourceGroupName `
37
- - Location $location `
38
- - Name $virtualNetworkName `
43
+ - ResourceGroupName $ResourceGroupName `
44
+ - Location $Location `
45
+ - Name $VirtualNetworkName `
39
46
- AddressPrefix $virtualNetworkAddressPrefix `
40
47
- Subnet $subnetConfig
41
48
42
49
# Piblic IP
43
- $publicIpAddressName = " publicIpAddressTest"
44
50
$publicIpAddress = New-AzureRmPublicIpAddress `
45
- - ResourceGroupName $resourceGroupName `
46
- - Location $location `
51
+ - ResourceGroupName $ResourceGroupName `
52
+ - Location $Location `
47
53
- AllocationMethod Static `
48
- - Name $publicIpAddressName
54
+ - Name $PublicIpAddressName
49
55
50
56
# Security Group (it may have several rules(ports))
51
- $securityGroupName = " securityGroupTest"
52
57
$securityRule = @ {
53
- Name = " securityRuleTest " ;
58
+ Name = $Name + " SecurityRule " ;
54
59
Protocol = " Tcp" ;
55
60
Priority = 1000 ;
56
61
Access = " Allow" ;
@@ -71,38 +76,36 @@ function New-AzVm {
71
76
- DestinationPortRange $securityRule.DestinationPortRange `
72
77
- DestinationAddressPrefix $securityRule.DestinationAddressPrefix
73
78
$securityGroup = New-AzureRmNetworkSecurityGroup `
74
- - ResourceGroupName $resourceGroupName `
75
- - Location $location `
76
- - Name $securityGroupName `
79
+ - ResourceGroupName $ResourceGroupName `
80
+ - Location $Location `
81
+ - Name $SecurityGroupName `
77
82
- SecurityRules $securityRuleConfig
78
83
79
84
# Network Interface
80
- $networkInterfaceName = " networkInterfaceTest"
81
85
$networkInterface = New-AzureRmNetworkInterface `
82
- - ResourceGroupName $resourceGroupName `
83
- - Location $location `
84
- - Name $networkInterfaceName `
86
+ - ResourceGroupName $ResourceGroupName `
87
+ - Location $Location `
88
+ - Name $NetworkInterfaceName `
85
89
- PublicIpAddressId $publicIpAddress.Id `
86
90
- SubnetId $virtualNetwork.Subnets [0 ].Id `
87
91
- NetworkSecurityGroupId $securityGroup.Id
88
92
89
93
# VM
90
- # $vmCredentials = Get-Credential
91
- $vm = @ { Name = $name ; Size = " Standard_DS2" }
94
+ $vm = @ { Name = $Name ; Size = " Standard_DS2" }
92
95
$vmConfig = New-AzureRmVMConfig - VMName $vm.Name - VMSize $vm.Size
93
96
$vmComputer = $vm.Name
94
97
switch ($vmImage.Type ) {
95
98
" Windows" {
96
99
$vmConfig = $vmConfig | Set-AzureRmVMOperatingSystem `
97
100
- Windows `
98
101
- ComputerName $vmComputer `
99
- - Credential $credential
102
+ - Credential $Credential
100
103
}
101
104
" Linux" {
102
105
$vmConfig = $vmConfig | Set-AzureRmVMOperatingSystem `
103
106
- Linux `
104
107
- ComputerName $vmComputer `
105
- - Credential $credential
108
+ - Credential $Credential
106
109
}
107
110
}
108
111
@@ -118,7 +121,10 @@ function New-AzVm {
118
121
119
122
New-PsObject @ {
120
123
ResourceId = $resource.ResourceId ;
121
- Response = New-AzureRmVm - ResourceGroupName $resourceGroupName - Location $location - VM $vmConfig
124
+ Response = New-AzureRmVm `
125
+ - ResourceGroupName $ResourceGroupName `
126
+ - Location $Location `
127
+ - VM $vmConfig
122
128
}
123
129
}
124
130
}
0 commit comments