亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PowerShell > 正文

PowerShell小技巧之實現文件下載(類wget)

2020-03-26 19:14:54
字體:
來源:轉載
供稿:網友

對Linux熟悉的讀者可能會對Linux通過wget下載文件有印象,這個工具功能很強大,在.NET環境下提到下載文件大多數人熟悉的是通過System.Net.WebClient進行下載,這個程序集能實現下載的功能,但是有缺陷,如果碰上類似于…/scripts/?dl=417這類的下載鏈接將無法正確識別文件名,下載的文件通常會被命名為dl=417這樣古怪的名字,其實對應的文件名是在訪問這個鏈接返回結果的HTTP頭中包含的。事實上微軟也提供了避免這些缺陷的程序集System.Net.HttpWebRequest 和 HttpWebResponse,本文將會使用這兩個程序集來實現PowerShell版wget的功能。

代碼不怎么復雜,基本上就是創建HttpWebRequest對象,設定UserAgent和CookieContainer以免在遇到設置防盜鏈的服務器出現無法下載的情況。然后通過HttpWebRequest對象的GetResponse()方法從http頭中獲取目標文件的大小以及文件名,以便能在下載到文件時提示當前下載進度,在下載完文件后,列出當前目錄下對應的文件。代碼不復雜,有任何疑問的讀者可以留言給我,進行交流,下面上代碼:

 

復制代碼 代碼如下:

 =====文件名:Get-WebFile.ps1=====
function Get-WebFile {
<# Author:fuhj(powershell#live.cn ,http://fuhaijun.com)
   Downloads a file or page from the web
.Example
  Get-WebFile http://mirrors.cnnic.cn/apache/couchdb/binary/win/1.4.0/setup-couchdb-1.4.0_R16B01.exe
  Downloads the latest version of this file to the current directory
#>

 

[CmdletBinding(DefaultParameterSetName="NoCredentials")]
   param(
      #  The URL of the file/page to download
      [Parameter(Mandatory=$true,Position=0)]
      [System.Uri][Alias("Url")]$Uri # = (Read-Host "The URL to download")
   ,
      #  A Path to save the downloaded content.
      [string]$FileName
   ,
      #  Leave the file unblocked instead of blocked
      [Switch]$Unblocked
   ,
      #  Rather than saving the downloaded content to a file, output it. 
      #  This is for text documents like web pages and rss feeds, and allows you to avoid temporarily caching the text in a file.
      [switch]$Passthru
   ,
      #  Supresses the Write-Progress during download
      [switch]$Quiet
   ,
      #  The name of a variable to store the session (cookies) in
      [String]$SessionVariableName
   ,
      #  Text to include at the front of the UserAgent string
      [string]$UserAgent = "PowerShellWget/$(1.0)"
   )

   Write-Verbose "Downloading '$Uri'"
   $EAP,$ErrorActionPreference = $ErrorActionPreference, "Stop"
   $request = [System.Net.HttpWebRequest]::Create($Uri);
   $ErrorActionPreference = $EAP
   $request.UserAgent = $(
         "{0} (PowerShell {1}; .NET CLR {2}; {3}; http://fuhaijun.com)" -f $UserAgent,
         $(if($Host.Version){$Host.Version}else{"1.0"}),
         [Environment]::Version,
         [Environment]::OSVersion.ToString().Replace("Microsoft Windows ", "Win")
      )

   $Cookies = New-Object System.Net.CookieContainer
   if($SessionVariableName) {
      $Cookies = Get-Variable $SessionVariableName -Scope 1
   }
   $request.CookieContainer = $Cookies
   if($SessionVariableName) {
      Set-Variable $SessionVariableName -Scope 1 -Value $Cookies
   }

   try {
      $res = $request.GetResponse();
   } catch [System.Net.WebException] {
      Write-Error $_.Exception -Category ResourceUnavailable
      return
   } catch {
      Write-Error $_.Exception -Category NotImplemented
      return
   }

   if((Test-Path variable:res) -and $res.StatusCode -eq 200) {
      if($fileName -and !(Split-Path $fileName)) {
         $fileName = Join-Path (Convert-Path (Get-Location -PSProvider "FileSystem")) $fileName
      }
      elseif((!$Passthru -and !$fileName) -or ($fileName -and (Test-Path -PathType "Container" $fileName)))
      {
         [string]$fileName = ([regex]'(?i)filename=(.*)$').Match( $res.Headers["Content-Disposition"] ).Groups[1].Value
         $fileName = $fileName.trim("//""'")

         $ofs = ""
         $fileName = [Regex]::Replace($fileName, "[$([Regex]::Escape(""$([System.IO.Path]::GetInvalidPathChars())$([IO.Path]::AltDirectorySeparatorChar)$([IO.Path]::DirectorySeparatorChar)""))]", "_")
         $ofs = " "

         if(!$fileName) {
            $fileName = $res.ResponseUri.Segments[-1]
            $fileName = $fileName.trim("//")
            if(!$fileName) {
               $fileName = Read-Host "Please provide a file name"
            }
            $fileName = $fileName.trim("//")
            if(!([IO.FileInfo]$fileName).Extension) {
               $fileName = $fileName + "." + $res.ContentType.Split(";")[0].Split("/")[1]
            }
         }
         $fileName = Join-Path (Convert-Path (Get-Location -PSProvider "FileSystem")) $fileName
      }
      if($Passthru) {
         $encoding = [System.Text.Encoding]::GetEncoding( $res.CharacterSet )
         [string]$output = ""
      }

      [int]$goal = $res.ContentLength
      $reader = $res.GetResponseStream()
      if($fileName) {
         try {
            $writer = new-object System.IO.FileStream $fileName, "Create"
         } catch {
            Write-Error $_.Exception -Category WriteError
            return
         }
      }
      [byte[]]$buffer = new-object byte[] 4096
      [int]$total = [int]$count = 0
      do
      {
         $count = $reader.Read($buffer, 0, $buffer.Length);
         if($fileName) {
            $writer.Write($buffer, 0, $count);
         }
         if($Passthru){
            $output += $encoding.GetString($buffer,0,$count)
         } elseif(!$quiet) {
            $total += $count
            if($goal -gt 0) {
               Write-Progress "Downloading $Uri" "Saving $total of $goal" -id 0 -percentComplete (($total/$goal)*100)
            } else {
               Write-Progress "Downloading $Uri" "Saving $total bytes..." -id 0
            }
         }
      } while ($count -gt 0)

      $reader.Close()
      if($fileName) {
         $writer.Flush()
         $writer.Close()
      }
      if($Passthru){
         $output
      }
   }
   if(Test-Path variable:res) { $res.Close(); }
   if($fileName) {
      ls $fileName
   }
}

 

