如何用PowerShell正则匹配部分名称获取并设置VPN连接名?
用正则匹配含指定关键词的VPN名称并修改断开脚本
核心思路
先获取系统中所有VPN连接,通过正则表达式筛选出名称包含vash(不区分大小写)的条目,再将匹配到的VPN名称赋值给$vpnName,最后执行原有的断开逻辑。
修改后的完整脚本
# 获取所有名称包含"vash"的VPN连接(不区分大小写) $matchingVpns = Get-VpnConnection | Where-Object { $_.Name -match '(?i)vash' } # 处理无匹配的情况 if ($matchingVpns.Count -eq 0) { Write-Host "未找到包含'vash'关键词的VPN" exit } # 处理多匹配场景:让用户选择要断开的VPN if ($matchingVpns.Count -gt 1) { Write-Host "找到多个匹配的VPN,请选择序号:" for ($i = 0; $i -lt $matchingVpns.Count; $i++) { Write-Host "$($i+1). $($matchingVpns[$i].Name)" } $selection = Read-Host "输入序号" $selectedIndex = [int]$selection - 1 if ($selectedIndex -notin 0..($matchingVpns.Count-1)) { Write-Host "无效选择,脚本退出" exit } $vpnName = $matchingVpns[$selectedIndex].Name } else { # 仅一个匹配项,直接赋值 $vpnName = $matchingVpns[0].Name } # 执行断开逻辑 $vpn = Get-VpnConnection -Name $vpnName if ($vpn.ConnectionStatus -eq "Connected") { rasdial $vpnName /DISCONNECT Write-Host "已成功断开VPN:$vpnName" } else { Write-Host "VPN $vpnName 当前未处于连接状态" }
关键部分说明
- 正则表达式
(?i)vash:(?i)开启不区分大小写模式,确保能匹配到VPNvashinsider、VPN vashinsider、vpnvashinsider.com这类大小写混合的名称。 - 多匹配处理:如果系统中存在多个含
vash的VPN,脚本会列出所有匹配项让用户选择,避免误操作。 - 异常判断:加入了无匹配、无效选择的提示,提升脚本的健壮性。
内容的提问来源于stack exchange,提问作者AlexPebody
相关产品推荐
相关产品推荐

