উইন্ডোজ পাওয়ারশেলে উইজেটের নেটিভ বিকল্প?


282

আমি জানি যে আমি এফোরমিশনড লাইব্রেরিটি ডাউনলোড করতে এবং ইনস্টল করতে পারি (উইন্ডোজের জন্য উইজেট), তবে আমার প্রশ্নটি এটি:

উইন্ডোজ পাওয়ারশেলে, এর নেটিভ বিকল্প আছে wget?

আমার wgetএইচটিটিপি জিইটি দিয়ে প্রদত্ত ইউআরএল থেকে কেবল একটি ফাইল পুনরুদ্ধার করতে হবে। এই ক্ষেত্রে:

wget http://www.google.com/

আরও দেখুন superuser.com
জিজ্ঞাসা

উত্তর:


235

এখানে একটি সাধারণ পিএস 3.0 এবং পরে ওয়ান-লাইনার যা কাজ করে এবং বেশি পিএস বার্ফ জড়িত না:

wget http://blog.stackexchange.com/ -OutFile out.html

মনে রাখবেন যে:

  • wget জন্য একটি উপনাম Invoke-WebRequest
  • ইনভোক-ওয়েবরেউক্টস এইচটিএমএলওয়েব্রিস্পোনসঅবজেক্টটি ফিরিয়ে দেয় , এতে লিঙ্কস, চিত্রগুলি, ফর্মগুলি, ইনপুটফিল্ডস ইত্যাদির মতো প্রচুর দরকারী এইচটিএমএল পার্সিং বৈশিষ্ট্য রয়েছে তবে এই ক্ষেত্রে আমরা কেবল কাঁচামাল ব্যবহার করছি
  • ফাইলের বিষয়বস্তুগুলি ডিস্কে লেখার আগে মেমোরিতে সংরক্ষণ করা হয়, এই পদ্ধতিটি বড় ফাইলগুলি ডাউনলোড করার জন্য অনুপযুক্ত করে তোলে
  • উইন্ডোজ সার্ভার কোর ইনস্টলেশনগুলিতে, আপনাকে এটি লিখতে হবে

    wget http://blog.stackexchange.com/ -UseBasicParsing -OutFile out.html
    
  • 20 সেপ্টেম্বর 2014 এর আগে, আমি প্রস্তাব দিয়েছি

    (wget http://blog.stackexchange.com/).Content >out.html
    

    একটি উত্তর হিসাবে। যাইহোক, এটি সমস্ত ক্ষেত্রে কার্যকর হয় না, কারণ >অপারেটর (যা একটি উপাধি Out-File) ইনপুটটিকে ইউনিকোডে রূপান্তর করে।

আপনি যদি উইন্ডোজ 7 ব্যবহার করে থাকেন তবে আপনার উইন্ডোজ ম্যানেজমেন্ট ফ্রেমওয়ার্ক 4 বা সংস্করণ ইনস্টল করতে হবে।

আপনি দেখতে পাচ্ছেন যে এর $ProgressPreference = "silentlyContinue"আগে Invoke-WebRequestকরা বড় ফাইলগুলির সাথে ডাউনলোডের গতি উল্লেখযোগ্যভাবে উন্নত করবে; এই পরিবর্তনশীলটি অগ্রগতি ইউআই রেন্ডার হয় কিনা তা নিয়ন্ত্রণ করে।


3
এটি এখন সঠিক উত্তর, এবং আমি যদি সত্যিকারের উইজেটটি ইনস্টল করে থাকি তবে আমি ঘটনাক্রমে পরীক্ষার জন্য উইজেটে চলে যাই। বিরক্তিকর যে এটি সহজেই ফাইলের নামটি পেতে পারে না (আপনাকে এটি আউটপুট পুনঃনির্দেশে নির্দিষ্ট করতে হবে), তবে এই বিকল্পটির আসল উইজেটের চেয়ে ভাল ইউআই রয়েছে (আমার মতে) তাই আছে।
ম্যাথু শার্লে

13
তবে উইন্ডোজ only কেবল পাওয়ারশেল ২.০ নিয়ে আসে এবং ফলাফলটি হবে "ইনভোক-ওয়েবরয়েস্ট" শব্দটি একটি সেমিডলেট হিসাবে পরিচিতি পায় না, ... "।
পিটার মর্টেনসেন

16
যথাযথ সতর্কতা: এই পদ্ধতিতে ফাইলটি লেখার আগে ফাইলটির সম্পূর্ণ সামগ্রী মেমরির মধ্যে রাখবে। বড় ফাইলগুলি ডাউনলোড করার জন্য এটি কোনও ভাল সমাধান নয়।
im_nullable

2
@ আইএম_নুলেল, ভাল কল - আমি এটি পোস্টটিতে যুক্ত করেছি।
ওয়ারেন রুমাক

1
@ ডেজা আমি একটি ভিন্ন পদ্ধতির সাথে উত্তর আপডেট করেছি। এটা আবার চেষ্টা কর.
ওয়ারেন রুমাক

180

আপনার যদি কেবল একটি ফাইল পুনরুদ্ধার করতে হয় তবে আপনি ওয়েবক্লিয়েন্ট অবজেক্টের ডাউনলোড ফাইল পদ্ধতিটি ব্যবহার করতে পারেন :

$client = New-Object System.Net.WebClient
$client.DownloadFile($url, $path)

$urlফাইলটির ইউআরএল উপস্থাপন করে এমন স্ট্রিং কোথায় রয়েছে এবং $pathস্থানীয় পথে যে ফাইলটি সংরক্ষণ করা হবে তা উপস্থাপন করছে।

নোট যাতে $pathফাইলের নাম অন্তর্ভুক্ত করা উচিত; এটি কেবল একটি ডিরেক্টরি হতে পারে না।


31
এখন পর্যন্ত এটি প্রস্তাবিত সেরা সমাধান হয়েছে। এটি দেওয়া (new-object System.Net.WebClient).DownloadFile( '$url, $path)হলেও মনে হয় যে আমি এটিকে এক লাইনের ফর্ম্যাটে আবারও লিখতে পারি কারণ এটি wgetআমার পক্ষে এখন পর্যন্ত দেখা সবচেয়ে ভাল চিঠিপত্র । ধন্যবাদ!
jsalonen

3
পার্শ্ব-নোট হিসাবে আপনি এটিকে অবিচ্ছিন্নভাবে কিছু করতে পারেন (নতুন-অবজেক্ট সিস্টেম. নেট. ওয়েলক্লায়েন্ট) .ডাউনলোডফিলঅ্যাসেন্স (url, ফাইলপথ)
জেমস

আমরা কি ওয়েবক্লিয়েন্টের মাধ্যমে একটি নির্দিষ্ট পাঠ্য এবং একটি নোটপ্যাডে আউটআউট করতে পারি? ধন্যবাদ
মোগলি

6
হ্যাঁ, এটি উইন্ডোজ on এর বক্সের বাইরে চলে আসে ( এটি পাওয়ারশেল ২.০ সহ আসে )। নমুনা: $client.DownloadFile( "http://blog.stackexchange.com/", "c:/temp2/_Download.html")
পিটার মর্টেনসেন

3
কেবল একটি url পাওয়ার জন্য এবং ফলাফলগুলি উপেক্ষা করার জন্য (যেমন, কোনও আইআইএস (new-object System.Net.WebClient).DownloadData($url) | Out-Null
ওয়ার্মআপ

85

নেই Invoke-WebRequestআসন্ন PowerShell সংস্করণ 3:

Invoke-WebRequest http://www.google.com/ -OutFile c:\google.html

9
সব কমনীয়তা dd...
gWaldo

1
@ জিডাল্ডো আপনি মজা করছেন - এটি ব্যবহার করার জন্য একটি আনন্দ (কেবলমাত্র পিএস শেখার জন্য কথা বলা)
জ্যাক ডগলাস

8
আমি কেবল বোঝাতে চাইছি যে -Outfileপ্যারামিটারটি বাহ্যিক বলে মনে হচ্ছে যখন আপনি কেবল কোনও ফাইলটিতে ( >ওভাররাইট করতে) বা >>(সংযোজন করতে ) ব্যবহার করতে পারবেন ।
gWaldo

5
@ জিওয়াল্ডো বা এমনকি ইউআরএল থেকে ফাইলের নামও ঠিক করুন wget:)
পেল্টিয়ার

5
এবং পিএস ৪.০ হিসাবে, wgetএবং curlএটি ডিফল্টরূপে Invoke-WebRequest( iwr) দিয়ে ডিফ্ট করা হয়: ডি
বব

18

এটি কিছুটা অগোছালো তবে এই ব্লগ পোস্টটি যা আপনাকে ফাইল ডাউনলোড করার জন্য নির্দেশনা দেয়।

বিকল্পভাবে (এবং এটি আমি প্রস্তাবিত একটি) আপনি বিআইটিএস ব্যবহার করতে পারেন:

Import-Module BitsTransfer
Start-BitsTransfer -source "http://urlToDownload"

এটি অগ্রগতি প্রদর্শন করবে এবং বর্তমান ডিরেক্টরিতে ফাইলটি ডাউনলোড করবে।


3
বিআইটিএস সার্ভারের শেষে সমর্থনের উপর নির্ভর করে, যদি উপলভ্য থাকে তবে এটি ব্যাকগ্রাউন্ডে কাজ করে এবং আপনি অন্যান্য সেমিডলেট সহ অগ্রগতি আপডেটগুলি পেতে পারেন।
রিচার্ড

2
আমি গুগল.কম.কম আনার চেষ্টা করেছি , তবে যা পাই তা হ'ল Start-BitsTransfer : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))। আমি হতবাক: |
jsalonen

1
@ জেসালোনেন আমি মনে করি বিআইটিএস কেবল পৃষ্ঠাগুলির পরিবর্তে ফাইল ডাউনলোড করবে। রিচার্ড যেমন বলেছিলেন এটি কিছু সার্ভার সাইড সাপোর্টের উপর নির্ভর করে (যদিও আমি এটি মাইক্রোসফ্ট নির্দিষ্ট মনে করি না)।
ম্যাথু স্টেপলস

আমি দেখতে পেয়েছি এবং আমি মনে করি আমি বিআইটিএস ব্যবহার করার দিকটি পেয়েছি, তবে আমি এখানে যা খুঁজছি তা এটি নয়।
jsalonen

6

পাওয়ারশেল ভি 4 ওয়ান-লাইনার:

(iwr http://blog.stackexchange.com/).Content >index.html`

অথবা

(iwr http://demo.mediacore.tv/files/31266.mp4).Content >video.mp4

এটি মূলত ওয়ারেনের (দুর্দান্ত) ভি 3 ওয়ান-লাইনার ( এটির জন্য ধন্যবাদ!) - এটি একটি ভি 4 পাওয়ারশেলের সাথে কাজ করার জন্য একটি সামান্য পরিবর্তন সহ।

ওয়ারেনের ওয়ান-লাইনার - যা কেবল wgetপরিবর্তে ব্যবহার করে iwr- এখনও ভি 3 এর জন্য কাজ করা উচিত (কমপক্ষে, আমার ধারণা; এটি পরীক্ষিত হয়নি, যদিও)। যাই হোক। তবে এটি কোনও ভি 4 পাওয়ারশেলের মাধ্যমে চালানোর চেষ্টা করার সময় (যেমন আমি চেষ্টা করেছি), আপনি পাওয়ারশেলটি wgetএকটি বৈধ সেমিডলেট / প্রোগ্রাম হিসাবে সমাধান করতে ব্যর্থ হতে দেখবেন ।

যারা আগ্রহী জন্য, যে - আমি থেকে কুড়ান বব এর মন্তব্য জবাবে গৃহীত উত্তর (ধন্যবাদ, মানুষ!) - কারণ PowerShell V4 থেকে, wgetএবং curlএলাইস করা হয়েছে Invoke-WebRequestএ সেট iwrডিফল্টরূপে । সুতরাং, wgetসমাধান করা যাবে না (পাশাপাশি curlএখানে কাজ করতে পারে না)


4

এখানে একটি পাওয়ারশেল ফাংশন যা ফাইল ডাউনলোড করার আগে সংক্ষিপ্ত URL গুলি সমাধান করে

function Get-FileFromUri {  
    param(  
        [parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
        [string]
        [Alias('Uri')]
        $Url,
        [parameter(Mandatory=$false, Position=1)]
        [string]
        [Alias('Folder')]
        $FolderPath
    )
    process {
        try {
            # resolve short URLs
            $req = [System.Net.HttpWebRequest]::Create($Url)
            $req.Method = "HEAD"
            $response = $req.GetResponse()
            $fUri = $response.ResponseUri
            $filename = [System.IO.Path]::GetFileName($fUri.LocalPath);
            $response.Close()
            # download file
            $destination = (Get-Item -Path ".\" -Verbose).FullName
            if ($FolderPath) { $destination = $FolderPath }
            if ($destination.EndsWith('\')) {
                $destination += $filename
            } else {
                $destination += '\' + $filename
            }
            $webclient = New-Object System.Net.webclient
            $webclient.downloadfile($fUri.AbsoluteUri, $destination)
            write-host -ForegroundColor DarkGreen "downloaded '$($fUri.AbsoluteUri)' to '$($destination)'"
        } catch {
            write-host -ForegroundColor DarkRed $_.Exception.Message
        }  
    }  
}  

বর্তমান ফোল্ডারে ফাইলটি ডাউনলোড করতে এটি ব্যবহার করুন:

Get-FileFromUri http://example.com/url/of/example/file  

অথবা একটি নির্দিষ্ট ফোল্ডারে ফাইল ডাউনলোড করতে:

Get-FileFromUri http://example.com/url/of/example/file  C:\example-folder  

2

নিম্নলিখিত ফাংশনটি একটি ইউআরএল পাবে।

function Get-URLContent ($url, $path) {
  if (!$path) {
      $path = Join-Path $pwd.Path ([URI]$url).Segments[-1]
  }
  $wc = New-Object Net.WebClient
  $wc.UseDefaultCredentials = $true
  $wc.Proxy.Credentials = $wc.Credentials
  $wc.DownloadFile($url, $path)
}

কিছু মন্তব্য:

  1. আপনি যদি কোনও প্রমাণীকরণকারী প্রক্সিটির পিছনে থাকেন তবে সর্বশেষ 4 টি লাইনগুলি প্রয়োজন। সাধারণ ব্যবহারের জন্য, (New-Object Net.WebClient).DownloadFile($url, $path)সূক্ষ্মভাবে কাজ করে।
  2. পাথ অবশ্যই নিখুঁত হতে হবে , যেহেতু ডাউনলোডটি আপনার বর্তমান ডিরেক্টরিতে করা হয়নি, তাই আপেক্ষিক পাথগুলি ডাউনলোডটি কোথাও হারিয়ে যাবে।
  3. if (!$path) {...}অধ্যায় সহজ ক্ষেত্রে যেখানে আপনি বর্তমান ডিরেক্টরির নাম URL- এ প্রদত্ত ব্যবহার করে ফাইল ডাউনলোড করতে চান পরিচালনা করে।

1

উইন্ডোজ 10 ব্যাশ শেল ব্যবহার করুন যার মধ্যে উইন্ডোজ বৈশিষ্ট্যটি সেটআপ হয়ে গেলে উইজেট অন্তর্ভুক্ত থাকে।

উইন্ডোতে কীভাবে উবুন্টু বাশ শেল ইনস্টল করবেন:

ইউটিউব: উইন্ডোতে উবুন্টুতে ব্যাশ চালানো!

লিনাক্স ডকুমেন্টেশনের জন্য উইন্ডোজ সাবসিস্টেম


1
এই লিঙ্কটি যদি কখনও মারা যায় সে ক্ষেত্রে আপনি কী বলেছেন তা সমর্থন করে এই উত্তরে কিছু উদ্ধৃত রেফারেন্স যুক্ত করার কথা বিবেচনা করুন যাতে উত্তর সামগ্রী এখনও পাওয়া যায় যা বর্তমানে আপনার পরামর্শ অনুসারে কেবলমাত্র সেই লিঙ্কের মাধ্যমে উপলভ্য।
পিম্প জুস আইটি

0

যদি আপনার উইন্ডোজ পর্যাপ্ত পরিমাণে নতুন (যেমন সংস্করণ 1809 বা আরও নতুন) থাকে তবে সেখানে একটি "আসল" কার্ল উপলব্ধ। কার্লের কমান্ড-লাইন বিকল্পটি "-O" রয়েছে (বড় অক্ষর ও; ছোট চিঠিটি একই কাজ করে না!) বিকল্প "-O", বিকল্প হিসাবে "--রেট-নাম" কার্লকে বলে যে সংরক্ষণ করা ফাইলটি পায় URL এর ফাইল-নাম অংশ হিসাবে একই নাম।

এটিকে "ইনভোক-ওয়েবরয়েস্ট" এর জন্য আলিয়াস "কার্ল" থেকে এটি সনাক্তকরণের জন্য একে "কার্ল.এক্সি" হিসাবে শুরু করা দরকার। ঘটনাচক্রে এটি কোনও পরিবর্তন ছাড়াই cmd.exe এ কাজ করে।

এখানে অন্য উত্তরের মতো একই উদাহরণ ব্যবহার করে

curl.exe -O http://demo.mediacore.tv/files/31266.mp4

(সাইটটি আমাকে এটিকে মন্তব্য হিসাবে যুক্ত করতে দেবে না, যেহেতু এর জন্য আমার সম্ভবত আরও "খ্যাতি" দরকার - তাই এটি একটি নতুন উত্তর পায়)


0

-আউটফাইলে প্যারামিটারের সাথে ওয়েব-অনুরোধটি স্ট্রিংয়ের প্রত্যাশা করে, সুতরাং যদি আপনার ফাইলের নামটি একটি নম্বর দিয়ে শুরু হয়, এবং উদ্ধৃতিতে আবদ্ধ না হয়, তবে কোনও আউটপুট ফাইল তৈরি হয় না।

যেমন। Invoke-WebRequest -Uri "http://www.google.com/" -outfile "2.pdf"

এটি কোনও অক্ষর দিয়ে শুরু হওয়া ফাইল নামগুলিকে প্রভাবিত করে না।


এই সমাধানটি অন্যান্য wgetInvoke-WebRequest
উত্তরে

উত্তরের বিষয়টি ছিল নোটকে জোর দেওয়া। সিনট্যাক্স ত্রুটির কারণে কোনও উত্তরই কোনও ফাইল তৈরি করা হয়নি।
জিম্বা

এটি অন্যান্য জবাব [গুলি]
সত্যই

এই উত্তরটি অন্য উত্তরে সরবরাহ করা হয়নি বা উপরের উত্তরটির মতো নয়।
জিম্বা

-1

কোনও ব্রাউজারের আরম্ভ করা স্টাফ পেতে আপনার পক্ষে এটি কাজ করা উচিত। "-UseBasicParsing" পরম নোট করুন।

Invoke-WebRequest http://localhost -UseBasicParsing

(1) "ব্রাউজার আরম্ভের জিনিস নেই" কী? (২) নোট করুন যে গৃহীত উত্তরটি ইতিমধ্যে উল্লেখ করেছে -UseBasicParsing
স্কট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.