ดาวน์โหลดไฟล์จาก URL ใน PowerShell [4 วิธี]
ใช้ Invoke-WebRequest Cmdlet
ใช้ Inrigger-WebRequest cmdlet เพื่อดาวน์โหลดไฟล์ที่ระบุจาก URL ที่ระบุไปยังเส้นทางภายในเครื่องในเครื่องของคุณ
ใช้ Invivo-WebRequest Cmdlet:
$URL = "https://github.com/PowerShell/PowerShell"
$LocalPath = "E:\Test\README.md"
Invoke-WebRequest -Uri $URL -OutFile $LocalPathขั้นแรก เราสร้างตัวแปรสองตัวชื่อ $URL และ $LocalPath ซึ่งมี URL และเส้นทางภายในเครื่องของคุณ โปรดทราบว่าตัวแปรจะขึ้นต้นด้วยเครื่องหมาย $ ใน PowerShell ต่อไป เราใช้ Invoke-WebRequest cmdlet เพื่อดาวน์โหลดไฟล์จาก URL ที่นี่ไฟล์อาจเป็นรูปภาพ ข้อความ html มาร์กดาวน์ หรือไฟล์อื่นๆ
เราใช้ Invoke-WebRequest cmdlet เพื่อรับเนื้อหาจากหน้าเว็บที่ระบุบนอินเทอร์เน็ต cmdlet นี้จะส่งคำขอ HTTP, HTTPS, FILE และ FTP ไปยังบริการเว็บหรือหน้าเว็บ จากนั้นจะแยกวิเคราะห์การตอบสนองจากหน้าเว็บและส่งกลับคอลเลกชันของลิงก์ รูปภาพ ไฟล์ แบบฟอร์ม และองค์ประกอบ HTML ที่สำคัญอื่นๆ หากต้องการใช้ cmdlet นี้ คุณต้องมี PowerShell เวอร์ชัน 3.0 ขึ้นไป
พารามิเตอร์ -URI ใช้เพื่อระบุ Uniform Resource Identifier (URI) ของทรัพยากรอินเทอร์เน็ตที่เราได้ส่งคำขอทางเว็บไป ค่า HTTP, HTTPS, FILE และ FTP ได้รับการสนับสนุนโดยพารามิเตอร์นี้ ค่าของพารามิเตอร์นี้จำเป็นต้องใช้ cmdlet Inovke-WebRequest ในขณะที่เราสามารถละชื่อพารามิเตอร์ -URI ได้ ดูตัวอย่างต่อไปนี้
ใช้ Invivo-WebRequest Cmdlet:
$URL = "https://github.com/PowerShell/PowerShell"
$LocalPath = "E:\Test\README.md"
Invoke-WebRequest $URL -OutFile $LocalPathต่อไป เราใช้ -OutFile cmdlet ตามด้วย $LocalPath cmdlet นี้ใช้เพื่อระบุไฟล์เอาต์พุต เราสามารถระบุเส้นทางและชื่อไฟล์พร้อมนามสกุลได้ที่นี่ -OutFile cmdlet บันทึกเนื้อหาการตอบสนองสำหรับไฟล์เอาต์พุตที่กำหนด ไฟล์เอาต์พุตจะถูกบันทึกในไดเร็กทอรีปัจจุบันหากเราไม่ระบุเส้นทาง
นอกจากนี้เรายังมีนามแฝงสำหรับ Inrigger-WebRequest cmdlet ซึ่งก็คือ iwr ที่เราสามารถใช้ได้ดังนี้:
ใช้ Invivo-WebRequest Cmdlet:
$URL = "https://github.com/PowerShell/PowerShell"
$LocalPath = "E:\Test\README.md"
iwr -Uri $URL -OutFile $LocalPathใช้คลาส System.Net.WebClient
ใช้คลาส System.Net.WebClient เพื่อดาวน์โหลดไฟล์จาก URL ที่ระบุไปยังเส้นทางภายในเครื่องของคุณ
ใช้ System.Net.WebClient:
$URL = "https://github.com/PowerShell/PowerShell"
$LocalPath = "E:\Test\README.md"
$webClient = New-Object System.Net.WebClient
$webClient.DownloadFile($URL, $LocalPath)หลังจากสร้างและเริ่มต้นตัวแปร $URL และ $LocalPath แล้ว เราใช้ New-Object cmdlet เพื่อสร้างวัตถุของ WebClient และบันทึกการอ้างอิงไว้ในตัวแปร $webClient System.Net.WebClient มีวิธีการทั่วไปที่เราสามารถใช้เพื่อส่งหรือรับข้อมูลจากทรัพยากรที่ระบุซึ่งระบุโดย Uniform Resource Identifier (URI)
คลาส WebClient ใช้คลาส WebRequest เพื่อให้สามารถเข้าถึงทรัพยากรที่กำหนด โปรดทราบว่าออบเจ็กต์ WebClient (หรือที่เรียกว่าอินสแตนซ์ WebClient) สามารถดึงข้อมูลที่มีผู้สืบทอด WebRequest ใดๆ ที่ลงทะเบียนด้วยเมธอด WebRequest.RegisterPrefix ตามค่าเริ่มต้น URI ที่เริ่มต้นตัวระบุโครงร่าง http:, ftp:, https: และ file: ได้รับการสนับสนุน โดย .NET Framework
สุดท้าย เราใช้เมธอด .DownloadFile() ของคลาส WebClient เพื่อดาวน์โหลดไฟล์จาก URL ที่ระบุไปยังพาธในเครื่อง วิธีการนี้ใช้พารามิเตอร์สองตัว ได้แก่ ที่อยู่ และ ชื่อไฟล์ ซึ่งจัดเก็บไว้ใน $URL และ $LocalPath ตัวแปร วิธีการนี้จะสร้างข้อยกเว้นที่แตกต่างกันโดยขึ้นอยู่กับหลายๆ สิ่ง:
-
วิธีการ
.DownloadFile()จะสร้างข้อยกเว้นArgumentNullExceptionหากพารามิเตอร์ชื่อไฟล์หรือพารามิเตอร์address(URI) เป็น < รหัส>โมฆะ.ArgumentNullExceptionจะถูกส่งออกไปเมื่อมีการส่งผ่านการอ้างอิงnullไปยังวิธีการที่มันไม่ใช่อาร์กิวเมนต์ที่ถูกต้อง วิธีการนี้จะสร้าง
NotSupportedExceptionหากมีการเรียกใช้หลายเธรดพร้อมกันเราจะได้รับ
WebExceptionด้วยเหตุผลหลายประการ:- หาก
ที่อยู่ไม่ถูกต้องหรือ Uniform Resource Identifier ถูกสร้างขึ้นโดยการรวม BaseAddress
- หาก
หรือ
ชื่อไฟล์ที่ระบุว่างเปล่าnullหรือไม่มีอยู่
หรือ
- เราได้รับข้อผิดพลาดขณะดาวน์โหลดข้อมูล
ไม่แนะนำให้ใช้
WebClientสำหรับการพัฒนาใหม่ แต่เราสามารถใช้คลาส System.Net.Http.HttpClient แทนได้
การใช้ยูทิลิตี้ curl
ใช้ยูทิลิตี curl เพื่อดาวน์โหลดไฟล์จาก URL ที่ระบุไปยังเส้นทางภายในเครื่องของคุณ
ใช้ยูทิลิตี้ Curl:
$URL = "https://github.com/PowerShell/PowerShell"
$LocalPath = "E:\Test\README.md"
& curl $URL -OutFile $LocalPathในส่วนก่อนหน้านี้ เราได้เรียนรู้เกี่ยวกับ $URL, $LocalPath และ -OutFile ที่นี่ เราใช้ยูทิลิตี curl เพื่อดาวน์โหลดไฟล์จากหน้าเว็บ ตัวดำเนินการ & ถูกใช้เพื่อรันคำสั่ง curl ในเชลล์ปัจจุบัน
หากไม่ได้ติดตั้ง
curlบนเครื่องของคุณ คุณต้องติดตั้งก่อน จากนั้นจึงใช้เพื่อดาวน์โหลดไฟล์
ใช้ Start-BitsTransfer Cmdlet
ใช้ Start-BitsTransfer cmdlet เพื่อดาวน์โหลดไฟล์จาก URL ที่ระบุไปยังเส้นทางภายในเครื่องของคุณ
ใช้ Start-BitsTransfer Cmdlet:
$URL = "https://download.microsoft.com/download/8/8/0/880BCA75-79DD-466A-927D-1ABF1F5454B0/PBIDesktopSetup.exe"
$LocalPath = "E:\Test\PBIDesktopSetup.exe"
$startTime = Get-Date
Import-Module BitsTransfer
Start-BitsTransfer -Source $URL -Destination $LocalPathในโค้ดด้านบน เราได้นำเข้าโมดูล BitsTransfer และใช้ cmdlet Start-BitsTransfer เพื่อถ่ายโอนไฟล์ที่ระบุจากต้นทางไปยังปลายทาง นอกจากนี้เรายังบันทึกเวลาเริ่มต้นโดยใช้ Get-Date cmdlet และเก็บไว้ในตัวแปร $startTime ซึ่งเราสามารถใช้เพื่อเปรียบเทียบเวลาปัจจุบันกับ $startTime เพื่อกำหนดระยะเวลาในการถ่ายโอนนี้ให้เสร็จสมบูรณ์
Start-BitsTransfer cmdlet ใช้เพื่อสร้างงานการถ่ายโอน BITS (Background Intelligent Transfer Service) เพื่อถ่ายโอนไฟล์หนึ่งหรือหลายไฟล์ระหว่างเซิร์ฟเวอร์และเครื่องไคลเอนต์ cmdlet นี้ช่วยให้เราดาวน์โหลดไฟล์หลายไฟล์จากเซิร์ฟเวอร์ที่ระบุไปยังคอมพิวเตอร์ไคลเอนต์ที่ระบุ แต่ไม่อนุญาตให้เราอัปโหลดหลายไฟล์จากคอมพิวเตอร์ไคลเอนต์ไปยังเซิร์ฟเวอร์ หากเราจำเป็นต้องอัปโหลดหลายไฟล์ เราสามารถใช้ Import-Csv เพื่อไปป์เอาต์พุตไปยัง Add-BitsFile cmdlet หรือพิจารณาไฟล์บีบอัด (.zip ) หรือไฟล์ Cabinet (.cab)
BITS เป็นส่วนประกอบของระบบปฏิบัติการที่ช่วยให้สามารถถ่ายโอนไฟล์ขนาดใหญ่ผ่านเครือข่ายได้อย่างน่าเชื่อถือ ปรับขนาดได้ และมีประสิทธิภาพ เรามักจะใช้สิ่งนี้เพื่อถ่ายโอนไฟล์ในเบื้องหลัง ซึ่งช่วยให้เราหยุดชั่วคราว ทำต่อ และรีสตาร์ทการถ่ายโอน แม้ว่าการถ่ายโอนจะถูกขัดจังหวะหรือระบบของคุณถูกรีสตาร์ทก็ตาม เราระบุแหล่งที่มาและปลายทางของไฟล์โดยใช้พารามิเตอร์ -Source และ -Destination ในขณะที่ใช้ cmdlet Start-BitsTransfer นอกจากนี้เรายังสามารถใช้ตัวเลือกต่างๆ ในการโอน เช่น ประเภทการโอน และลำดับความสำคัญ เป็นต้น
ตอนนี้เราได้เรียนรู้วิธีต่างๆ ในการดาวน์โหลดไฟล์จากหน้าเว็บด้วย PowerShell ดังนั้นจึงจำเป็นต้องทราบข้อดีข้อเสียของแต่ละวิธี
การเปรียบเทียบโซลูชันข้างต้นทั้งหมด
- Invoke-WebRequest
ข้อดี: ใช้งานง่ายเนื่องจากมีไวยากรณ์ที่เรียบง่าย สามารถจัดการไฟล์ขนาดใหญ่ และใช้ในการดึงข้อมูลจากเว็บไซต์
ข้อเสีย: ไม่ได้ ให้บริการเราด้วยตัวเลือกขั้นสูงเพื่อควบคุมกระบวนการดาวน์โหลด- System.Net.WebClient
ข้อดี: เป็นวิธีการดั้งเดิมที่ใช้ในการดาวน์โหลดไฟล์และให้ตัวเลือกพื้นฐานแก่เราในการควบคุมกระบวนการดาวน์โหลด เช่น การตั้งค่าพร็อกซีและการหมดเวลา
ข้อเสีย: มันไม่ยืดหยุ่นเหมือนกับ `Invoke-WebRequest`- curl
ข้อดี: เป็นเครื่องมือบรรทัดคำสั่งที่ง่ายที่สุดและเป็นที่นิยมมากที่สุดในการถ่ายโอนข้อมูล ซึ่งรองรับโปรโตคอลต่างๆ (FTP, HTTP และอื่นๆ) และใช้เพื่อดำเนินการที่ซับซ้อน เช่น การอัปโหลดไฟล์
ข้อเสีย: คุณอาจต้องติดตั้งยูทิลิตี้นี้ในเครื่องของคุณ ผู้ใช้ PowerShell อาจจำเป็นต้องทำความคุ้นเคยกับไวยากรณ์ให้มากขึ้น- Start-BitsTransfer
ข้อดี: มันเป็นส่วนหนึ่งของ BITS และมีตัวเลือกขั้นสูงในขณะที่ดาวน์โหลดไฟล์ เช่น หยุดชั่วคราว/ดำเนินการต่อ/เริ่มการดาวน์โหลดใหม่
ข้อเสีย: มีการใช้งานน้อยกว่าคลาส System.Net.WebClient และ Invoid-WebRequest cmdlet
