我有一个正则表达式,它在PS5和PS7上的返回方式不同。运行以下代码:
$ipres = Invoke-WebRequest -Method GET -Uri 'https://raw.githubusercontent.com/SecOps-Institute/Tor-IP-Addresses/master/tor-exit-nodes.lst'
$iplist = $ipres.Content.Split([Environment]::NewLine)
$iplist_v4 = $iplist | Where-Object { $_ -match '^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$' }
$iplist_v6 = $iplist | Where-Object { $_ -notmatch '^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$' } 给出了不同的结果:
PSVersion 5.1.22494.1000
PSVersion 7.2.0
是正则表达式造成了所有的不同。
PSversion5按预期返回。PSversion7返回nothing。
IPv6列表包含“所有内容”。
这里的助手是,我将把它作为Azure函数来部署,因此我必须让它在PSversion7上工作。
编辑:
谢谢@DavidBrabant,你对我进行了测试,并提醒我它应该能工作。打印$iplist变量是我的错误,我应该计算一下
$iplist.count那么我就会看到它包含在一个项目中,但是当打印它们时,它看起来是预期的结果(几个项目)。在regex上运行它是没有意义的,只有一个项是为什么来自正则表达式的响应如此奇怪的原因。
$iplist = $ipres.Content.Split("`n")为PS7做了trix,并在PS5上工作。
这就提出了一个问题,环境::纽线是根本原因吗?
发布于 2021-11-09 14:21:37
张贴这个,这样我就可以结束这个问题了。
PS5和PS7之间的区别是环境::NewLine,而不是正则表达式在不同PowerShell版本上的行为。
$iplist = $ipres.Content.Split("`n")解决了它,并在PS5和PS7上工作。
https://stackoverflow.com/questions/69898282
复制相似问题