पॉवरशेल बनाम यूनिक्स शेल


14

मैंने PowerShell की सुविधाओं के बारे में कुछ बातें सुनी हैं। इसमें से कुछ यूनिक्स गोले की विशिष्ट विशेषताओं की तरह लगता है।

तो ऐसा लगता है कि पॉवरशेल में शेल स्क्रिप्ट के समान पाइपिंग और कमांडलेट शामिल हैं। लेकिन मैंने इसे अभी तक (कोई विंडोज़ नहीं) आज़माया है, इसलिए मैं गलत हो सकता हूं।

तो मेरा सवाल यह है: क्या पॉवर्सशेल एक यूनिक्स शेल के समान है या अवधारणा अलग है?
यदि उत्तरार्द्ध: किन बिंदुओं में अवधारणा भिन्न है?


2
StackOverflow पर यह सवाल पहले ही पूछा जा चुका है: stackoverflow.com/questions/573623/powershell-vs-unix-shells
रिचर्ड

जवाबों:


20

PowerShell, Unix के गोले के समान सतही है। PowerShell में आपके द्वारा यूनिक्स में उपयोग की जाने वाली कई कमांड्स जैसे कि ls, rm, cp, mv, इत्यादि के लिए उपनाम हैं। हालाँकि, जिस तरह से उपनामों के पीछे cmdlets काम करते हैं वह बिल्कुल अलग है।

* निक्स शेल में, सब कुछ टेक्स्ट आधारित है, इसलिए एक कमांड से आउटपुट को दूसरे से पाइप किया जा सकता है, लेकिन प्राप्त कार्यक्रम को पता होना चाहिए कि पाइप लाइन से टेक्स्ट को पार्स / व्याख्या कैसे करें। यह PowerShell और * nix के गोले के बीच मुख्य अंतर है ... PowerShell में, जो कुछ भी पास होता है वह एक वस्तु है।

इसका परिणाम यह है कि एक कमांड से दूसरे कमांड में पाइपिंग केवल स्टडआउट को स्टड करने के लिए पाइपिंग नहीं है। यह रिसीवर के लिए एक पूर्ण .net वस्तु पाइपिंग है। इसलिए, रिसीवर को बस यह जानना होगा कि उस प्रकार के ऑब्जेक्ट को कैसे संभालना है। इसे पाठ के किसी भी पार्सिंग को लागू करने की आवश्यकता नहीं है, लेकिन यह समझने की आवश्यकता है कि इनपुट ऑब्जेक्ट के तरीकों और गुणों (सदस्यों) को कैसे कॉल किया जाए।

* Nix कमांड लाइन प्रोग्राम में, आप कोड लिखेंगे जो स्टड से पढ़ता है और उत्पन्न पाठ से इसकी जानकारी को पार्स करता है। PowerShell में, आप ऐसा कुछ करेंगे:

function changeName($myObject)
{
    if ($myObject.GetType() -eq [MyType])
    {
        #print the current name to screen
        $myObject.Name
        #change string in the 'name' property
        $myObject.Name = "NewName"
    }
    return $myObject
}

इस कोड को कमांड लाइन पर कॉल करने पर ऐसा लग सकता है:

PS> $myObject = New-Object MyType -arg "OriginalName"
PS> $myObject = changeName $myNewObject
OriginalName
PS> $myObject.Name
NewName

आप पाइपिंग तंत्र का उपयोग करते हुए ऊपर भी ऐसा ही कर सकते हैं, लेकिन आप यहां प्रमुख अंतर देख सकते हैं कि हम एक वस्तु को पारित कर रहे हैं और न कि:

PS> $myObject = New-Object MyType -arg "OriginalName" | changeName
OriginalName
PS> $myObject.Name
NewName

इस बड़े अंतर को भूलकर, मैं कहूंगा कि अन्य सतही समानताएं हैं, लेकिन ज्यादातर सिर्फ वाक्यात्मक हैं। लगता है कि PowerShell सिंटैक्स को * nix शेल यूजर्स को ध्यान में रखकर बनाया गया है, इसलिए बहुत सारी भाषा शैली समान है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.