PowerShell跨文件类型检测文档IP及模拟Windows通配符搜索实现咨询
PowerShell技术实现方案
一、模拟Windows通配符搜索的文件筛选能力
PowerShell原生命令已内置与Windows资源管理器完全对齐的通配符匹配规则,无需额外适配即可实现系统级的通配符搜索效果,核心支持的匹配逻辑包括:
*:匹配任意长度(含0长度)的任意字符序列?:匹配单个任意字符[字符区间]:匹配指定区间内的单个字符,例如[a-m]匹配a到m范围的小写字母
常用实现示例
# 匹配当前目录下所有以“项目方案”开头、后缀为3个字符的文件,等价于Windows搜索栏输入"项目方案.???" Get-ChildItem -Path "C:\目标路径" -Filter "项目方案.???" -File # 递归遍历所有子目录,筛选文件名包含"2024"、后缀为pdf或docx的文件,等价于通配符组合`*2024*.{pdf,docx}` Get-ChildItem -Path "C:\目标路径" -Recurse -File | Where-Object { $_.Name -like "*2024*" -and $_.Extension -in ".pdf",".docx" }
如需完全对齐Windows资源管理器不区分大小写的匹配特性,可手动指定通配符匹配规则:
# 配置忽略大小写的通配符匹配规则,和系统搜索行为保持一致 $matchPattern = [System.Management.Automation.WildcardPattern]::new("*终稿*", [System.Management.Automation.WildcardOptions]::IgnoreCase) Get-ChildItem -Path "C:\目标路径" -Recurse -File | Where-Object { $matchPattern.IsMatch($_.Name) }
二、跨全文件类型的文档IP地址检测实现
仅支持txt格式的检测脚本,本质是直接读取文件的纯文本流,遇到docx、pdf、xlsx等带格式封装的文档时会因为编码、二进制结构问题无法读取内容。要实现全类型检测,核心是先对不同格式的文档提取可检索的纯文本,再通过通用正则匹配IP地址,整个过程无需依赖第三方组件。
可直接运行的全类型检测脚本
# 定义IPv4匹配正则,优化误匹配逻辑,排除版本号、长数字串的错误识别 $ipMatchRegex = '\b(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\b' # 配置需要扫描的文件后缀,可按需扩展支持任意类型 $scanExtensions = @(".txt",".md",".csv",".docx",".xlsx",".pdf",".rtf") # 配置跳过的系统目录,避免无意义的扫描消耗资源 $skipPathKeywords = @("Windows", "Program Files", "Temp") # 遍历目标路径下的所有符合规则的文件 Get-ChildItem -Path "C:\待扫描的目录" -Recurse -File | Where-Object { $_.Extension.ToLower() -in $scanExtensions -and -not ($skipPathKeywords | Where-Object { $_.FullName -like "*$_*" }) } | ForEach-Object { $file = $_ try { # 调用Windows内置文本提取接口,自动兼容多格式文档的内容读取 $fileText = [Windows.Data.Text.TextContent]::ExtractTextAsync($file.FullName).GetAwaiter().GetResult() # 提取内容中匹配到的所有IP,去重后返回 $foundIPs = [regex]::Matches($fileText, $ipMatchRegex) | ForEach-Object { $_.Value } | Sort-Object -Unique if ($foundIPs) { [PSCustomObject]@{ 文件路径 = $file.FullName 匹配到的IP = $foundIPs -join "、" } } } catch { Write-Warning "文件读取失败:$($file.FullName),错误原因:$($_.Exception.Message)" } } | Format-Table -AutoSize
适配说明
- 方案依托Windows系统内置的文本提取能力,可自动解析docx、pdf、xlsx等带格式封装的文档内容,解决原txt脚本格式兼容性差的问题
- 支持灵活扩展扫描范围,只需将对应文件后缀加入
$scanExtensions数组,即可适配任意需要检测的文件类型 - 正则规则经过优化,不会将版本号、长数字串这类相似格式的内容错误识别为IP地址
内容的提问来源于stack exchange,提问作者Alex Pandian
相关产品推荐
相关产品推荐

