-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconnect_to_vm.ps1
More file actions
93 lines (85 loc) · 3.48 KB
/
connect_to_vm.ps1
File metadata and controls
93 lines (85 loc) · 3.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# Updated to match breaking changed in AzureRM -> Az
#Requires -Version 6.0
#Requires -Modules Az
param([string] $user = "[Insert Username here]",
[string] $promptCred = "0",
[string] $adminSession = "1",
[string] $vmName = "[Insert VM name here]",
[string] $resourceGroupName = "[Insert Ressource Group Name here]",
[string] $connectionMethod = "rdp",
[string] $subsctiptionId = "[Insert Subscription NAME or GUID HERE]"
)
"Connecting to Ressource Group..."
$AzureAcount = Get-AzContext
Try {
"Setting Subscription ..."
Set-AzContext -Subscription $subsctiptionId -ErrorAction Stop > $null
"Getting ressource group ..."
$ressourceGroup = Get-AzResourceGroup -Name $resourceGroupName -ErrorAction Stop
}
Catch {
# Account not connected
"Login Needed"
Connect-AzAccount
"Setting Subscription ..."
Set-AzContext -Subscription $subsctiptionId -ErrorAction Stop > $null
"Getting ressource group ..."
$ressourceGroup = Get-AzResourceGroup -Name $resourceGroupName -ErrorAction Stop
}
"Starting VM..."
$vm = Get-AzVM -Name $vmName -ResourceGroupName $ressourceGroup.ResourceGroupName
Start-AzVM -Name $vm.Name -ResourceGroupName $ressourceGroup.ResourceGroupName
"Getting VM Public IP Adress"
$nicName = $vm.Name + "-ip"
$nsgName = $vm.Name + "-nsg"
$port = 3389
If ($connectionMethod -eq 'ssh') {
$port = 22
}
$VmIp = ((Get-AzPublicIpAddress -ResourceGroupName $ressourceGroup.ResourceGroupName) | Where-Object {$_.Name -eq $nicName}).IpAddress
"Changing NSG"
# https://docs.microsoft.com/en-us/azure/service-fabric/scripts/service-fabric-powershell-add-nsg-rule
$rulename = ($connectionMethod + "-Rule")
"Getting Client IP"
$ClientIp = Invoke-RestMethod http://ipinfo.io/json | Select -exp ip
("Client Public IP is :" + $ClientIp)
$nsg = Get-AzNetworkSecurityGroup -Name $nsgName -ResourceGroupName $ressourceGroup.ResourceGroupName
"Removing Existing Rule if exists ..."
Remove-AzNetworkSecurityRuleConfig -Name $rulename -NetworkSecurityGroup $nsg -ErrorAction Continue > $null
"Adding New NSG Rule"
$nsg | Add-AzNetworkSecurityRuleConfig -Name $rulename -Description "Allow RDP" -Access Allow `
-Protocol * -Direction Inbound -Priority 100 -SourceAddressPrefix ($ClientIp + "/32") -SourcePortRange * `
-DestinationAddressPrefix * -DestinationPortRange $port > $null
"Updating NSG"
$nsg | Set-AzNetworkSecurityGroup
"Waiting 20 seconds for NSG to update..."
Start-Sleep -Seconds 20
If ($connectionMethod -eq 'rdp') {
# Create an rdp file
"Creating RDP file"
$tmpfile = "temp.rdp"
"full address:s:" + $VmIp | Out-File $tmpfile -Force
"prompt for credentials:i:" + $promptCred | Out-File $tmpfile -Append
"administrative session:i:" + $adminSession | Out-File $tmpfile -Append
"username:s:" + $user | Out-File $tmpfile -Append
If ($IsWindows) {
Start-Process "$env:windir\system32\mstsc.exe" -ArgumentList $tmpfile
}
Else {
If ($IsMacOS) {
open $tmpfile
}
}
Start-Sleep -Seconds 5
"Cleaning Up ..."
Remove-Item $tmpfile
}
Else {
ssh ($user + "@" + $VmIp)
"Deleting NSG rule"
$nsg = Get-AzNetworkSecurityGroup -Name $nsgName -ResourceGroupName $ressourceGroup.ResourceGroupName
"Removing Existing Rule if exists ..."
Remove-AzNetworkSecurityRuleConfig -Name $rulename -NetworkSecurityGroup $nsg -ErrorAction Continue > $null
"Updating NSG"
$nsg | Set-AzNetworkSecurityGroup > $null
}