11function New-AzVm {
22 [CmdletBinding ()]
33 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"
713 )
814
915 PROCESS {
10- if (-not $credential ) {
11- $credential = Get-Credential
16+ if (-not $Credential ) {
17+ $Credential = Get-Credential
1218 }
1319
1420 # 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+ }
1725
1826 Write-Host $vmImage
1927
2028 # Location
2129 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
2431 Write-Host " done"
2532
2633 # Resource Group
27- $resourceGroupName = " resourceGroupTest"
28- $resource = New-AzureRmResourceGroup - Name $resourceGroupName - Location $location
34+ $resource = New-AzureRmResourceGroup - Name $ResourceGroupName - Location $Location
2935
3036 # Virtual Network
31- $virtualNetworkName = " virtualNetworkTest"
3237 $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
3542 $virtualNetwork = New-AzureRmVirtualNetwork `
36- - ResourceGroupName $resourceGroupName `
37- - Location $location `
38- - Name $virtualNetworkName `
43+ - ResourceGroupName $ResourceGroupName `
44+ - Location $Location `
45+ - Name $VirtualNetworkName `
3946 - AddressPrefix $virtualNetworkAddressPrefix `
4047 - Subnet $subnetConfig
4148
4249 # Piblic IP
43- $publicIpAddressName = " publicIpAddressTest"
4450 $publicIpAddress = New-AzureRmPublicIpAddress `
45- - ResourceGroupName $resourceGroupName `
46- - Location $location `
51+ - ResourceGroupName $ResourceGroupName `
52+ - Location $Location `
4753 - AllocationMethod Static `
48- - Name $publicIpAddressName
54+ - Name $PublicIpAddressName
4955
5056 # Security Group (it may have several rules(ports))
51- $securityGroupName = " securityGroupTest"
5257 $securityRule = @ {
53- Name = " securityRuleTest " ;
58+ Name = $Name + " SecurityRule " ;
5459 Protocol = " Tcp" ;
5560 Priority = 1000 ;
5661 Access = " Allow" ;
@@ -71,38 +76,36 @@ function New-AzVm {
7176 - DestinationPortRange $securityRule.DestinationPortRange `
7277 - DestinationAddressPrefix $securityRule.DestinationAddressPrefix
7378 $securityGroup = New-AzureRmNetworkSecurityGroup `
74- - ResourceGroupName $resourceGroupName `
75- - Location $location `
76- - Name $securityGroupName `
79+ - ResourceGroupName $ResourceGroupName `
80+ - Location $Location `
81+ - Name $SecurityGroupName `
7782 - SecurityRules $securityRuleConfig
7883
7984 # Network Interface
80- $networkInterfaceName = " networkInterfaceTest"
8185 $networkInterface = New-AzureRmNetworkInterface `
82- - ResourceGroupName $resourceGroupName `
83- - Location $location `
84- - Name $networkInterfaceName `
86+ - ResourceGroupName $ResourceGroupName `
87+ - Location $Location `
88+ - Name $NetworkInterfaceName `
8589 - PublicIpAddressId $publicIpAddress.Id `
8690 - SubnetId $virtualNetwork.Subnets [0 ].Id `
8791 - NetworkSecurityGroupId $securityGroup.Id
8892
8993 # VM
90- # $vmCredentials = Get-Credential
91- $vm = @ { Name = $name ; Size = " Standard_DS2" }
94+ $vm = @ { Name = $Name ; Size = " Standard_DS2" }
9295 $vmConfig = New-AzureRmVMConfig - VMName $vm.Name - VMSize $vm.Size
9396 $vmComputer = $vm.Name
9497 switch ($vmImage.Type ) {
9598 " Windows" {
9699 $vmConfig = $vmConfig | Set-AzureRmVMOperatingSystem `
97100 - Windows `
98101 - ComputerName $vmComputer `
99- - Credential $credential
102+ - Credential $Credential
100103 }
101104 " Linux" {
102105 $vmConfig = $vmConfig | Set-AzureRmVMOperatingSystem `
103106 - Linux `
104107 - ComputerName $vmComputer `
105- - Credential $credential
108+ - Credential $Credential
106109 }
107110 }
108111
@@ -118,7 +121,10 @@ function New-AzVm {
118121
119122 New-PsObject @ {
120123 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
122128 }
123129 }
124130}
0 commit comments