אתה צריך להוריד קבצים מהאינטרנט אך שונא ללחוץ על קישורים באופן חוזר? אם העבודה שלך כוללת הורדת קבצים מהאינטרנט באופן תדיר, סביר להניח שתרצה לאוטומציה של המשימה. למה לא להשתמש ב-PowerShell כדי להוריד קבצים בדיוק כמו ב-wget של PowerShell?
Windows PowerShell ו-PowerShell מגיעים עם אפשרויות הורדת קבצים. השימוש ב-PowerShell להורדת קבצים הוא עניין של ידע על ה-cmdlets וה-Class של .NET לשימוש ואיך להשתמש בהם.
במאמר זה, תלמד את הדרכים השונות להשתמש ב-PowerShell להורדת קבצים מהאינטרנט.
דרישות קדם
מכיוון שזהו מאמר של למידה-על-ידי-העשייה, ישנם דרישות קדם כדי להבטיח שתוכל למעשה למשוך את הדוגמאות. להלן הדרישות הבסיסיות.
- A computer that is running on Windows 10 or higher. This computer is where you will run the scripts/commands featured in this article.
- Windows PowerShell 5.1 או PowerShell 7.1 (מומלץ).
- Windows 10 כבר כוללת Windows PowerShell 5.1.
- A web site that hosts the files to download.
- להורדות קבצים בלתי מאומתים, שקול להשתמש באתר ה-Tele2 Speedtest, שהוא בחינם.
- אם ברצונך לבדוק הורדות קבצים עם אוטוריזציה, עשוי להיות עליך לבנות את השרת שלך לקבצים HTTP. לדוגמה לשרת קבצים HTTP בחינם הוא HFS של Rejetto.
שימוש ב-PowerShell להורדת קבצים מ-URL: ארבעה דרכים
יש ארבעה אמצעים להשתמש ב-PowerShell להורדת קבצים שאינם תלויים בכלים מתוך גוף שלישי. אלה הם:
Invoke-WebRequest
Invoke-RestMethod
Start-BitsTransfer
- מחלקת WebClient של .NET.
לא משנה איזה מתוך ארבעת השיטות הללו אתה משתמש, הלוגיקה והרכיבים כדי להפעיל אותם הם אותם הדברים. חייבת להיות כתובת מקור לקובץ ונתיב היעד לשמור את הקבצים שהורדו. אם דרוש על ידי שרת האינטרנט, עליך גם להזין את הפרטים האישיים.
הסעיפים הבאים מציגים כל אחת מארבעת השיטות אלו. בסופו של דבר, עליך להחליט איזו דרך תבחר כאשר אתה משתמש ב-PowerShell כדי להוריד קבצים.
שימוש ב-Invoke-WebRequest כאלטרנטיבה ל-wget של PowerShell
השיטה הראשונה ב-PowerShell להוריד קבצים היא באמצעות הפקודה Invoke-WebRequest
. אולי הפקודה הנפוצה ביותר במאמר זה, Invoke-WebRequest
, יכולה להוריד קישורי HTTP, HTTPS ו-FTP.
בין אם מיקום המקור מחייב משתמשים להתחבר, הפקודה Invoke-WebRequest
יכולה לטפל בבקשות עם פרטי הכניסה כמו כן.
כדי להוריד קובץ, התחברות מתחת להצגת המינימום מראה את הפרמטרים הנדרשים כדי להשיג את התוצאה הרצויה.
לדוגמה, הקוד למטה מוריד קובץ בשם 10MB.zip מאתר אינטרנט. לאחר מכן הוא שומר את הקובץ שהורד ל- C:\dload\10MB.zip. ניתן להעתיק את הקוד למטה ולהדביק אותו בפקודה של PowerShell כדי לבדוק.
ההדגמה למטה מציגה את התוצאה הצפויה לאחר הרצת הקוד לעיל ב-PowerShell. כפי שאתה רואה, ההורדה של הקובץ הצליחה.