調用方法,如下:
Get-WebFile http://mirrors.cnnic.cn/apache/couchdb/binary/win/1.4.0/setup-couchdb-1.4.0_R16B01.exe
這里下載couchdb的最新windows安裝包。
執行效果如下圖所示:

PowerShell,技巧,實現,文件下載,類wget

能夠看到在下載文件的過程中會顯示當前已下載數和總的文件大小,并且有進度條顯示當前下載的進度,跟wget看起來是有些神似了。下載完畢后會顯示已經下載文件的情況。

PowerShell,技巧,實現,文件下載,類wget

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情在线视频二区| 亚洲电影免费在线观看| 精品国产成人在线| 爱福利视频一区| 欧美成人性色生活仑片| 成人免费网站在线看| 韩国精品久久久999| 国产成人精品午夜| 国产欧美va欧美va香蕉在线| 国产91精品久久久久久| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产精品久久久久久久久久尿| 精品丝袜一区二区三区| 91精品在线国产| 国产精品一二三视频| 亚洲欧美日本另类| 成人有码视频在线播放| 久久97精品久久久久久久不卡| 国产一区二区视频在线观看| 欧美日韩综合视频网址| 久久99热这里只有精品国产| 亚洲免费一级电影| 欧美黄色片免费观看| 中文字幕亚洲二区| 国模精品视频一区二区| 久久久999精品| 久久精品99久久香蕉国产色戒| 欧美精品videos性欧美| 久久精品国产亚洲精品2020| 成人国内精品久久久久一区| 国产精品亚洲美女av网站| 久久久久久久久国产| 中文字幕成人精品久久不卡| 日韩成人小视频| 亚洲精品视频网上网址在线观看| 久久在线免费视频| 欧美午夜精品久久久久久浪潮| 欧美激情精品久久久| 色阁综合伊人av| 久久国产精品网站| 国产不卡精品视男人的天堂| 欧美激情精品久久久久久黑人| 亚洲精品成人久久电影| 国产精品激情av在线播放| 国产亚洲xxx| 国产精品美女久久久免费| 98精品国产自产在线观看| 国产精品影片在线观看| 欧美老妇交乱视频| 欧美人与物videos| 亚洲成人激情在线观看| 国产视频精品在线| 亚洲国产三级网| 国产suv精品一区二区三区88区| 51ⅴ精品国产91久久久久久| 91黄色8090| 欧美午夜精品久久久久久浪潮| 98视频在线噜噜噜国产| 日韩精品免费视频| 日韩欧美亚洲综合| 97视频网站入口| 97超级碰碰人国产在线观看| 日韩精品在线观| 亚洲已满18点击进入在线看片| 亚洲第一页在线| 久久免费成人精品视频| 欧美国产日韩中文字幕在线| 日韩电影在线观看永久视频免费网站| 国产一区二区三区在线看| 国产精品爽爽ⅴa在线观看| 亚洲精品短视频| 欧美另类老肥妇| 高清日韩电视剧大全免费播放在线观看| 成人黄色短视频在线观看| 欧美精品在线观看| 久久综合88中文色鬼| 中文日韩在线视频| 国产一区二区动漫| 激情久久av一区av二区av三区| 91老司机在线| 久久精品国产综合| 亚洲精品白浆高清久久久久久| 欧美日本啪啪无遮挡网站| 久久久精品一区二区三区| 国产精品日韩久久久久| 精品久久中文字幕| 国产亚洲精品久久| 欧美精品一区二区免费| 久久亚洲精品毛片| 国产在线不卡精品| 日韩精品免费观看| 欧美乱大交做爰xxxⅹ性3| 中文字幕欧美精品在线| 九九久久精品一区| 亚洲欧美日韩一区二区三区在线| 国产精品久久久久久久久久ktv| 久久久久久久久久久免费精品| 狠狠爱在线视频一区| 日韩三级影视基地| 亚洲a成v人在线观看| 欧美国产精品va在线观看| 日韩精品中文字幕久久臀| 精品福利免费观看| 国内精品中文字幕| 日韩亚洲精品电影| 日本欧美一二三区| 中文字幕亚洲自拍| 午夜精品在线观看| 欧美成人免费大片| 亚洲黄色在线看| 精品久久久久久亚洲精品| 日韩电影视频免费| 久久久精品国产一区二区| 亚洲精品自拍第一页| 亚洲高清av在线| 国产不卡精品视男人的天堂| 欧美日韩国产成人在线| 成人网中文字幕| 亚洲自拍高清视频网站| 狠狠做深爱婷婷久久综合一区| 亚洲欧美日韩国产精品| 热久久视久久精品18亚洲精品| 2021久久精品国产99国产精品| 亚洲欧洲在线免费| 久久久久久久久久久免费| 国内成人精品视频| 亚洲一区二区在线| 国产suv精品一区二区| 国产欧美日韩综合精品| 日韩有码在线视频| 欧美黄色性视频| 91在线精品视频| 国产欧美在线播放| 日韩在线视频观看| 久久国产精品久久精品| 午夜精品久久久久久久白皮肤| 亚洲第一av网| 在线播放国产一区二区三区| 欧美孕妇孕交黑巨大网站| 国产精品尤物福利片在线观看| 国自产精品手机在线观看视频| 国产视频一区在线| 国产精品日韩在线观看| 国产精品69久久久久| 国产激情久久久久| 国产亚洲精品综合一区91| 亚洲最大中文字幕| 精品久久久久久中文字幕一区奶水| 亚洲一区二区免费| 国产成人一区二区三区小说| 亚洲精品一区二区在线| 日韩精品在线影院| 日韩av高清不卡| 色樱桃影院亚洲精品影院| 欧美日韩国产麻豆| 精品视频久久久久久久| 97在线看免费观看视频在线观看| 欧美中文字幕精品| 欧美日韩免费区域视频在线观看| 成人在线国产精品| 国产日韩一区在线| 91在线免费网站| 亚洲精品乱码久久久久久按摩观| 欧美大成色www永久网站婷|