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

首頁 > 開發(fā) > PowerShell > 正文

PowerShell小技巧之實(shí)現(xiàn)文件下載(類wget)

2020-10-29 21:01:44
字體:
供稿:網(wǎng)友

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

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

復(fù)制代碼 代碼如下:

 =====文件名: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 &#39;$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]'&#40;?i)filename=(.*)$').Match( $res.Headers["Content-Disposition"] ).Groups[1].Value
         $fileName = $fileName.trim("&#92;/""'")

         $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("http://")
            if(!$fileName) {
               $fileName = Read-Host "Please provide a file name"
            }
            $fileName = $fileName.trim("http://")
            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
   }
}

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

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产资源在线播放| 热久久这里只有| 777永久免费网站国产| 小嫩嫩精品导航| 不卡的日韩av| 欧美在线一级va免费观看| 国产欧美成人xxx视频| 5566日本婷婷色中文字幕97| 欧美另类在线播放| 欧美精品一区二区高清在线观看| 香蕉视频一区二区三区| 日韩一级高清毛片| 99国产精品一区| 国产精品日韩欧美一区| 隣の若妻さん波多野结衣| 亚洲精品网站在线| 一起草av在线| 美女的胸无遮挡在线观看| 欧美人与牲禽动交com| 免费一级淫片aaa片毛片a级| 91亚洲免费视频| 精品国产乱码久久久久久郑州公司| 国产乱精品一区二区三区| 色悠悠久久综合网| 91在线免费网站| 欧洲激情一区二区| 日韩精品免费在线视频观看| 欧美日韩美女在线| 女人扒开腿免费视频app| 欧美三级网色| 黄色a级在线观看| 久久香蕉国产线看观看av| 我要看黄色一级片| 一区精品久久| 午夜亚洲性色福利视频| 国产视频91在线| 凹凸成人在线| 啦啦啦免费高清视频在线观看| 麻豆影视在线| 亚洲成人av资源| 日韩亚洲欧美综合| 91在线超碰| 91精品国产综合久久香蕉的特点| 亚洲永久网站| 亚洲v精品v日韩v欧美v专区| 国产精品私房写真福利视频| 很黄很污的视频网站| 欧美视频自拍偷拍| 国产女王在线**视频| 久久久久久久久久久人体| 高清孕妇孕交╳╳交| 国产精品久久久亚洲第一牛牛| 91精品久久久久久蜜桃| 久久国产尿小便嘘嘘| 久久综合综合久久综合| 亚洲乱码国产乱码精品天美传媒| 亚洲精品视频专区| 国产精品麻豆成人av电影艾秋| av成人影院在线| 国产精品久久夜| 欧美成人高清电影在线| 国产又大又粗又长| 青草影院在线观看| 亚洲黄色成人久久久| 十大免费污污软件| 红杏一区二区三区| 亚洲精品国产精品国| 国产精品18毛片一区二区| 国产对白在线正在播放| 欧美一区三区三区高中清蜜桃| 992tv成人国产福利在线| 在线视频播放大全| 久久久精品视频网站| 精品视频站长推荐| 欧美日韩导航| 欧美日韩一区二区三区四区| 中文字幕 欧美 日韩| 91精品欧美一区二区三区综合在| 欧美另类tv| 国产一区二区丝袜| 国产高清精品一区二区三区| 91小仙女jk白丝袜呻吟| 日韩a∨精品日韩在线观看| 国产精品自拍电影| 亚洲色精品三区二区一区| 国内精品久久久久影院优| 99久久免费国产| 理论片日本一区| 中文字幕无线码| 婷婷伊人综合| 日韩美女视频一区二区在线观看| 一区二区三区在线观看www| 四虎海外影库www4hu| 激情婷婷欧美| 国产主播精品| 日本精品www| 特种兵之深入敌后| 国产精品视频在线观看| 欧美日韩精品欧美日韩精品| 日色在线视频| 黄色小视频在线看| 性欧美一区二区| 欧美二区三区的天堂| 国产无码精品一区二区| 久久亚裔精品欧美| 日韩国产一区三区| 国产精品国产精品国产专区不蜜| 亚洲美女区一区| 综合免费一区二区三区| 精品无码人妻少妇久久久久久| 狠狠综合久久av一区二区老牛| 久久精品女人毛片国产| 国产精品成人一区二区三区夜夜夜| 亚洲精品一区二区三区在线播放| 久久久久久久久久久免费| 久久一区二区三区四区| 男女性色大片免费观看一区二区| 亚洲精品久久久久久久久久久| 色中色一区二区| 国产成人精品免费视频大全最热| 在线播放豆国产99亚洲| 日韩欧美激情一区| 亚洲3p在线观看| av在线不卡观看| 男女激情片在线观看| 欧美日韩在线视频一区二区三区| 韩国97影院| 日韩精品一区在线视频| 羞羞网站在线看| 国产黄a三级三级看三级| 欧美午夜免费| 人妻妺妺窝人体色www聚色窝| 一区二区三区美女视频| 国产综合视频在线观看| 欧美视频免费看欧美视频| 色婷婷av一区二区三区之e本道| 国产精品99久久99久久久二8| 国产一区二区三区四区三区四| 亚洲精品乱码久久久久久蜜桃91| 毛片无码国产| 成人自拍视频网站| 日韩精品中文字幕一区二区三区| 久久精品国产一区二区电影| 成人性生交大片免费看视频r| 国产成人高潮免费观看精品| 亚洲精品一区二区网址| 97超碰在线免费观看| 国产一二三四五| 久久电影一区| jizzjizzjizz亚洲日本| 免费看毛片的网址| 最新国产成人在线观看| 四虎永久在线精品免费网址| 精品无人区麻豆乱码久久久| 不卡大黄网站免费看| 国产精品麻豆免费版| 51午夜精品视频| 久久夜夜操妹子| 欧美日韩在线视频播放| 欧美变态xxxx| 成人黄色片在线| 麻豆一区二区三区在线观看| 91av国产精品| 五月天丁香久久| 欧美在线va视频| 3d成人h动漫网站入口| 美女网站色精品尤物极品姐弟| 欧美日韩亚洲色图| 欧洲成人一区二区| 中文字幕在线亚洲| 久久久精品999| 久久久噜噜噜www成人网| 欧美一区二区三区免费视频| 国产日产欧美a一级在线| 中国美女乱淫免费看视频| 少妇无码一区二区三区| 香蕉视频在线免费看| 日本三级中国三级99人妇网站| 日本一区二区在线视频| 中文字幕日韩三级片| 久久亚洲一区二区| 欧美精品色图| 国产精品国内免费一区二区三区| 9l视频自拍九色9l视频成人| 男女无套免费视频网站动漫| 精品视频高潮| 亚洲精品一区二区三区四区高清| 亚洲欧洲av一区二区三区久久| 亚洲国产精品美女| 激情欧美一区二区三区黑长吊| 奇米亚洲欧美| 91精品久久久久久久久久另类| 日韩福利在线播放| 亚洲精品乱码久久久久| 久久婷婷久久一区二区三区| 高清视频一区| 潘金莲一级淫片aaaaa免费看| 国产精品欧美日韩久久| 欧美黑人一级爽快片淫片高清| 国产精品麻豆99久久久久久| 日韩欧美卡一卡二| 99在线观看视频免费| 欧美日韩一级在线观看| 人人九九精品| 久久电影国产免费久久电影| 精品色999| videos性欧美另类高清| 国内精品久久久久久中文字幕| 黄色特一级视频| 秋霞午夜在线观看| 色多多视频网站| 99国精产品一二二线| 中文字幕一区二区三区av| 欧美gay视频| 嫩模一区二区三区| 另类国产ts人妖高潮视频| 亚洲性图第一页| 伊人久久大香线蕉精品组织观看| 欧美影院精品| 蜜臀尤物一区二区三区直播| 97在线视频免费观看| 国产91精品黑色丝袜高跟鞋| 97色伦图片97综合影院| 无码熟妇人妻av| 国产一区二区三区四区视频| 久久久久久久久久久久久久久国产| 成人在线播放av| 极品少妇一区二区三区精品视频| av亚洲在线| 亚洲无人区一区| 亚洲色欲色欲www在线观看| 四虎影视成人精品国库在线观看| 中文字幕亚洲一区二区va在线| 青春草在线观看| 亚洲第一精品电影| 美女任你摸久久| 天天影视色香欲综合网天天录日日录| 99热国产免费| av观看在线| av女名字大全列表| 欧美日韩免费看片| 天堂一区二区在线| 国内福利写真片视频在线| 黑人乱码一区二区三区av| 亚洲欧美另类国产| 午夜精品av| 日韩亚洲第一页| 免费高清不卡av| 精品一区不卡| 亚洲免费人成在线视频观看| 精品一区二区三区的国产在线观看| 亚洲一区av在线播放| 色综合久久88色综合天天6| 538prom精品视频线放| 69ww免费视频播放器| 久久福利网址导航| 色噜噜狠狠一区二区三区果冻| 久久只精品国产| 国产成人精品福利一区二区三区| 蜜桃av网站| 麻豆一区二区三区视频| 国产视频福利| 国产特级黄色录像| 亚洲精品丝袜日韩| 日本精品一区二区在线观看| 精品国产免费人成电影在线观...| 亚洲人成7777| 亚洲特级片在线| 亚洲视频在线观看三级| 亚洲影院色在线观看免费| 神马午夜伦理不卡| 性欧美video另类hd尤物| **亚洲第一综合导航网站| 人与动性xxxxx免费视频| 男人天堂免费视频| 国产精品久久久久久久一区探花| 亚洲精品第一国产综合野| 国产理论片免费观看| 国产黄色在线网站| 美女网站在线看| 伊人久久五月天| 国产亚洲一区二区三区四区| 亚洲精华一区二区三区| 超鹏97在线| 韩日a级毛片| 91网址在线播放| 日本在线免费中文字幕| 欧美人成在线观看网站高清| 成人99免费视频| 久久亚洲国产中v天仙www| 精品二区视频| 亚洲久本草在线中文字幕| 97碰碰碰免费公开在线视频| 日韩一区二区在线观看视频播放| 亚洲成av人在线观看| 欧美影院久久久| 9人人澡人人爽人人精品| 不卡一卡二卡三乱码免费网站| 日韩av黄色在线| 免费在线小视频| 亚洲欧美日韩在线| 日韩成人av电影在线| 蜜桃av.com| 欧美性色19p| 国产精品一区二区久久久久| 欧美成人影院在线播放| 青春草视频在线观看| 日韩免费av一区二区三区| 无码日本精品xxxxxxxxx| 日本高清不卡在线| 91国产在线免费观看| 国产99久久九九精品无码| 人妻熟妇乱又伦精品视频| 国产精品网红福利| 顶级嫩模一区二区三区| 日韩国产在线观看一区| 国产乱视频在线观看| 中文字幕乱码一区二区免费| 久久久久久亚洲av无码专区| 亚洲国产精品传媒在线观看| 欧美在线观看成人| 久久精品国产亚洲一区二区三区| 久久精品国产**网站演员| heyzo在线| 无遮挡动作视频在线观看免费入口| www.com亚洲| 亚洲欧洲综合另类在线| 伊人色综合久久久|