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

PowerShell中两组字符串匹配无结果的问题求助

问题分析与解决方案

第一个匹配失败问题

原因

你从$result.PackageName获取的字符串带有末尾空格(看你给出的列表,比如LogicalShadowDatabase 、ManagementConsoleClient 都存在 trailing space)。使用-match时,空格会被当作正则表达式的一部分,而你提取的$parentname(如ManagementConsoleClient_4.0.0.120)没有这个空格,导致匹配失败。手动定义变量时用的是无空格的字符串,所以能成功匹配。

解决方法

取出包名时先去除首尾空白字符:

foreach ($res in $result) {
    $pack_name = $res.PackageName.Trim()  # 关键:Trim()去除首尾空格
    if ($parentname -match $pack_name) {
        Write-Host "Match"
    }
}

如果想用-like,同样需要先Trim,再配合通配符:

if ($parentname -like "$($pack_name.Trim())*") {
    Write-Host "Match"
}

第二个DLL匹配失败问题

原因

  1. 路径不匹配:$dll_name是包含${TargetRootFolder}的完整路径,而$dll.name只是文件名(Google.O365.SDK.dll),两者内容完全不同,自然无法匹配。
  2. 正则特殊字符未转义:即使只取文件名部分,-match是正则匹配,文件名里的.在正则中代表“任意单个字符”,不是字面意义的点,会导致匹配逻辑错误。

解决方法

方法1:精确匹配文件名(推荐)

提取$dll_name的文件名部分,用-eq做精确匹配:

$target_filename = [System.IO.Path]::GetFileName($dll_name)
if ($dll.name -eq $target_filename) {
    Write-Host "Match"
}

方法2:正则匹配(需转义特殊字符)

如果一定要用-match,先转义文件名中的正则特殊字符:

$target_filename = [System.IO.Path]::GetFileName($dll_name)
$escaped_filename = [regex]::Escape($target_filename)
if ($dll.name -match $escaped_filename) {
    Write-Host "Match"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:52:40