2016-09-21 54 views
0

我写了一个PowerShell脚本将提取是如下Powershell的调用,WebRequest的提取特定从过滤的文本

$ExtractData = Invoke-WebRequest "https://www.somesite.com/downloads" 
$ExtractData = $ExtractData.tostring() -split "[`r`n]" | select-string "http://somesite.com/download" 

即给予如下结果

onclick="_gaq.push(['_trackEvent', 'Downloads', 'http://somesite.com/download/some.exe']);"> 
的URL所需的文本

我想用逗号写它分裂分隔的一个,但有没有更好的办法做的就是只有这件事

http://somesite.com/download/some.exe

我尝试用正则表达式

$regex = ‘(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\[email protected]?^=%&/~+#-])?’ 
$ExtractData= $ExtractData | select-string -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } 
$ExtractData 

这是给这条道路,但不与exe

http://somesite.com/download

回答

1

使用Regex.Matches要提取的Match记录阵列中的所有链接,然后收集Groups[1].Value

$webpage = Invoke-WebRequest "https://www.somesite.com/downloads" 
$links = ([regex]'((?:ftp|https?)://\S+?)[''"]').Matches($webpage) | 
     ForEach { [Web.HTTPUtility]::HtmlDecode($_.Groups[1].Value) } 

请注意,由于我们正在处理原始HTML,因此可能会使用&而不是&进行HTML编码,因此使用了HtmlDecode

+0

感谢'wOxxOm' – Learner

+0

@学习者,我已经添加了HtmlDecode。 – wOxxOm

相关问题