Disconnect-VPN.ps1
function Disconnect-AnyConnect() # {{{ { [CmdletBinding()] Param( [Parameter(Mandatory=$false)] [PSCustomObject] $VPNSession ) Write-Verbose "Starting the VPN cli" $vpncli = New-Object System.Diagnostics.Process $vpncli.StartInfo = New-Object System.Diagnostics.ProcessStartInfo(Get-AnyConnect) $vpncli.StartInfo.Arguments = "disconnect" $vpncli.StartInfo.CreateNoWindow = $false $vpncli.StartInfo.UseShellExecute = $false $vpncli.StartInfo.RedirectStandardOutput = $true $vpncli.StartInfo.RedirectStandardError = $true $vpncli.Start() | Out-Null 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] } elseif ($output -match ' >> state: (.*)') { Write-Verbose $matches[1] } } for ($output = $vpncli.StandardError.ReadLine(); $output -ne $null; $output = $vpncli.StandardError.ReadLine()) { Write-Warning $output } } #}}} <# .SYNOPSIS Disconnect from a VPN Session or Provider. .DESCRIPTION Disconnect this computer from a given VPN Session or Provider. .NOTES Only Cisco AnyConnect VPNs are supported as of now. .PARAMETER Provider The VPN Provider to use. One of: AnyConnect .PARAMETER VPNSession The VPN session object returned by Connect-VPN. .LINK https://github.com/gildas/posh-vpn .EXAMPLE $session = Connect-VPN -Provider AnyConnect -ComputerName vpn.acme.com -Credentials (Get-Credential ACME\gildas) Disconnect-VPN $session Description ----------- Disconnects from a Cisco AnyConnect VPN session .EXAMPLE Disconnect-VPN -Provider AnyConnect Description ----------- Disconnects from any Cisco AnyConnect VPN #> function Disconnect-VPN() # {{{ { [CmdletBinding(DefaultParameterSetName='Session')] Param( [Parameter(Position=1, ParameterSetName='Session', Mandatory=$true)] [PSCustomObject] $VPNSession, [Parameter(Position=1, ParameterSetName='Provider', Mandatory=$true)] [ValidateSet('AnyConnect')] [string] $Provider ) switch($PSCmdlet.ParameterSetName) { 'Session' { switch($VPNSession.Provider) { 'AnyConnect' { Disconnect-AnyConnect @PSBoundParameters } $null { Throw [System.ArgumentException] "VPNSession misses a Provider"; } default { Throw "Unsupported VPN Provider: $VPNSession.Provider" } } } 'Provider' { $PSBoundParameters.Remove('Provider') | Out-Null switch($Provider) { 'AnyConnect' { Disconnect-AnyConnect @PSBoundParameters } default { Throw "Unsupported VPN Provider: $VPNSession.Provider" } } } } } # }}} |