为何Select-String可匹配Get-Content内容却无法直接匹配Invoke-WebRequest返回内容
根因说明
Invoke-WebRequest返回的Content属性是单个连续长字符串,就算内部包含换行符,Select-String也会默认把整个字符串当成单条文本处理。你的正则规则^[0-9-]匹配的是行首位置,直接匹配只会校验整个长字符串的开头,自然无法命中中间以数字/负号开头的行。Get-Content读取本地文件时默认按换行符拆分内容,返回的是每行对应一个元素的字符串数组,Select-String会逐行执行匹配,所以规则可以正常生效。- 你之前尝试的转
String[]/Object[]操作本质是强制类型转换,只会把整个长字符串作为数组的唯一元素,没有做按行拆分,所以没有效果。
修复方案
不需要写入本地文件中转,直接对响应内容手动按换行拆分后再匹配即可,兼容LF/CRLF两种换行格式的代码示例:
$resp = Invoke-WebRequest -Uri "你的API请求地址" # 先移除可能存在的UTF-8 BOM头,再按换行拆分 $lineList = $resp.Content.TrimStart([char]0xFEFF) -split "`r?`n" $targetLines = $lineList | Select-String -Pattern '^[0-9-]'
如果还有异常,可以输出$lineList.GetType()确认拆分结果是元素数量大于1的字符串数组即可。
内容的提问来源于stack exchange,提问作者ikaerom
相关产品推荐
相关产品推荐

