从网站中select文件名以在PowerShell中下载

问题:我正在制作一个PowerShell脚本,它将下载站点源代码,查找所有文件目标,然后下载所述目标。 我现在正确的进行身份validation,所以在我的testing网站上,我启用了匿名身份validation,启用了目录浏览,并禁用了所有其他默认页面,所以我得到的是我网站上的文件列表。 我到目前为止是这样的:

$source = "http://testsite/testfolder/" $webclient = New-Object system.net.webclient $destination = "c:/users/administrator/desktop/test/" $webclient.downloadstring($source) 

$webclient.downloadstring将基本上返回我的网站的源代码,我可以看到我想包装在其余代码中的文件。 我对你们的问题是什么是孤立我想要的链接的最好和/或最简单的方法是什么,所以我可以做一个foreach命令来下载所有这些?

此外,额外的信贷,我将如何去添加代码下载文件夹和这些文件夹中的文件从我的网站? 我至less可以制作独立的脚本来从每个子文件夹中提取文件,但显然将它们全部放在一个脚本中会更好。

如果您使用的是PowerShell v3,则Invoke-WebRequest cmdlet可能会有所帮助。

要获取代表网站的对象:

 Invoke-WebRequest "http://stackoverflow.com/search?tab=newest&q=powershell" 

要获取该网站中的所有链接:

 Invoke-WebRequest "http://stackoverflow.com/search?tab=newest&q=powershell" | select -ExpandProperty Links 

为了得到一个href元素的列表:

 Invoke-WebRequest "http://stackoverflow.com/search?tab=newest&q=powershell" | select -ExpandProperty Links | select href 

如果您使用的是PowerShell v2或更早的版本,则必须创建InternetExplorer.Application COM对象并使用它来浏览页面:

 $ie = new-object -com "InternetExplorer.Application" # sleep for a second while IE launches Start-Sleep -Seconds 1 $ie.Navigate("http://stackoverflow.com/search?tab=newest&q=powershell") # sleep for a second while IE opens the page Start-Sleep -Seconds 1 $ie.Document.Links | select IHTMLAnchorElement_href # quit IE $ie.Application.Quit() 

感谢这篇博客文章 ,了解了Invoke-WebRequest

更新 :你也可以像下载网站源文件,然后从源文件中提取链接。 像这样的东西:

 $webclient.downloadstring($source) -split "<a\s+" | %{ [void]($_ -match "^href=[`'`"]([^`'`">\s]*)"); $matches[1] } 

-split部分沿着以<a后面跟着一个或多个空格开头的行分割源代码。 输出放在一个数组中,然后通过一个foreach-object块。 这里我匹配提取链接部分并输出它的正则表达式的每一行。

如果你想在输出上做更多的事情,你可以通过另外一个块来进一步处理它。