@@ -5,27 +5,35 @@ function New-AzVm {
5
5
[CmdletBinding (SupportsShouldProcess = $true )]
6
6
param (
7
7
[Parameter (Mandatory = $true , Position = 0 )][string ] $Name = " VM" ,
8
+ [Parameter (Mandatory = $true )][PSCredential ] $Credential ,
8
9
9
10
[Parameter ()][string ] $ResourceGroupName ,
10
11
[Parameter ()][string ] $Location ,
11
12
12
13
[Parameter ()][string ] $VirtualNetworkName ,
14
+ [Parameter ()][string ] $AddressPrefix = " 192.168.0.0/16" ,
15
+
13
16
[Parameter ()][string ] $SubnetName ,
17
+ [Parameter ()][string ] $SubnetAddressPrefix = " 192.168.1.0/24" ,
18
+
14
19
[Parameter ()][string ] $PublicIpAddressName ,
20
+ [Parameter ()][string ] $DomainNameLabel = $Name ,
21
+ [Parameter ()][string ] $AllocationMethod = " Static" ,
22
+
15
23
[Parameter ()][string ] $SecurityGroupName ,
24
+ [Parameter ()][int []] $OpenPorts = @ (3389 , 5985 ),
16
25
17
- [Parameter ()][PSCredential ] $Credential ,
18
- [Parameter ()][string ] $ImageName = " Win2012R2Datacenter" ,
26
+ [Parameter ()][string ] $ImageName = " Win2016Datacenter" ,
19
27
[Parameter ()][string ] $Size = " Standard_DS1_v2"
20
28
)
21
29
22
30
PROCESS {
23
31
$rgi = [ResourceGroup ]::new($ResourceGroupName );
24
32
25
- $vni = [VirtualNetwork ]::new($VirtualNetworkName );
26
- $subnet = [Subnet ]::new($SubnetName , $vni );
27
- $piai = [PublicIpAddress ]::new($PublicIpAddressName );
28
- $sgi = [SecurityGroup ]::new($SecurityGroupName );
33
+ $vni = [VirtualNetwork ]::new($VirtualNetworkName , $AddressPrefix );
34
+ $subnet = [Subnet ]::new($SubnetName , $vni , $SubnetAddressPrefix );
35
+ $piai = [PublicIpAddress ]::new($PublicIpAddressName , $DomainNameLabel , $AllocationMethod );
36
+ $sgi = [SecurityGroup ]::new($SecurityGroupName , $OpenPorts );
29
37
30
38
# we don't allow to reuse NetworkInterface so $name is $null.
31
39
$nii = [NetworkInterface ]::new(
@@ -144,11 +152,8 @@ class AzureObject {
144
152
if ($this.Name ) {
145
153
return $this.GetInfo ();
146
154
} else {
147
- Write-Host " {"
148
- Write-Host $this
149
155
$result = $this.Create ($p );
150
156
$this.Name = $p.Name ;
151
- Write-Host " }"
152
157
return $result ;
153
158
}
154
159
}
@@ -176,37 +181,37 @@ class Resource1: AzureObject {
176
181
}
177
182
178
183
class VirtualNetwork : Resource1 {
179
- VirtualNetwork([string ] $name ): base($name ) {
184
+ [string ] $AddressPrefix ;
185
+
186
+ VirtualNetwork([string ] $name , [string ] $addressPrefix ): base($name ) {
187
+ $this.AddressPrefix = $addressPrefix ;
180
188
}
181
189
182
190
[object ] GetInfo() {
183
191
return Get-AzureRmVirtualNetwork - Name $this.Name ;
184
192
}
185
193
186
194
[object ] Create([CreateParams ] $p ) {
187
- <#
188
- $subnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
189
- -Name "Subnet" `
190
- -AddressPrefix "192.168.1.0/24"
191
- return New-AzureRmVirtualNetwork `
192
- -ResourceGroupName $p.ResourceGroupName `
193
- -Location $p.Location `
194
- -Name $p.Name `
195
- -AddressPrefix "192.168.0.0/16" `
196
- -Subnet $subnetConfig `
197
- -WarningAction SilentlyContinue
198
- #>
199
195
return New-AzureRmVirtualNetwork `
200
196
- ResourceGroupName $p.ResourceGroupName `
201
197
- Location $p.Location `
202
198
- Name $p.Name `
203
- - AddressPrefix " 192.168.0.0/16 " `
199
+ - AddressPrefix $this .AddressPrefix `
204
200
- WarningAction SilentlyContinue;
205
201
}
206
202
}
207
203
208
204
class PublicIpAddress : Resource1 {
209
- PublicIpAddress([string ] $name ): base($name ) {
205
+ [string ] $DomainNameLabel ;
206
+ [string ] $AllocationMethod ;
207
+
208
+ PublicIpAddress(
209
+ [string ] $name ,
210
+ [string ] $domainNameLabel ,
211
+ [string ] $allocationMethod
212
+ ): base($name ) {
213
+ $this.DomainNameLabel = $domainNameLabel ;
214
+ $this.AllocationMethod = $allocationMethod ;
210
215
}
211
216
212
217
[object ] GetInfo() {
@@ -218,66 +223,70 @@ class PublicIpAddress: Resource1 {
218
223
- ResourceGroupName $p.ResourceGroupName `
219
224
- Location $p.Location `
220
225
- Name $p.Name `
226
+ - DomainNameLabel $this.DnsLabel `
221
227
- AllocationMethod Static `
222
228
- WarningAction SilentlyContinue
223
229
}
224
230
}
225
231
226
232
class SecurityGroup : Resource1 {
227
- SecurityGroup([string ] $name ): base($name ) {
233
+ [int []] $OpenPorts ;
234
+
235
+ SecurityGroup([string ] $name , [int []] $OpenPorts ): base($name ) {
236
+ $this.OpenPorts = $OpenPorts ;
228
237
}
229
238
230
239
[object ] GetInfo() {
231
240
return Get-AzureRMSecurityGroup - Name $this.Name
232
241
}
233
242
234
243
[object ] Create([CreateParams ] $p ) {
235
- $securityRuleConfig = New-AzureRmNetworkSecurityRuleConfig `
236
- - Name $p.Name `
237
- - Protocol " Tcp" `
238
- - Priority 1000 `
239
- - Access " Allow" `
240
- - Direction " Inbound" `
241
- - SourcePortRange " *" `
242
- - SourceAddressPrefix " *" `
243
- - DestinationPortRange 3389 `
244
- - DestinationAddressPrefix " *"
244
+ $rules = New-Object " System.Collections.Generic.List[Microsoft.Azure.Commands.Network.Models.PSSecurityRule]" ;
245
+ foreach ($port in $this.OpenPorts ) {
246
+ $name = $p.Name + $port ;
247
+ $securityRuleConfig = New-AzureRmNetworkSecurityRuleConfig `
248
+ - Name $name `
249
+ - Protocol " Tcp" `
250
+ - Priority 1000 `
251
+ - Access " Allow" `
252
+ - Direction " Inbound" `
253
+ - SourcePortRange " *" `
254
+ - SourceAddressPrefix " *" `
255
+ - DestinationPortRange $port `
256
+ - DestinationAddressPrefix " *" ;
257
+ }
245
258
return New-AzureRmNetworkSecurityGroup `
246
259
- ResourceGroupName $p.ResourceGroupName `
247
260
- Location $p.Location `
248
261
- Name $p.Name `
249
- - SecurityRules $securityRuleConfig `
262
+ - SecurityRules $rules `
250
263
- WarningAction SilentlyContinue
251
264
}
252
265
}
253
266
254
267
class Subnet : AzureObject {
255
268
[VirtualNetwork ] $VirtualNetwork ;
269
+ [string ] $SubnetAddressPrefix ;
256
270
257
- Subnet([string ] $name , [VirtualNetwork ] $virtualNetwork ):
271
+ Subnet([string ] $name , [VirtualNetwork ] $virtualNetwork , [ string ] $subnetAddressPrefix ):
258
272
base($name , @ ($virtualNetwork )) {
259
273
$this.VirtualNetwork = $virtualNetwork ;
274
+ $this.SubnetAddressPrefix = $subnetAddressPrefix ;
260
275
}
261
276
262
277
[object ] GetInfo() {
263
- Write-Host " sn.GetInfo {"
264
278
$virutalNetworkInfo = $this.VirtualNetwork.GetInfo ();
265
- Write-Host " }"
266
279
return $virutalNetworkInfo | Get-AzureRmVirtualNetworkSubnetConfig - Name $this.Name ;
267
280
}
268
281
269
282
[object ] Create([CreateParams ] $p ) {
270
- Write-Host " sn.Create {"
271
283
$virtualNetworkInfo = $this.VirtualNetwork.GetOrCreate ($p );
272
- Set -AzureRmVirtualNetworkSubnetConfig `
284
+ Add -AzureRmVirtualNetworkSubnetConfig `
273
285
- VirtualNetwork $virtualNetworkInfo `
274
286
- Name $p.Name `
275
- - AddressPrefix " 192.168.1.0/24 " ;
276
- Set-AzureRmVirtualNetwork - VirtualNetwork $virtualNetworkInfo
287
+ - AddressPrefix $this .SubnetAddressPrefix ;
288
+ $virtualNetworkInfo = Set-AzureRmVirtualNetwork - VirtualNetwork $virtualNetworkInfo
277
289
$result = Get-AzureRmVirtualNetworkSubnetConfig - VirtualNetwork $virtualNetworkInfo - Name $p.Name
278
- Write-Host $virtualNetworkInfo
279
- Write-Host $result
280
- Write-Host " } sn.Create"
281
290
return $result ;
282
291
}
283
292
}
@@ -305,9 +314,6 @@ class NetworkInterface: AzureObject {
305
314
[object ] Create([CreateParams ] $p ) {
306
315
$publicIpAddressInfo = $this.PublicIpAddress.GetOrCreate ($p );
307
316
$subnetInfo = $this.Subnet.GetOrCreate ($p );
308
- Write-Host " sn: {"
309
- Write-Host $subnetInfo
310
- Write-Host " } sn"
311
317
$securityGroupInfo = $this.SecurityGroup.GetOrCreate ($p );
312
318
return New-AzureRmNetworkInterface `
313
319
- ResourceGroupName $p.ResourceGroupName `
0 commit comments