2
2
. ExternalHelp AzureRM.Compute.Experiments-help.xml
3
3
#>
4
4
function New-AzVm {
5
- [CmdletBinding ()]
5
+ [CmdletBinding (SupportsShouldProcess = $true )]
6
6
param (
7
- [Parameter (Mandatory = $true )][string ] $Name = " VM" ,
7
+ [Parameter (Mandatory = $true , Position = 0 )][string ] $Name = " VM" ,
8
8
[Parameter ()][PSCredential ] $Credential ,
9
9
[Parameter ()][string ] $ImageName = " Win2012R2Datacenter" ,
10
10
[Parameter ()][string ] $ResourceGroupName ,
11
11
[Parameter ()][string ] $Location ,
12
12
[Parameter ()][string ] $VirtualNetworkName ,
13
13
[Parameter ()][string ] $PublicIpAddressName ,
14
14
[Parameter ()][string ] $SecurityGroupName
15
- # [Parameter()][string] $NetworkInterfaceName
16
15
)
17
16
18
17
PROCESS {
19
18
$rgi = [ResourceGroup ]::new($ResourceGroupName );
19
+
20
20
$vni = [VirtualNetwork ]::new($VirtualNetworkName );
21
21
$piai = [PublicIpAddress ]::new($PublicIpAddressName );
22
22
$sgi = [SecurityGroup ]::new($SecurityGroupName );
23
+
24
+ # we don't allow to reuse NetworkInterface so $name is $null.
23
25
$nii = [NetworkInterface ]::new(
24
- $null , # $NetworkInterfaceName,
26
+ $null ,
25
27
$vni ,
26
28
$piai ,
27
29
$sgi );
30
+
31
+ # the purpouse of the New-AzVm cmdlet is to create (not get) a VM so $name is $null.
28
32
$vmi = [VirtualMachine ]::new($null , $nii , $rgi , $Credential , $ImageName , $images );
29
33
34
+ # infer a location
30
35
$locationi = [Location ]::new();
31
36
if (-not $Location ) {
32
37
$vmi.UpdateLocation ($locationi );
@@ -37,12 +42,16 @@ function New-AzVm {
37
42
$locationi.Value = $Location ;
38
43
}
39
44
40
- $resourceGroup = $rgi.GetOrCreate ($Name + " ResourceGroup" , $locationi.Value , $null );
41
- $vmResponse = $vmi.Create ($Name , $locationi.Value , $resourceGroup.ResourceGroupName );
45
+ $createParams = [CreateParams ]::new($Name , $locationi.Value , $Name );
42
46
43
- New-PsObject @ {
44
- ResourceId = $resourceGroup.ResourceId ;
45
- Response = $vmResponse ;
47
+ if ($PSCmdlet.ShouldProcess ($Name , " Creating a virtual machine" )) {
48
+ $resourceGroup = $rgi.GetOrCreate ($createParams );
49
+ $vmResponse = $vmi.Create ($createParams );
50
+
51
+ New-PsObject @ {
52
+ ResourceId = $resourceGroup.ResourceId ;
53
+ Response = $vmResponse ;
54
+ }
46
55
}
47
56
}
48
57
}
@@ -57,6 +66,18 @@ class Location {
57
66
}
58
67
}
59
68
69
+ class CreateParams {
70
+ [string ] $Name ;
71
+ [string ] $Location ;
72
+ [string ] $ResourceGroupName ;
73
+
74
+ CreateParams([string ] $name , [string ] $location , [string ] $resourceGroupName ) {
75
+ $this.Name = $name ;
76
+ $this.Location = $location ;
77
+ $this.ResourceGroupName = $resourceGroupName ;
78
+ }
79
+ }
80
+
60
81
class AzureObject {
61
82
[string ] $Name ;
62
83
[AzureObject []] $Children ;
@@ -79,7 +100,7 @@ class AzureObject {
79
100
return $null ;
80
101
}
81
102
82
- [object ] Create([string ] $name , [ string ] $location , [ string ] $resourceGroupName ) {
103
+ [object ] Create([CreateParams ] $p ) {
83
104
return $null ;
84
105
}
85
106
@@ -96,12 +117,12 @@ class AzureObject {
96
117
}
97
118
}
98
119
99
- [object ] GetOrCreate([string ] $name , [ string ] $location , [ string ] $resourceGroupName ) {
120
+ [object ] GetOrCreate([CreateParams ] $p ) {
100
121
if ($this.Name ) {
101
122
return $this.GetInfo ();
102
123
} else {
103
- $result = $this.Create ($name , $location , $resourceGroupName );
104
- $this.Name = $name ;
124
+ $result = $this.Create ($p );
125
+ $this.Name = $p .Name ;
105
126
return $result ;
106
127
}
107
128
}
@@ -115,8 +136,11 @@ class ResourceGroup: AzureObject {
115
136
return Get-AzureRmResourceGroup - Name $this.Name ;
116
137
}
117
138
118
- [object ] Create([string ] $name , [string ] $location , [string ] $resourceGroupName ) {
119
- return New-AzureRmResourceGroup - Name $name - Location $location ;
139
+ [object ] Create([CreateParams ] $p ) {
140
+ return New-AzureRmResourceGroup `
141
+ - Name $p.Name `
142
+ - Location $p.Location `
143
+ - WarningAction SilentlyContinue;
120
144
}
121
145
}
122
146
@@ -133,16 +157,17 @@ class VirtualNetwork: Resource1 {
133
157
return Get-AzureRmVirtualNetwork - Name $this.Name ;
134
158
}
135
159
136
- [object ] Create([string ] $name , [ string ] $location , [ string ] $resourceGroupName ) {
160
+ [object ] Create([CreateParams ] $p ) {
137
161
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
138
162
- Name " Subnet" `
139
163
- AddressPrefix " 192.168.1.0/24"
140
164
return New-AzureRmVirtualNetwork `
141
- - ResourceGroupName $resourceGroupName `
142
- - Location $location `
143
- - Name $name `
165
+ - ResourceGroupName $p .ResourceGroupName `
166
+ - Location $p .Location `
167
+ - Name $p .Name `
144
168
- AddressPrefix " 192.168.0.0/16" `
145
- - Subnet $subnetConfig
169
+ - Subnet $subnetConfig `
170
+ - WarningAction SilentlyContinue
146
171
}
147
172
}
148
173
@@ -154,12 +179,13 @@ class PublicIpAddress: Resource1 {
154
179
return Get-AzureRMPublicIpAddress - Name $this.Name ;
155
180
}
156
181
157
- [object ] Create([string ] $name , [ string ] $location , [ string ] $resourceGroupName ) {
182
+ [object ] Create([CreateParams ] $p ) {
158
183
return New-AzureRmPublicIpAddress `
159
- - ResourceGroupName $resourceGroupName `
160
- - Location $location `
184
+ - ResourceGroupName $p.ResourceGroupName `
185
+ - Location $p.Location `
186
+ - Name $p.Name `
161
187
- AllocationMethod Static `
162
- - Name $name
188
+ - WarningAction SilentlyContinue
163
189
}
164
190
}
165
191
@@ -171,9 +197,9 @@ class SecurityGroup: Resource1 {
171
197
return Get-AzureRMSecurityGroup - Name $this.Name ;
172
198
}
173
199
174
- [object ] Create([string ] $name , [ string ] $location , [ string ] $resourceGroupName ) {
200
+ [object ] Create([CreateParams ] $p ) {
175
201
$securityRuleConfig = New-AzureRmNetworkSecurityRuleConfig `
176
- - Name $name `
202
+ - Name $p .Name `
177
203
- Protocol " Tcp" `
178
204
- Priority 1000 `
179
205
- Access " Allow" `
@@ -184,10 +210,11 @@ class SecurityGroup: Resource1 {
184
210
- DestinationAddressPrefix " *"
185
211
186
212
return New-AzureRmNetworkSecurityGroup `
187
- - ResourceGroupName $resourceGroupName `
188
- - Location $location `
189
- - Name $name `
190
- - SecurityRules $securityRuleConfig
213
+ - ResourceGroupName $p.ResourceGroupName `
214
+ - Location $p.Location `
215
+ - Name $p.Name `
216
+ - SecurityRules $securityRuleConfig `
217
+ - WarningAction SilentlyContinue
191
218
}
192
219
}
193
220
@@ -211,17 +238,18 @@ class NetworkInterface: AzureObject {
211
238
return Get-AzureRMNetworkInterface - Name $this.Name ;
212
239
}
213
240
214
- [object ] Create([string ] $name , [ string ] $location , [ string ] $resourceGroupName ) {
215
- $xpublicIpAddress = $this.PublicIpAddress.GetOrCreate ($name , $location , $resourceGroupName );
216
- $xvirtualNetwork = $this.VirtualNetwork.GetOrCreate ($name , $location , $resourceGroupName );
217
- $xsecurityGroup = $this.SecurityGroup.GetOrCreate ($name , $location , $resourceGroupName );
241
+ [object ] Create([CreateParams ] $p ) {
242
+ $xpublicIpAddress = $this.PublicIpAddress.GetOrCreate ($p );
243
+ $xvirtualNetwork = $this.VirtualNetwork.GetOrCreate ($p );
244
+ $xsecurityGroup = $this.SecurityGroup.GetOrCreate ($p );
218
245
return New-AzureRmNetworkInterface `
219
- - ResourceGroupName $resourceGroupName `
220
- - Location $location `
221
- - Name $name `
246
+ - ResourceGroupName $p .ResourceGroupName `
247
+ - Location $p .Location `
248
+ - Name $p .Name `
222
249
- PublicIpAddressId $xpublicIpAddress.Id `
223
250
- SubnetId $xvirtualNetwork.Subnets [0 ].Id `
224
- - NetworkSecurityGroupId $xsecurityGroup.Id
251
+ - NetworkSecurityGroupId $xsecurityGroup.Id `
252
+ - WarningAction SilentlyContinue
225
253
}
226
254
}
227
255
@@ -250,9 +278,8 @@ class VirtualMachine: AzureObject {
250
278
return Get-AzureRMVirtualMachine - Name $this.Name ;
251
279
}
252
280
253
- [object ] Create([string ] $name , [string ] $location , [string ] $resourceGroupName ) {
254
- $networkInterfaceInstance = $this.NetworkInterface.GetOrCreate ( `
255
- $name , $location , $resourceGroupName );
281
+ [object ] Create([CreateParams ] $p ) {
282
+ $networkInterfaceInstance = $this.NetworkInterface.GetOrCreate ($p );
256
283
257
284
if (-not $this.Credential ) {
258
285
$this.Credential = Get-Credential
@@ -264,8 +291,8 @@ class VirtualMachine: AzureObject {
264
291
}
265
292
266
293
$vmSize = " Standard_DS2"
267
- $vmConfig = New-AzureRmVMConfig - VMName $Name - VMSize $vmSize
268
- $vmComputerName = $Name + " Computer"
294
+ $vmConfig = New-AzureRmVMConfig - VMName $p . Name - VMSize $vmSize
295
+ $vmComputerName = $p . Name + " Computer"
269
296
switch ($vmImage.Type ) {
270
297
" Windows" {
271
298
$vmConfig = $vmConfig | Set-AzureRmVMOperatingSystem `
@@ -291,9 +318,10 @@ class VirtualMachine: AzureObject {
291
318
| Add-AzureRmVMNetworkInterface - Id $networkInterfaceInstance.Id
292
319
293
320
return New-AzureRmVm `
294
- - ResourceGroupName $resourceGroupName `
295
- - Location $location `
296
- - VM $vmConfig
321
+ - ResourceGroupName $p.ResourceGroupName `
322
+ - Location $p.Location `
323
+ - VM $vmConfig `
324
+ - WarningAction SilentlyContinue
297
325
}
298
326
}
299
327
0 commit comments