如何检测具有特定名称

时间:2017-07-20 06:32:37

标签: powershell powershell-v2.0 vpn windows-server-2008-r2

我找到了article,列出了几种检测活动VPN的方法:

  1. 使用Win32_NetworkAdapter:

    Get-WmiObject -Query "Select * from Win32_NetworkAdapter 
    where Name like '%VPN%' and NetEnabled='True'"
    
  2. 使用Win32_NetworkAdapterConfiguration:

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

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

    Get-WmiObject -Query "Select * from Win32_IP4RouteTable 
    where Name like '10.0.99.%' or Name like '10.15.99.%'"
    
  5. 在我的案例中接近1,2& 4根本没有用。第三种方法运作良好,这已经足够了。但据我所知,配置多个VPN连接可能会给方法3带来模糊的结果。

    所以我的问题是:

    1. 有没有办法更方便(使用组合方法?)方法3,以便能够检查连接名称?
    2. 为什么没有方法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...
      

3 个答案:

答案 0 :(得分:0)

最简单的方法是使用Powershell Commamdlet

Get-VPNconnection -Name "VPN Name"

报告的其中一项是“ConnectionStatus”。此外,如果VPN是所有用户连接,您还必须使用带有命令行开关的交换机“-AllUserConnection”

答案 1 :(得分:0)

如何使用它:

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

只需使用Get-NetAdapter即可获取网络/ VPN名称的列表。

答案 2 :(得分:0)

在我的场景中,TAP 属性中的 InterfaceDescription 表示 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 
    }