PowerShell脚本排查多版本DLL:大小写敏感问题及优化问询
关于DLL版本检测脚本的场景覆盖疑问
问题背景
脚本用于识别DLL文件的版本差异,多数场景运行正常,但遇到仅大小写不同、版本相同的DLL时会错误输出(这类情况实际不应被判定为版本差异)。先后尝试两种修改:给Group-Object添加-CaseSensitive参数,以及将Select-Object -Unique替换为Sort-Object -Unique,后者暂时消除了错误输出,但担心遗漏文件名仅大小写不同但版本不同的场景,特此确认该修改是否覆盖所有预期场景。
前置代码
已获取$dlls集合,生成待检测对象集合$MatcheddllFiles的代码如下:
foreach ($dll in $dlls) { $MatcheddllFiles += [PsCustomObject]@{ DllName = $dll.BaseName Version = ($dll.VersionInfo.FileVersion).Replace(',', '.') } }
测试场景:大小写不同但版本一致的DLL
$dlls包含以下两个文件:
dataprivilege.configuration
DataPrivilege.Configuration
原脚本及错误输出
原脚本代码:
$differentDllVersions = $MatcheddllFiles | Select-Object -Unique -Property DllName, Version | Group-Object DllName | Where-Object { $_.Count -gt 1 } | ForEach-Object { $_.Group } $differentDllVersions
错误输出结果:
DllName Version
dataprivilege.configuration 8.6.24.491
DataPrivilege.Configuration 8.6.24.491
修改尝试1:添加-CaseSensitive参数
修改后的脚本:
$differentDllVersions = $MatcheddllFiles | Select-Object -Unique -Property DllName, Version | Group-Object DllName -CaseSensitive | Where-Object { $_.Count -gt 1 } | ForEach-Object { $_.Group } $differentDllVersions
更新修改:替换为Sort-Object -Unique
当前使用的修改脚本:
$differentDllVersions = $MatcheddllFiles | Sort-Object -Unique -Property DllName, Version | Group-Object DllName | Where-Object { $_.Count -gt 1 } | ForEach-Object { $_.Group }
疑问:该修改是否合理?能否正确覆盖文件名仅大小写不同但版本不同的场景?
内容的提问来源于stack exchange,提问作者Bandit
相关产品推荐
相关产品推荐

