我正在尝试使用PowerShell下载目标文件名未知的文件?

我正在尝试使用PowerShell下载目标文件名未知的文件?,powershell,google-drive-realtime-api,webclient-download,Powershell,Google Drive Realtime Api,Webclient Download,我正在使用下面的脚本使用powershell下载文件 $folder = "c:\temp\" $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 "c:\temp\URL_L

我正在使用下面的脚本使用powershell下载文件

 $folder = "c:\temp\"
$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 "c:\temp\URL_List.txt" |
Foreach-Object { 
"Downloading " + $_
try {
    $target = join-path $folder ([io.path]::getfilename($_))
    $web.DownloadFile($_, $target)
} catch {
    $_.Exception.Message
}
}

URL_List.txt文件包含我试图从中下载文件的URL列表。以下是列表中的示例URL:
如果查看URL,URL中没有绝对文件名,因此我不确定如何设置WebClient.DownloadFile()方法的目标参数。

请阅读。也可能值得检查,因为您使用的是Powershell。

因此,据我所知,问题是如何在不先下载文件的情况下提取Google驱动器文件名

这让我想到,应该可以通过GET请求访问属性。Chilkat是一个付费API,所以我想我应该尝试使用直接PowerShell命令拼凑出一个方法

Invoke WebRequest
可以工作,但可以下载整个文件。我们只需要标题

有这方面的核心代码。从这里开始,只需解析内容处置头以提取“文件名”(而不是“文件名*”):


你有没有办法在文件下载后导出它?您可以使用
[System.IO.Path]::GetTempFileName()
生成一个tmp文件,将请求写入其中,直到您能够计算出其名称为止。还有,什么版本的PowerShell?您应该使用
调用WebRequest-OutFile
而不是手动操作.net(作为最佳实践)
$WebPath = "https://drive.google.com/uc?export=download&id=0B84LPHCa2YmdZmFMV0dsYl9FeTg"
$request = [System.Net.WebRequest]::Create( $WebPath ) 
$headers = $request.GetResponse().Headers 
# Content-disposition includes a name-value pair for filename:
$cd = $headers.GetValues("Content-Disposition")
$cd_array = $cd.split(";")
foreach ($item in $cd_array) { 
  if ($item.StartsWith("filename=")) {
      # Get string after equal sign
      $filename = $item.Substring($item.IndexOf("=")+1)
      # Remove quotation marks, if any
      $filename = $filename.Replace('"','')
  }
}