Powershell 如何检测具有特定名称的活动VPN连接

Powershell 如何检测具有特定名称的活动VPN连接,powershell,powershell-2.0,vpn,windows-server-2008-r2,Powershell,Powershell 2.0,Vpn,Windows Server 2008 R2,我找到了一个列表,其中列出了几种检测活动VPN的方法: 使用Win32_NetworkAdapter: Get-WmiObject -Query "Select * from Win32_NetworkAdapter where Name like '%VPN%' and NetEnabled='True'" 使用Win32_网络适配器配置: Get-WmiObject -Query "Select * from Win32_NetworkAdapterConfiguration whe

我找到了一个列表,其中列出了几种检测活动VPN的方法:

  • 使用Win32_NetworkAdapter:

    Get-WmiObject -Query "Select * from Win32_NetworkAdapter 
    where Name like '%VPN%' and NetEnabled='True'"
    
  • 使用Win32_网络适配器配置:

    Get-WmiObject -Query "Select * from Win32_NetworkAdapterConfiguration 
    where Description like '%VPN%' and IPEnabled='True'"
    
  • 检查是否存在活动的PPP适配器

    ipconfig | Select-String 'PPP adapter'
    
  • 检查IPv4路由表

    Get-WmiObject -Query "Select * from Win32_IP4RouteTable 
    where Name like '10.0.99.%' or Name like '10.15.99.%'"
    
  • 在我的例子中,方法1、2和4根本不起作用。第三种方法效果很好,而且已经足够了。但据我所知,配置多个VPN连接可能会给方法3带来不明确的结果

    因此,我的问题是:

  • 是否有一种方法可以更具体地(可能使用组合方法?)使用方法3来检查连接名称
  • 为什么方法1和2对我不起作用?像这样质疑

    $adapters = (Get-WmiObject -Query "Select * from Win32_NetworkAdapter")
    foreach($a in $adapters) {
        Write-Host $a.Description
    }
    
    给我一个适配器名称列表,在其说明中未提及“VPN”:

    WAN Miniport (SSTP) WAN Miniport (IKEv2) WAN Miniport (L2TP) WAN Miniport (PPTP) and so on... 广域网微型端口(SSTP) 广域网微型端口(IKEv2) 广域网微型端口(L2TP) 广域网微型端口(PPTP) 等等

  • 最简单的方法是使用Powershell Commamdlet

    Get-VPNconnection -Name "VPN Name"
    
    报告的项目之一是“连接状态”。此外,如果VPN是全用户连接,您还必须使用commandlet的交换机“-AllUserConnection”

    如何使用:

    Get-NetAdapter -InterfaceDescription "VPN Name" | where {$_.status -eq "Up"}
    

    只需使用
    获取NetAdapter
    获取网络/VPN名称列表。

    如果您还想获取PPP适配器和其他隐藏适配器信息,则应使用以下选项:

    [System.Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces()
    

    在我的场景中,
    InterfaceDescription
    属性中的
    TAP
    表示VPN连接状态,但您可以在测试中放入任何字符串

    $NIC = Get-NetIPConfiguration | ? {$_.NetAdapter.status -eq "UP"} | Select-Object InterfaceDescription
        if ($NIC -match "TAP") {
    #VPN active → go to work
    } else { 
           Write-Host "~~~~~~~~~~~~~~~~~" -ForegroundColor Cyan 
           Write-Host "VPN DEACTIVATED ?" -ForegroundColor Cyan 
           Write-Host "~~~~~~~~~~~~~~~~~" -ForegroundColor Cyan 
        }
    

    好的,你能在一台有两个活动VPN连接的PC上检查
    ipconfig
    的输出,以辨别它们是否有差异,并基于此进行过滤吗?在最坏的情况下,您将获得
    ppp适配器
    2次,但我相信它们会有所不同,您可以找到一种过滤东西的方法