מה אם יש צורך באימות משתמש לפני הגישה? לדוגמה, הקוד למטה מוריד קובץ מאתר אינטרנט פרטי שבו משתמשים חייבים להתחבר.
עם זאת, ההורדה נכשלה עקב גישה לא מורשית.

אם נדרש אימות, עליך להוסיף אישור לבקשה באמצעות הפרמטר -Credential
. השורה הראשונה בקוד למטה מבקשת ממך להזין את האישור (שם משתמש וסיסמה) ושומרת אותו במשתנה $credential
.
ההדגמה למטה מציגה מה אתה צופה לראות כאשר אתה מריץ את הקוד למעלה ב-PowerShell. כפי שאתה רואה, הפקודה Get-Credential
מבקשת אישור כניסה ל-PowerShell. הפעם, בשימוש באישור עם Invoke-WebRequest
הוביל להורדה מוצלחת.

קשור: שימוש בפקודת ה-Get-Credential של PowerShell וכל נושאי האישור
בדיקת שגיאות פרסום בשימוש ב-Invoke-WebRequest
A crucial thing to remember when using Invoke-WebRequest
in Windows PowerShell is that, by default, this cmdlet uses the Internet Explorer engine to parse data. The error below may happen when using Invoke-WebRequest
on computers without the Internet Explorer in it.
תצטרך להפעיל מחדש את הפקודה שלך, אך הפעם כולל את המתג -UseBasicParsing
.
בְּ Windows PowerShell, ייתכן כי תקבל הודעת שגיאה: תוכן התגובה אינו ניתן לניתוח משום שמנוע ה-Internet Explorer אינו זמין, או שהתצורה הראשונית של Internet Explorer אינה שלמה. ציין את הפרמטר UseBasicParsing ונסה שוב.
החל מ־PowerShell Core 6.0, פקודת ה־Invoke-WebRequest
משתמשת רק בניתוח בסיסי. לכן, הפרמטר -UseBasicParsing
אינו נדרש יותר.
שימוש ב־Invoke-RestMethod
פקודת ה־Invoke-RestMethod
יותר על שליחת בקשת HTTP או HTTPS לשירות web service RESTful. פקודה זו מתאימה יותר לבקשות שמשתמשות ב־REST APIs כגון Graph API של Microsoft.
כאשר מדובר בהורדת קבצים ישירות מהאינטרנט, Invoke-RestMethod
הוא מתמודד מצוין. אל תיבהל לחשוב אחרת. אין הבדל רב בין שימוש ב־Invoke-RestMethod
ו־Invoke-WebRequest
כאשר משמשים להורדת קבצים מקישור אינטרנט ישיר.
הורדת קובץ באמצעות Invoke-RestMethod
כדי להוריד קובץ באמצעות Invoke-RestMethod
, השתמש בתחביר הבא. תשים לב שהפקודה משתמשת באותם פרמטרים כמו Invoke-WebRequest
.
בקוד הדוגמה למטה, הקובץ מורד מערך ה-URL המוגדר במשתנה $source
. לאחר מכן, הוא מורכב לנתיב המוגדר במשתנה $destination
.
אם המקור דורש אימות, ניתן להעביר את פרטי הכניסה באמצעות הפרמטר -Credential
. הדוגמה למטה מבקשת את פרטי הכניסה ושומרת אותם במשתנה $credential
. ערך המשתנה $credential
מועבר לאחר מכן לפרמטר -Credential
.
כמו כן, מאחר וקישור הקובץ הוא מקור בפרוטוקול HTTP ולא HTTPS, זה אומר שאתה שולח אימות שאינו מוצפן. כללית, עליך להימנע משימוש במקורות HTTP לצורך אבטחה. אך אם עליך להשתמש במקור HTTP, עליך להוסיף את הפרמטר -AllowUnencryptedAuthentication
לפקודתך.
שימוש ב-Start-BitsTransfer
Start-BitsTransfer
מיועד במיוחד להעברת קבצים בין מחשבי לקוח ושרת. פקודת PowerShell זו תלויה על שירות ההעברה החכמה הרקעית (BITS) המובנה במערכת ההפעלה Windows.
מכיוון ש-Start-BitsTransfer
דורשת BITS כדי לעבוד, זה אומר שפקודה זו אינה זמינה על מחשבים שאינם משתמשי Windows. מצד שני, Start-BitsTransfer
נהנית מיתרונות של BITS עצמה. חלק מהיתרונות האלו הם:
- מודעות רשת ושימוש ברוחב הפס.
- טיפול בהפרעות (המשך, המשך אוטומטי, השהיה וכו').
- הורדת קבצים מרובים כעבודות רקע.
- אפשרות להגדיר עדיפויות של עבודות הורדה.
הורדת קובץ
הדרך היסודית להשתמש ב־Start-BitsTransfer
ב־PowerShell להורדת קובץ היא לציין מקור ויעד. באמצעות הסקריפט למטה, יש רק צורך לשנות את הערכים של $source
ו־$destination
לפי הדרישות שלך.
כפי שאתה יכול לראות מהדגמה למטה, הקובץ יורד לנתיב c:\dload\100MB.zip.

נניח שהיעד לא צוין,
Start-BitsTransfer
יוריד וישמור את הקובץ בתיקיית העבודה הנוכחית. לדוגמה, אם תפעילStart-BitsTransfer
מ־C:\dload, הקובץ יורד לאותו תיקייה.
להורדות שדורשות אימות, יש ל־Start-BitsTransfer
פרמטר בשם -Credential
המקבל אובייקט PSCredential.
הורדת מספר קבצים
כדי להדגיש הורדה של מספר קבצים, יש ליצור קובץ CSV עם שני עמודות. שם הקובץ יהיה filelist.txt. העמודה הראשונה צריכה להכיל את הקישור למקור, והעמודה השנייה חייבת להכיל את נתיב היעד. תוכן הקובץ ייראה כמו בדוגמה למטה.
דומה: ניהול קבצי CSV ב־PowerShell עם Import-Csv
כאשר קובץ ה-CSV מוכן, השתמש בפקודה למטה כדי להתחיל את ההורדה של הקובץ. הפקודה מייבאת את קובץ ה-CSV באמצעות Import-Csv
ומעבירה את התוכן ל-Start-BitsTransfer
.
ראה בדגמה למטה כיצד הקוד עובד. כפי שניתן לראות, ההורדה מתחילה וניתן לראות את התקדמות ההורדה. הפרומפט של PowerShell אינו זמין במהלך תהליך ההורדה.

אם ברצונך להתחיל את תהליך ההורדה כמשימה רקע, יש להוסיף את המתג -Asynchronous
בסוף פקודת Start-BitsTransfer
.
בהתחלה, מצב כל משימה יראה "מתחברת". התמונה למטה מראה את מזהה המשימה של כל הורדת קובץ.

עכשיו שהתחלת את תהליך ההורדה, תרצה לבדוק האם ההורדה הושלמה. כדי לבדוק את מצב המשימה להורדה, השתמש בפקודת Get-BitsTransfer
. כפי שניתן לראות למטה, מצב ההורדה שונה ל-הועבר.

שימוש ב-WebClient Class וב-HttpClient Class (.NET Framework)
PowerShell מבוססת על .NET, וטבעה עושה אותה מסוגלת לנצל את היכולת של .NET עצמה. ישנם שני סוגי כיתות .NET שניתן להשתמש בהן ב-PowerShell להורדת קבצים; WebClient ו-HttpClient.
מתי להשתמש ב-WebClient נגד HttpClient נגד HttpWebRequest. בקטע הבא, תלמד כיצד להשתמש ב-WebClient ו-HttpClient ב-PowerShell כדי להוריד קבצים מהאינטרנט.
הורדת קובץ באמצעות System.Net.WebClient
כדי להשתמש ב-WebClient, עליך ליצור אובייקט מסוג System.Net.WebClient
. בדוגמה למטה, $webClient
הוא האובייקט החדש של System.Net.WebClient
. לאחר מכן, באמצעות שימוש בשיטה DownloadFile()
מתחילים את ההורדה של הקובץ מהמקור.
קשור: שימוש בזרימות נתונים של PowerShell לשיפור התקדמות הקוד
אנא העתיק את הקוד למטה והרץ אותו במסד ה-PowerShell שלך כדי לבדוק. שים לב שלא תראה כל סיום או פלט במסך אלא אם יש שגיאה. עם זאת, העטף של PowerShell יהיה נעול עד שההורדה הושלמה.
אם המקור מחייב אימות כדי לאפשר הורדת קובץ, תוכל להשתמש בקוד הבא. השורה הראשונה מעצימה את הקריאה לפרטי הכניסה ומאחסנת אותם במשתנה $credentials
. ערך המשתנה $credential
מופיע בבקשת ההורדה של הקובץ.
על פי מסמך זה של Microsoft: "אנו לא ממליצים על שימוש במחלקת WebClient לפיתוח חדש. במקום זאת, השתמש במחלקת System.Net.Http.HttpClient."
נראה כי המחלקה WebClient היא מיושנת, והמחלקה החדשה שממליצה Microsoft עליה היא מחלקת ה-HttpClient. אך אל דאגה. הקטע הבא מדבר על שימוש במחלקת HttpClient ב-PowerShell כדי להוריד קבצים מהרשת.
הורדת קובץ באמצעות System.Net.Http.HttpClient
כמו במחלקת WebClient, עליך ליצור תחילה את System.Net.Http.HttpClient
. באמצעות הקוד למטה תוריד את הקובץ מהמקור $source
אל היעד $destination
. הסתכל על ההערות מעל כל שורת קוד כדי לדעת מה עושה כל שורה.
הקוד למטה הוא חי, ואתה יכול לבדוק אותו על ידי הרצתו בסשן של PowerShell שלך.
במצבים בהם הורדת קובץ מחייבת אימות, עליך להוסיף את האימות לאובייקט HttpClient. כדי לכלול אימות לבקשת הורדת הקובץ, צור אובייקט חדש System.Net.Http.HttpClientHandler
כדי לאחסן את פרטי הכניסה.
ניתן להעתיק את הקוד למטה ולהריץ אותו ב PowerShell כדי לבדוק. או ניתן גם להריץ אותו כסקריפט של PowerShell. בדוגמה זו, הקוד נשמר כ- download-file.ps1.
הדגמה למטה מראה את התוצאה כאשר מריצים את סקריפט PowerShell כדי להוריד את הקובץ.
בהתחלה, התיקייה מכילה רק את קובץ הסקריפט בתוכה. יש הודעה להזנת שם המשתמש והסיסמה. לאחר מכן, הסקריפט ממשיך ומוריד את הקובץ. לאחר הורדת הקובץ, ניתן לראות שהקובץ החדש נמצא כעת בתוך התיקייה היעד.

סיכום
Windows PowerShell ו־PowerShell Core מגיעים עם יכולות מובנות להורדת קבצים, פועלים כאלטרנטיבה ל־PowerShell wget! בין אם מורידים מקורות המוגנים בסיסמה, קבצים יחידים או מרובים – דרך PowerShell זמינה עבורך.
שיטות הורדת הקבצים שכוללות במאמר זה פועלות על Windows PowerShell ו־PowerShell Core כאחד. זה אומר שהשיטות אלו חלות על שני מערכות, הן בווינדוס והן לא בווינדוס, עם יוצא מן הכלל של Start-BitsTransfer
.
ובתור ש־PowerShell הוא יותר מפקודת פקודות, אתה יכול לתרגם את מה שלמדת לסקריפטים. בשבילך, זה אומר הזדמנות לאוטומציה. כבר לא תצטרך להעתיק כתובות URL, ללחוץ על קישורים ולחכות להורדות באופן ידני.
Source:
https://adamtheautomator.com/powershell-download-file/