【问题标题】:PowerShell Get links from FTP SitePowerShell 从 FTP 站点获取链接
【发布时间】:2017-03-24 14:07:55
【问题描述】:

我正在尝试从 FTP 站点创建所有链接的列表。链接用于下载 zip 文件。

我的最终目标是将每个链接分析为一个字符串,并将开头与一组短语相匹配。每个链接的末尾都有一个日期,我必须找到最新的下载。

在这个例子中,我想从这个列表中找到ABC_20170323.zip

  • ABC_20170323.zip
  • ABC_20160102.zip
  • EFG_20170324.zip

我需要在分析之前弄清楚如何获取链接。我尝试了多种方法,唯一能从网站返回任何信息的方法是收集源代码:

Invoke-WebRequest $sourceuri -UseBasicParsing -Credential $user

但是我发现很难从那里收集所有链接。有没有人可以轻松获取这些文件下载链接的方法?

【问题讨论】:

  • Invoke-WebRequest $sourceuri -UseBasicParsin -Credential $user |选择对象-ExpandProperty 链接 | Where-Object {$_.href -like "*.zip"} |选择对象-ExpandProperty href | ForEach { Start-BitsTransfer $_ C:\test }
  • 如果您不想将它们下载到 C:\test,只需删除最后一个管道。所以从| ForEach 开始省略。
  • 选择对象:找不到属性“链接”。当我可以在浏览器中单击并下载它时,这怎么可能?
  • 是 FTP 站点吗?不是网页吗?
  • 这是一个带有网页的 FTP 站点。我需要特定页面上的网站链接。

标签: powershell hyperlink ftp


【解决方案1】:

好的,我知道这已经很久了,但我想出了如何去做。诚然,这是一条艰难的道路。最终发生的事情是我收集了源代码并像这样保存了它:

$r = Invoke-WebRequest $sourceuri -UseBasicParsing -credential $user

然后我将其转换为字符串并使用-split 通过它们的 html 标记和我期望的开头的样子(在本例中为“ABC”)分隔链接:

$c = $r.ToString() #convert to string
$datelist = @()
$f = ($c -split 'A HREF="' -split '.zip</A>') #split by html tag (and .zip)
foreach($link in $f){
    if($link -match 'ABC') { #if the beginning of the link is 'ABC'
        $datelist += ($link.substring($link.Length-8)) #isolate the date on the end
    }
} #more logic for comparing $datelist items...

然后我写了一些逻辑来比较$datelist中的项目(从答案中省略)并创建了一个包含我需要的所有组件的变量:

$ExactLink = "ABC_$GreatestDate" + ".zip"

然后继续下载我需要的$ExactLink

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-28
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2017-08-08
    相关资源
    最近更新 更多