دانلود فایل از اینترنت از جمله نیازهای متداول کاربران و مدیران سیستم است. در گذشته، کاربران ویندوز برای این منظور نیاز به استفاده از ابزارهای خاصی یا محیط گرافیکی داشتند، اما با ظهور پاورشل (PowerShell) به عنوان یک ابزار خط فرمان قدرتمند، این فرآیند به سادگی و با استفاده از دستورات قابل انجام شده است. این مقاله به صورت جامع به آموزش دانلود فایل در پاورشل میپردازد و به شما نشان میدهد که چگونه میتوانید از این ابزار برای مدیریت دانلودها، استفاده از پروکسی، و موارد دیگر بهرهبرداری کنید.
پاورشل چیست و چرا از آن استفاده کنیم؟
پاورشل (PowerShell) یکی از ابزارهای خط فرمان قدرتمند و پوسته مدیریتی توسعهیافته توسط مایکروسافت است که امکانات گستردهای برای اجرای دستورات و اسکریپتهای پیشرفته فراهم میآورد. برخلاف محیط خط فرمان CMD که بیشتر برای اجرای دستورات پایهای مورد استفاده قرار میگیرد، پاورشل به دلیل ویژگیهای پیشرفتهاش، همچون تعامل با APIها، مدیریت سیستمهای پیچیده و اتوماسیون فرآیندها، بسیار کاربردیتر است. با استفاده از پاورشل، کاربران و مدیران سیستم میتوانند بسیاری از عملیاتهای سیستمعامل و نرمافزارها را که معمولاً از طریق رابطهای گرافیکی انجام میشوند، به طور خودکار و تنها با چند خط کد ساده انجام دهند.
این ابزار قابلیتهایی مانند مدیریت فایلها، سرویسها، شبکهها، دیتابیسها و همچنین امکان برقراری ارتباط با سرورها را دارد. به کمک پاورشل، شما میتوانید نه تنها امور مدیریتی را سریعتر و دقیقتر انجام دهید، بلکه کارهای پیچیدهای مانند کنترل سرورهای ابری، پیکربندی دستگاههای شبکه و مدیریت زیرساختهای IT را نیز با اسکریپتنویسی خودکار کنید.
پاورشل چیست؟ کاربردها و مزایای استفاده ازPowerShell
چرا باید دانلود فایل با پاورشل را بیاموزیم؟
کنترل کامل: با استفاده از پاورشل، شما کنترل کامل بر فرآیند دانلود خواهید داشت. میتوانید پارامترهای متنوعی مانند سرعت دانلود، مکان ذخیرهسازی، احراز هویت و پروکسی را تنظیم کنید.
اتوماسیون: میتوانید فرآیند دانلود فایلها را به طور خودکار با استفاده از اسکریپتها انجام دهید. این موضوع به خصوص برای مدیران شبکه و سیستمهای بزرگ که نیاز به دانلودهای مکرر دارند بسیار مفید است.
قابلیتهای گسترده: برخلاف مرورگرها که تنها فایلها را دانلود میکنند، پاورشل امکانات گستردهای را فراهم میکند. به عنوان مثال، میتوانید لینکهای داخل یک صفحه وب را استخراج کرده و فایلها را از آن لینکها دانلود کنید.
دستورات مهم پاورشل
1-دانلود فایل با دستور Invoke-WebRequest
یکی از اصلیترین دستورات پاورشل برای دانلود فایل، Invoke-WebRequest است. این دستور به شما اجازه میدهد تا به راحتی فایلها را از اینترنت دانلود کرده و در مسیر دلخواه ذخیره کنید. از این دستور همچنین میتوان برای دریافت اطلاعات یک صفحه وب، ارسال درخواستهای HTTP، و حتی ارسال دادهها به سرورها استفاده کرد.
ساختار دستور Invoke-WebRequest
ساختار پایهای دستور Invoke-WebRequest برای دانلود یک فایل به شکل زیر است:
Invoke-WebRequest -Uri "آدرس فایل" -OutFile "مسیر ذخیره فایل"
-Uri: آدرس URL فایل مورد نظر که میخواهید آن را دانلود کنید.
-OutFile: مسیر و نام فایلی که میخواهید در سیستم خود ذخیره شود.
دانلود با نام کاربری و رمز عبور
اگر سایت مورد نظر نیاز به احراز هویت داشته باشد، میتوانید از پارامتر -Credential برای ارسال نام کاربری و رمز عبور استفاده کنید. برای این منظور میتوانید به شکل زیر عمل کنید:
Invoke-WebRequest -Uri "https://example.com/file.txt" -OutFile "C:\Downloads\file.txt" -Credential (Get-Credential)
پاورشل یک پنجره باز میکند و از شما میخواهد نام کاربری و رمز عبور را وارد کنید.
استفاده از دستور Invoke-RestMethod برای دانلود فایلها
علاوه بر Invoke-WebRequest، دستور دیگری به نام Invoke-RestMethod نیز وجود دارد که برای دانلود فایلها و تعامل با APIهای وب مفید است. در شرایطی که میخواهید دادههای JSON یا XML را از یک API دریافت کنید، این دستور کارآمدتر است.
تفاوت بین Invoke-WebRequest و Invoke-RestMethod
Invoke-WebRequest: برای دانلود فایلها و دریافت HTML کامل صفحات وب استفاده میشود.
Invoke-RestMethod: برای دریافت دادههای ساختار یافته مانند JSON و XML از APIها به کار میرود.
برای دانلود دادهها با استفاده از Invoke-RestMethod، میتوانید به شکل زیر عمل کنید:
Invoke-RestMethod -Uri "https://api.example.com/data" -OutFile "C:\Downloads\data.json"
2-استفاده از پروکسی برای دانلود فایل
برای دانلود فایلها از طریق PowerShell با استفاده از پروکسی، میتوانید از پارامتر -Proxy
در ترکیب با دستور Invoke-WebRequest
یا Invoke-RestMethod
استفاده کنید. این پارامتر به شما این امکان را میدهد که یک پروکسی خاص را برای ارتباط با اینترنت مشخص کنید.
مثال: دانلود با استفاده از پروکسی
Invoke-WebRequest -Uri "https://example.com/file.txt" -OutFile "C:\Downloads\file.txt" -Proxy "http://proxyserver:8080"
در این مثال، پاورشل از یک پروکسی سرور با آدرس proxyserver و پورت 8080 برای دانلود فایل استفاده میکند.
مدیریت ریدایرکتها در دانلود فایل
شما میتوانید با استفاده از پارامتر -MaximumRedirection
تعداد دفعاتی که دستور Invoke-WebRequest
یا Invoke-RestMethod
ریدایرکتها را دنبال میکند، تنظیم کنید. به طور پیشفرض، PowerShell حداکثر 5 ریدایرکت را دنبال میکند، اما در برخی موارد ممکن است لینکها دارای ریدایرکتهای بیشتری باشند و نیاز به افزایش این مقدار داشته باشید.
مثال: مدیریت ریدایرکتها
Invoke-WebRequest -Uri "https://example.com/file.txt" -OutFile "C:\Downloads\file.txt" -MaximumRedirection 10
این دستور اجازه میدهد تا پاورشل تا 10 ریدایرکت را دنبال کند.
پارامترهای دستور Invoke-WebRequest
OutFile
این پارامتر به شما اجازه میدهد تا نام فایل دانلودی و مسیر ذخیرهسازی آن را مشخص کنید. اگر از این پارامتر استفاده نکنید، محتوای دانلود شده به صورت پیشفرض در حافظه ذخیره میشود و نیاز است آن را به صورت دستی ذخیره کنید.
Credential
در صورتی که برای دسترسی به فایل یا لینک نیاز به احراز هویت باشد، با این پارامتر میتوانید نام کاربری و رمز عبور خود را ارسال کنید. برای وارد کردن اطلاعات کاربری، میتوانید از دستور Get-Credential استفاده کنید.
DisableKeepAlive
این پارامتر برای فعال یا غیرفعال کردن قابلیت KeepAlive در ارتباطهای HTTP استفاده میشود. به طور معمول، KeepAlive به پاورشل کمک میکند تا ارتباط با سرور را باز نگه دارد و به ازای هر درخواست، یک ارتباط جدید ایجاد نکند.
MaximumRedirection
این پارامتر برای تنظیم تعداد ریدایرکتهای مجاز در درخواست HTTP به کار میرود. به طور پیشفرض، اگر سرور فایل را به آدرسی دیگر ریدایرکت کند، پاورشل تا ۵ بار آن را دنبال میکند. با این پارامتر میتوانید تعداد دفعات ریدایرکت را تغییر دهید.
Method
این پارامتر به شما امکان میدهد تا متد HTTP مورد استفاده برای ارسال درخواست را مشخص کنید. به طور پیشفرض، متد GET برای دانلود فایل استفاده میشود. با این پارامتر میتوانید متدهای دیگر مانند POST، PUT یا DELETE را نیز استفاده کنید.
Proxy
این پارامتر زمانی که شما پشت یک پراکسی قرار دارید و نیاز است از آن برای ارتباط با اینترنت استفاده کنید، به کار میرود. با این پارامتر میتوانید تنظیمات پراکسی را برای ارتباط خود مشخص کنید.
3-استفاده از System.Net.WebClient برای دانلود فایل ها
در استفاده از پاورشل برای دانلود فایلها، روش System.Net.WebClient یکی از سادهترین و محبوبترین روشها است. این روش به دلیل استفاده از کتابخانههای داخلی داتنت در پاورشل، امکان دانلود سریع و آسان فایلها را فراهم میکند. در ادامه به آموزش و بررسی مزایا و معایب این روش میپردازیم. برای دانلود فایل با استفاده از این روش، نیاز است ابتدا یک WebClient object ایجاد کنید و سپس از آن برای دانلود فایل استفاده کنید. مثال زیر نحوه استفاده از این روش را نشان میدهد:
# تعریف URL فایل و مسیر ذخیرهسازی
$url = "http://mirror.internode.on.net/pup/test/10meg.test"
$output = "$PSScriptRoot\10meg.test"
# ثبت زمان شروع برای محاسبه زمان دانلود
$start_time = Get-Date
# ایجاد یک WebClient object
$WC = New-Object System.Net.WebClient
# دانلود فایل
$WC.DownloadFile($url, $output)
# نمایش مدت زمان دانلود
Write-Output "Time taken: $((Get-Date).Subtract($start_time).Seconds) second(s)"
در این اسکریپت:
$url :URL فایل را مشخص میکند که قرار است دانلود شود.
$output: مسیر ذخیرهسازی فایل دانلودی را مشخص میکند.
$start_time: زمان شروع دانلود را ثبت میکند تا بتوانیم مدت زمان دانلود را محاسبه کنیم.
$WC: یک شیء WebClient از کلاس System.Net.WebClient ایجاد میکند.
$WC.DownloadFile: فایل را از URL مشخص شده دانلود و در مسیر مشخص ذخیره میکند.
Write-Output: مدت زمان دانلود را نمایش میدهد.
مزایای استفاده از System.Net.WebClient
-
این روش بسیار ساده و سریع است. برای دانلود فایل، تنها به چند خط کد نیاز دارید و حتی میتوانید آن را در یک خط به اجرا درآورید.
-
با استفاده از WebClient، فایلها مستقیماً روی دیسک ذخیره میشوند، بنابراین پردازش دادهها در حافظه نیازی ندارد و این امر سرعت دانلود را بهبود میبخشد.
-
به عنوان یک کلاس داتنت، این روش از ویژگیها و قابلیتهای کلاسهای داتنت بهرهمند است و در بسیاری از موارد کاربرد دارد.
معایب استفاده از System.Net.WebClient
-
در این روش، هیچ نوع پیشرفت دانلود به کاربر نمایش داده نمیشود. یعنی شما نمیدانید که چقدر از فایل دانلود شده و چه مقدار از آن باقی مانده است.
-
در طول دانلود فایل، اسکریپت شما تا زمانی که دانلود به پایان نرسد، مسدود میماند و نمیتوانید عملیات دیگری را همزمان اجرا کنید. این امر به دلیل ماهیت synchronous بودن این روش است.
-
این روش انعطافپذیری کمتری نسبت به روشهای دیگر مانند Invoke-WebRequest دارد. برای مثال، شما نمیتوانید به راحتی درخواستهای پیچیده HTTP (مانند ارسال هدرها، کوکیها و غیره) را مدیریت کنید.
مثالهای کاربردی
دانلود و ذخیره فایل با تعیین مسیر دلخواه
$url = "https://example.com/file.zip"
$output = "C:\Downloads\file.zip"
(New-Object System.Net.WebClient).DownloadFile($url, $output)
محاسبه مدت زمان دانلود
برای محاسبه مدت زمانی که دانلود طول کشیده، میتوانید از Get-Date قبل و بعد از دانلود استفاده کنید:
$start = Get-Date
(New-Object System.Net.WebClient).DownloadFile("https://example.com/file.zip", "C:\Downloads\file.zip")
$end = Get-Date
$duration = $end - $start
Write-Output "Download completed in $($duration.TotalSeconds) seconds"
4-دانلود فایل با روش Start-BitsTransfer
روش Start-BitsTransfer یکی از بهترین و قدرتمندترین ابزارهای پاورشل برای دانلود فایلها است که از Background Intelligent Transfer Service (BITS) استفاده میکند. این سرویس به گونهای طراحی شده که میتواند دانلودها را به شکل همزمان و غیرهمزمان مدیریت کند. با این روش، فایلها با بیشترین سرعت و قابلیتهای اضافی مانند محدودسازی پهنای باند و مدیریت پراکسیها دانلود میشوند.
آموزش استفاده از Start-BitsTransfer
برای استفاده از Start-BitsTransfer، ابتدا باید مطمئن شوید که ماژول BitsTransfer در سیستم شما فعال است. این ابزار به صورت داخلی در پاورشل وجود دارد و نیازی به نصب اضافی ندارد. در ادامه مثالی از نحوه دانلود فایل با استفاده از این روش آورده شده است:
تعریف URL فایل و مسیر ذخیرهسازی
$url = "http://mirror.internode.on.net/pup/test/10meg.test"
$output = "$PSScriptRoot\10meg.test"
ثبت زمان شروع برای محاسبه مدت زمان دانلود
$start_time = Get-Date
وارد کردن ماژول BitsTransfer
Import-Module BitsTransfer
دانلود فایل
Start-BitsTransfer -Source $url -Destination $output
نمایش مدت زمان دانلود
Write-Output "Time taken: $((Get-Date).Subtract($start_time).Seconds) second(s)"
در این کد:
$url: آدرس فایل که قرار است دانلود شود.
$output: مسیر ذخیرهسازی فایل دانلود شده.
$start_time: برای محاسبه مدت زمان دانلود استفاده میشود.
Start-BitsTransfer: دستور دانلود فایل با استفاده از BITS.
مزایای استفاده از Start-BitsTransfer
سرعت بالا: یکی از بهترین مزایای این روش، سرعت بالای دانلود است. با استفاده از BITS، دانلودها بهینه شده و میتوانند از پهنای باند به صورت موثرتری استفاده کنند.
دانلود به صورت همزمان و غیرهمزمان: شما میتوانید بسته به نیاز خود، فایلها را به صورت همزمان یا غیرهمزمان دانلود کنید. این ویژگی به خصوص در سناریوهایی که نیاز به دانلود فایلهای حجیم یا همزمان با انجام سایر کارها است، بسیار مفید است.
مدیریت پهنای باند: با استفاده از BITS، شما میتوانید پهنای باند مورد استفاده برای دانلود را محدود کنید. این ویژگی زمانی مفید است که میخواهید از تمام پهنای باند اینترنت برای دانلود استفاده نکنید و همچنان بتوانید از اینترنت برای کارهای دیگر نیز بهره ببرید.
پشتیبانی از ریکاوری در هنگام قطع دانلود: در صورت قطع ارتباط، دانلود با BITS به شکل خودکار از همان جایی که قطع شده بود ادامه پیدا میکند. این امر باعث میشود نیازی به شروع مجدد دانلود نباشد و فایلهای حجیم به راحتی بدون نگرانی از قطع ارتباط دانلود شوند.
پشتیبانی از پراکسیها و سرورهای جداگانه: اگر نیاز به استفاده از پروکسی برای دانلود دارید یا از سرورهای مجزا برای انتقال دادهها استفاده میکنید، BITS این امکان را به شما میدهد که با تنظیمات اختصاصی پراکسیها، دانلود خود را مدیریت کنید.
معایب استفاده از Start-BitsTransfer
-
برخلاف روشهای سادهای مانند System.Net.WebClient، کار با Start-BitsTransfer ممکن است برای کاربران تازهکار کمی پیچیده باشد. با این حال، امکانات بیشتر این روش باعث میشود ارزش استفاده را داشته باشد.
-
برای استفاده از این روش، سرویس BITS باید در سیستم فعال باشد. در برخی از سیستمها ممکن است این سرویس به دلایلی غیرفعال باشد و شما باید ابتدا آن را فعال کنید.
-
در روش غیرهمزمان، پیشرفت دانلود به صورت پیشفرض نمایش داده نمیشود و نیاز به کدهای اضافی برای نمایش وضعیت دانلود دارید. البته، در صورت استفاده از روش همزمان، میتوانید این پیشرفت را مدیریت کنید.
مثالهای کاربردی
دانلود فایل به صورت همزمان
$url = "http://example.com/file.zip"
$output = "C:\Downloads\file.zip"
Start-BitsTransfer -Source $url -Destination $output
دانلود فایل به صورت غیرهمزمان
$url = "http://example.com/file.zip"
$output = "C:\Downloads\file.zip"
Start-BitsTransfer -Source $url -Destination $output -Asynchronous
محدود کردن پهنای باند
$url = "http://example.com/file.zip"
$output = "C:\Downloads\file.zip"
Start-BitsTransfer -Source $url -Destination $output -Priority Foreground
در اینجا با استفاده از پارامتر -Priority، میتوانید اولویت استفاده از پهنای باند را تعیین کنید. مقدار Foreground یعنی دانلود باید با بیشترین اولویت انجام شود.
نکات بهینهسازی محتوا برای دانلود فایل در پاورشل
برای اینکه کاربران بیشتری از محتوای شما بهرهمند شوند و موتورهای جستجو محتوای شما را بهتر ایندکس کنند، بهتر است به چند نکته مهم در بهینهسازی محتوا توجه کنید:
استفاده از کلمات کلیدی مرتبط: مطمئن شوید که کلمات کلیدی مرتبط با موضوع، مانند "دانلود فایل با پاورشل" و "دستور Invoke-WebRequest" در متن شما وجود دارد.
بهینهسازی عنوان و متا توضیحات: عنوان مقاله و توضیحات متا باید جذاب و شامل کلمات کلیدی اصلی باشد.
لینکهای داخلی و خارجی: به مقالات دیگر در سایت خود لینک دهید و همچنین به منابع معتبر خارجی ارجاع دهید.
استفاده از مثالهای کاربردی: مثالهای واقعی به کاربران کمک میکند تا مطالب را بهتر درک کنند و در عمل به کار گیرند.
تعامل با کاربر: از کاربران بخواهید سوالات خود را در بخش نظرات مطرح کنند تا تعامل بیشتری با آنها داشته باشید.
رفع مشکلات رایج در دانلود فایل با پاورشل
خطای احراز هویت: اگر هنگام دانلود فایل از یک سایت نیاز به احراز هویت باشد و شما اعتبارنامه مناسب نداشته باشید، با خطا مواجه میشوید. برای رفع این مشکل، از پارامتر -Credential استفاده کنید و نام کاربری و رمز عبور معتبر را ارسال کنید.
خطای پروکسی: اگر شبکه شما به پروکسی نیاز دارد و آن را تنظیم نکردهاید، ممکن است با خطای اتصال مواجه شوید. در این صورت، حتماً پارامتر -Proxy را به درستی تنظیم کنید.
محدودیتهای ریدایرکت: در صورتی که لینک دانلود چندین ریدایرکت داشته باشد و تعداد ریدایرکتها از مقدار پیشفرض پاورشل بیشتر باشد، باید پارامتر -MaximumRedirection را افزایش دهید.
نتیجه گیری
پاورشل (PowerShell) یکی از ابزارهای قدرتمند مدیریت سیستم است که توسط مایکروسافت توسعه یافته و امکانات متنوعی را برای کاربران فراهم میکند. کاربردهای پاورشل در مدیریت سیستمهای ویندوزی بسیار گسترده است و به مدیران سیستم، توسعهدهندگان و کاربران عادی کمک میکند تا وظایف مختلفی را با سرعت و کارایی بیشتر انجام دهند. یکی از مفیدترین کارهایی که میتوان با این ابزار کرد دانلود فایلهاست که ما در این مطلب به 4 روش کاربردی اشاره کردیم.
سوالات متداول
آیا میتوان از PowerShell برای دانلود فایلهای بزرگ استفاده کرد؟
پاورشل ابزارهای قدرتمندی مانند Invoke-WebRequest و Start-BitsTransfer ارائه میدهد که برای دانلود فایلهای بزرگ مناسب هستند. مخصوصاً با استفاده از Start-BitsTransfer، امکان ادامه دانلود در صورت قطع ارتباط وجود دارد.
مزیت استفاده از Start-BitsTransfer نسبت به Invoke-WebRequest چیست؟
Start-BitsTransfer بهینهتر است و امکان دانلود غیرهمزمان، مدیریت پهنای باند و ادامه دانلود در صورت قطع شدن ارتباط را فراهم میکند. در حالی که Invoke-WebRequest سادهتر است، ولی قابلیتهای پیشرفته مدیریت دانلود را ندارد.
آیا میتوان از پراکسی در هنگام دانلود فایلها با پاورشل استفاده کرد؟
هم در دستور Invoke-WebRequest و هم در Start-BitsTransfer میتوان از پراکسی برای مدیریت ارتباط اینترنتی و دانلود فایلها استفاده کرد.
چگونه میتوان پیشرفت دانلود فایل را در PowerShell مشاهده کرد؟
در روش Start-BitsTransfer به صورت غیرهمزمان (asynchronous) پیشرفت دانلود به طور پیشفرض نمایش داده نمیشود، اما میتوان با استفاده از اسکریپتهای اضافی این اطلاعات را نمایش داد.
در صورت قطع شدن ارتباط اینترنت، آیا دانلود فایل از ابتدا آغاز میشود؟
در صورت استفاده از Start-BitsTransfer، دانلود پس از بازگشت ارتباط اینترنتی از همان جایی که قطع شده بود، ادامه پیدا میکند.