2016-09-21 53 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

相關問題