-
Notifications
You must be signed in to change notification settings - Fork 5
/
Get-VPNProfile.ps1
88 lines (79 loc) · 2.26 KB
/
Get-VPNProfile.ps1
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
function Get-AnyConnectProfile() # {{{
{
[CmdletBinding()]
[OutputType([string[]])]
Param(
)
Write-Verbose "Starting the AnyConnect cli"
$vpncli = New-Object System.Diagnostics.Process
$vpncli.StartInfo = New-Object System.Diagnostics.ProcessStartInfo(Get-AnyConnect)
$vpncli.StartInfo.Arguments = "hosts"
$vpncli.StartInfo.CreateNoWindow = $false
$vpncli.StartInfo.UseShellExecute = $false
$vpncli.StartInfo.RedirectStandardOutput = $true
$vpncli.StartInfo.RedirectStandardError = $true
$vpncli.Start() | Out-Null
$profiles = @()
Write-Verbose "Reading its output"
for ($output = $vpncli.StandardOutput.ReadLine(); $output -ne $null; $output = $vpncli.StandardOutput.ReadLine())
{
Write-Debug $output
if ($output -match ' >> note: (.*)')
{
Write-Warning $matches[1]
$status = 'Note'
}
elseif ($output -match '.*\[hosts\]')
{
Write-Verbose "Found VPN profiles:"
}
elseif ($output -match '.*> (.*)')
{
Write-Verbose " Adding $($matches[1])"
$profiles += $matches[1]
}
}
for ($output = $vpncli.StandardError.ReadLine(); $output -ne $null; $output = $vpncli.StandardError.ReadLine())
{
Write-Warning $output
}
return $profiles
} #}}}
<#
.SYNOPSIS
Displays all profiles/Computers that can be used with a given Provider
.DESCRIPTION
Displays all profiles/Computers that can be used with a given Provider
.NOTES
Only Cisco AnyConnect VPNs are supported as of now.
.PARAMETER Provider
The VPN Provider to use.
One of: AnyConnect
.OUTPUTS
System.String[]
The list of profiles, servers that can be connected to from the local computer.
.LINK
https://github.com/gildas/posh-vpn
.EXAMPLE
$session = Get-VPNProfile -Provider AnyConnect
vpn.acme.com
Description
-----------
Gives the list of servers the user can connect to
#>
function Get-VPNProfile() # {{{
{
[CmdletBinding()]
[OutputType([string[]])]
Param(
[Parameter(Position=1, Mandatory=$true)]
[ValidateSet('AnyConnect')]
[string] $Provider
)
$PSBoundParameters.Remove('Provider') | Out-Null
switch($Provider)
{
'AnyConnect' { Get-AnyConnectProfile @PSBoundParameters }
default { Throw "Unsupported VPN Provider: $Provider" }
}
} # }}}