ค้นหาเว็บไซต์

ดาวน์โหลดไฟล์จาก 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

บทความที่เกี่ยวข้อง