我找到了article,列出了几种检测活动VPN的方法:
使用Win32_NetworkAdapter:
Get-WmiObject -Query "Select * from Win32_NetworkAdapter
where Name like '%VPN%' and NetEnabled='True'"
使用Win32_NetworkAdapterConfiguration:
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带来模糊的结果。
所以我的问题是:
为什么没有方法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...
答案 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
}