我已经搜索过类似的东西,并且我一直在运行FTP下载答案。这是有用的信息,但最终证明难以翻译。我找到了一个powershell脚本,它可以工作,但我想知道它是否可以根据我的需要进行调整。我对powershell脚本没有太多经验,但我正在努力学习。
需要这样。我需要无人值守地下载并安装一系列文件到远程机器。这些文件通过tinyurls通过电子邮件分发。我现在将它们放入.txt文件中,然后让PowerShell脚本读取列表并下载每个文件。
项目的要求以及为什么我转向powershell(而不是其他实用程序),这些是非常专业的机器。唯一可用的工具是嵌入Windows 7的工具。
我遇到的困难是: 文件下载一个。我想在Web服务器允许的同时获取尽可能多的下载量。 (通常是6)
当前脚本根据tinyurl创建文件名。我需要来自网络服务器的实际文件名。
提前感谢任何建议。
以下是我目前正在使用的脚本。
# Copyright (C) 2011 by David Wright (davidwright@digitalwindfire.com)
# All Rights Reserved.
# Redistribution and use in source and binary forms, with or without
# modification or permission, are permitted.
# Additional information available at http://www.digitalwindfire.com.
$folder = "d:\downloads\"
$userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
$web = New-Object System.Net.WebClient
$web.Headers.Add("user-agent", $userAgent)
Get-Content "d:\downloads\files.txt" |
Foreach-Object {
"Downloading " + $_
try {
$target = join-path $folder ([io.path]::getfilename($_))
$web.DownloadFile($_, $target)
} catch {
$_.Exception.Message
}
}
答案 0 :(得分:2)
如果在决定文件名之前执行Web请求,则应该能够获得扩展路径(否则您将需要发出两个Web请求,一个用于获取扩展路径,另一个用于下载文件)。
当我尝试此操作时,我发现BaseResponse
cmdlet返回的Microsoft.PowerShell.Commands.HtmlWebResponseObject
的{{1}}属性具有Invoke-WebRequest
属性,这是我们正在寻找的扩展路径对于。
如果您得到正确的响应,只需使用扩展路径中的名称保存文件,如下所示(此示例代码不会查看HTTP响应代码或类似代码,但希望一切顺利):
ResponseUri
考虑到function Save-TinyUrlFile
{
PARAM (
$TinyUrl,
$DestinationFolder
)
$response = Invoke-WebRequest -Uri $TinyUrl
$filename = [System.IO.Path]::GetFileName($response.BaseResponse.ResponseUri.OriginalString)
$filepath = [System.IO.Path]::Combine($DestinationFolder, $filename)
try
{
$filestream = [System.IO.File]::Create($filepath)
$response.RawContentStream.WriteTo($filestream)
$filestream.Close()
}
finally
{
if ($filestream)
{
$filestream.Dispose();
}
}
}
文件夹存在,可以使用以下内容调用此方法:
$HOME\Documents\Temp
在我的计算机上,将从github存储库获取的名为Save-TinyUrlFile -TinyUrl http://tinyurl.com/ojt3lgz -DestinationFolder $HOME\Documents\Temp
的文件保存到我的计算机上。
如果您想同时下载多个文件,可以让PowerShell为您实现这一目标。要么使用PowerShell工作流并行功能,要么只为每个网址启用robots.txt
。以下是使用PowerShell Job
:
Jobs