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

如何用PowerShell Match解析User-Agent字符串获取浏览器与系统信息

解析User-Agent提取浏览器与操作系统信息(PowerShell)

为什么Chrome的User-Agent里有Safari标识?

这是历史兼容逻辑导致的:早期大量网站仅识别Mozilla内核的浏览器,Chrome这类基于WebKit/Blink内核的浏览器,会在UA字符串中保留AppleWebKit和Safari标识——本质是为了让老网站判定它为兼容的Safari内核浏览器,避免被拒绝服务。这些标识是内核层面的兼容标记,并非Chrome基于Safari开发,只是借UA字符串适配旧的网站检测逻辑。

PowerShell解析方案

方案1:用现成模块(推荐,更可靠)

直接使用专门的UserAgentParser模块,无需自己编写复杂正则,解析逻辑更完善:

  1. 安装模块(普通用户权限可加-Scope CurrentUser):
Install-Module -Name UserAgentParser -Scope CurrentUser -Force
  1. 解析示例:
$uaList = @(
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Linux; Android 13; SM-G991B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Mobile Safari/537.36",
    "Home Assistant/2023.1.1-3124 (Android 13; SM-G991B)"
)

foreach ($ua in $uaList) {
    $result = Parse-UserAgent -UserAgentString $ua
    [PSCustomObject]@{
        UserAgent = $ua
        OS        = "$($result.OS.Name) $($result.OS.Version) $(if($result.Device.Model){"($($result.Device.Model))"})"
        Browser   = "$($result.Browser.Name) $($result.Browser.Version)"
    }
}

执行后会输出结构化的OS和浏览器信息,比如第一个UA会返回Windows 10.0 (Win64; x64)和Chrome 110.0.0.0。

方案2:自定义正则表达式

如果不想依赖模块,可以针对目标UA编写精准正则,避免匹配无关的兼容标识:

提取操作系统信息

先匹配括号内的系统描述,再细分不同系统类型:

$osRegex = '\((?<OSInfo>[^)]+)\)'
$chromeUa = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
if ($chromeUa -match $osRegex) {
    $osRaw = $matches['OSInfo']
    # 解析Windows信息
    if ($osRaw -match 'Windows NT (?<Version>[\d.]+); (?<Arch>.+)') {
        Write-Host "OS: Windows $($matches.Version), 架构: $($matches.Arch)"
    }
    # 解析Android信息
    elseif ($osRaw -match 'Linux; Android (?<Version>[\d.]+); (?<Model>.+)') {
        Write-Host "OS: Android $($matches.Version), 设备: $($matches.Model)"
    }
}

提取浏览器信息

优先匹配真实客户端标识(如Chrome、Home Assistant),跳过Mozilla、AppleWebKit这类兼容标记:

$browserRegex = '(Chrome|Home Assistant)\/(?<Version>[\d.-]+)'
foreach ($ua in $uaList) {
    if ($ua -match $browserRegex) {
        Write-Host "浏览器: $($matches[1]) $($matches.Version)"
    }
}

关于你之前的正则问题

你使用的正则会匹配到第一个符合条件的片段(即Mozilla/5.0),因为PowerShell的-match默认仅返回第一个匹配结果。即便用Select-String -AllMatches获取所有匹配,这类通用正则也会捕获大量无关内容,不如针对OS和浏览器分别编写定向正则高效。

内容的提问来源于stack exchange,提问作者PlasmatikSteak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:45:45