You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 21:12:19