@@ -5,27 +5,35 @@ function New-AzVm {
55 [CmdletBinding (SupportsShouldProcess = $true )]
66 param (
77 [Parameter (Mandatory = $true , Position = 0 )][string ] $Name = " VM" ,
8+ [Parameter (Mandatory = $true )][PSCredential ] $Credential ,
89
910 [Parameter ()][string ] $ResourceGroupName ,
1011 [Parameter ()][string ] $Location ,
1112
1213 [Parameter ()][string ] $VirtualNetworkName ,
14+ [Parameter ()][string ] $AddressPrefix = " 192.168.0.0/16" ,
15+
1316 [Parameter ()][string ] $SubnetName ,
17+ [Parameter ()][string ] $SubnetAddressPrefix = " 192.168.1.0/24" ,
18+
1419 [Parameter ()][string ] $PublicIpAddressName ,
20+ [Parameter ()][string ] $DomainNameLabel = $Name ,
21+ [Parameter ()][string ] $AllocationMethod = " Static" ,
22+
1523 [Parameter ()][string ] $SecurityGroupName ,
24+ [Parameter ()][int []] $OpenPorts = @ (3389 , 5985 ),
1625
17- [Parameter ()][PSCredential ] $Credential ,
18- [Parameter ()][string ] $ImageName = " Win2012R2Datacenter" ,
26+ [Parameter ()][string ] $ImageName = " Win2016Datacenter" ,
1927 [Parameter ()][string ] $Size = " Standard_DS1_v2"
2028 )
2129
2230 PROCESS {
2331 $rgi = [ResourceGroup ]::new($ResourceGroupName );
2432
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 );
2937
3038 # we don't allow to reuse NetworkInterface so $name is $null.
3139 $nii = [NetworkInterface ]::new(
@@ -144,11 +152,8 @@ class AzureObject {
144152 if ($this.Name ) {
145153 return $this.GetInfo ();
146154 } else {
147- Write-Host " {"
148- Write-Host $this
149155 $result = $this.Create ($p );
150156 $this.Name = $p.Name ;
151- Write-Host " }"
152157 return $result ;
153158 }
154159 }
@@ -176,37 +181,37 @@ class Resource1: AzureObject {
176181}
177182
178183class VirtualNetwork : Resource1 {
179- VirtualNetwork([string ] $name ): base($name ) {
184+ [string ] $AddressPrefix ;
185+
186+ VirtualNetwork([string ] $name , [string ] $addressPrefix ): base($name ) {
187+ $this.AddressPrefix = $addressPrefix ;
180188 }
181189
182190 [object ] GetInfo() {
183191 return Get-AzureRmVirtualNetwork - Name $this.Name ;
184192 }
185193
186194 [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- #>
199195 return New-AzureRmVirtualNetwork `
200196 - ResourceGroupName $p.ResourceGroupName `
201197 - Location $p.Location `
202198 - Name $p.Name `
203- - AddressPrefix " 192.168.0.0/16 " `
199+ - AddressPrefix $this .AddressPrefix `
204200 - WarningAction SilentlyContinue;
205201 }
206202}
207203
208204class 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 ;
210215 }
211216
212217 [object ] GetInfo() {
@@ -218,66 +223,70 @@ class PublicIpAddress: Resource1 {
218223 - ResourceGroupName $p.ResourceGroupName `
219224 - Location $p.Location `
220225 - Name $p.Name `
226+ - DomainNameLabel $this.DnsLabel `
221227 - AllocationMethod Static `
222228 - WarningAction SilentlyContinue
223229 }
224230}
225231
226232class SecurityGroup : Resource1 {
227- SecurityGroup([string ] $name ): base($name ) {
233+ [int []] $OpenPorts ;
234+
235+ SecurityGroup([string ] $name , [int []] $OpenPorts ): base($name ) {
236+ $this.OpenPorts = $OpenPorts ;
228237 }
229238
230239 [object ] GetInfo() {
231240 return Get-AzureRMSecurityGroup - Name $this.Name
232241 }
233242
234243 [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+ }
245258 return New-AzureRmNetworkSecurityGroup `
246259 - ResourceGroupName $p.ResourceGroupName `
247260 - Location $p.Location `
248261 - Name $p.Name `
249- - SecurityRules $securityRuleConfig `
262+ - SecurityRules $rules `
250263 - WarningAction SilentlyContinue
251264 }
252265}
253266
254267class Subnet : AzureObject {
255268 [VirtualNetwork ] $VirtualNetwork ;
269+ [string ] $SubnetAddressPrefix ;
256270
257- Subnet([string ] $name , [VirtualNetwork ] $virtualNetwork ):
271+ Subnet([string ] $name , [VirtualNetwork ] $virtualNetwork , [ string ] $subnetAddressPrefix ):
258272 base($name , @ ($virtualNetwork )) {
259273 $this.VirtualNetwork = $virtualNetwork ;
274+ $this.SubnetAddressPrefix = $subnetAddressPrefix ;
260275 }
261276
262277 [object ] GetInfo() {
263- Write-Host " sn.GetInfo {"
264278 $virutalNetworkInfo = $this.VirtualNetwork.GetInfo ();
265- Write-Host " }"
266279 return $virutalNetworkInfo | Get-AzureRmVirtualNetworkSubnetConfig - Name $this.Name ;
267280 }
268281
269282 [object ] Create([CreateParams ] $p ) {
270- Write-Host " sn.Create {"
271283 $virtualNetworkInfo = $this.VirtualNetwork.GetOrCreate ($p );
272- Set -AzureRmVirtualNetworkSubnetConfig `
284+ Add -AzureRmVirtualNetworkSubnetConfig `
273285 - VirtualNetwork $virtualNetworkInfo `
274286 - 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
277289 $result = Get-AzureRmVirtualNetworkSubnetConfig - VirtualNetwork $virtualNetworkInfo - Name $p.Name
278- Write-Host $virtualNetworkInfo
279- Write-Host $result
280- Write-Host " } sn.Create"
281290 return $result ;
282291 }
283292}
@@ -305,9 +314,6 @@ class NetworkInterface: AzureObject {
305314 [object ] Create([CreateParams ] $p ) {
306315 $publicIpAddressInfo = $this.PublicIpAddress.GetOrCreate ($p );
307316 $subnetInfo = $this.Subnet.GetOrCreate ($p );
308- Write-Host " sn: {"
309- Write-Host $subnetInfo
310- Write-Host " } sn"
311317 $securityGroupInfo = $this.SecurityGroup.GetOrCreate ($p );
312318 return New-AzureRmNetworkInterface `
313319 - ResourceGroupName $p.ResourceGroupName `
0 commit comments