क्या Windows पर मेरे Cygwin शेल को बदलने के लिए PowerShell तैयार है? [बन्द है]


384

मैं बहस कर रहा हूं कि क्या मुझे PowerShell सीखना चाहिए, या सिगविन / पर्ल स्क्रिप्ट / यूनिक्स शेल स्क्रिप्ट आदि के साथ रहना चाहिए ।

PowerShell का लाभ यह होगा कि लिपियों को आसानी से उन टीममेट्स द्वारा उपयोग किया जा सकता है जिनके पास Cygwin नहीं है; हालाँकि, मुझे नहीं पता कि क्या मैं वास्तव में लिखूंगा कि कई सामान्य उद्देश्य स्क्रिप्ट, या यदि लोग उनका उपयोग भी करेंगे।

यूनिक्स स्क्रिप्टिंग इतना शक्तिशाली है, क्या पावरशेल के पास स्विचिंग वारंट पर काफी करीब आता है?

यहाँ कुछ विशेष बातें (या समतुल्य) हैं जो मैं PowerShell में देख रहा हूँ:

  • ग्रेप
  • तरह
  • uniq
  • पर्ल (PowerShell पर्ल के क्षमताओं के कितने करीब आता है?)
  • AWK
  • sed
  • फ़ाइल (कमांड जो फ़ाइल जानकारी देती है)
  • आदि।

7
मैं यह नहीं कहूंगा कि, मुझे पॉवरशेल लेने में दिलचस्पी थी, इस पृष्ठ को पाया, और अब मुझे पता है कि पीएस और शेल स्क्रिप्टिंग के बीच के सामान्य अंतर जो मैं उपयोग करता हूं।
सबसे महान

5
HN लिंक सबमिशन में यह पोस्ट अचानक राख से उठ गई। अच्छा कार्य। और यह रचनात्मक नहीं के रूप में बंद करने के लिए @Bobby के लिए बुरा है।
सिड

26
यदि कोई यह नहीं पूछ सकता है कि एक उपकरण दूसरे के कार्यों को कितनी अच्छी तरह दोहराता है, तो SO टूल तुलना प्रश्नों का उत्तर नहीं दे सकता है। यह ध्यान से विवाद से बचने के लिए है, लेकिन लापरवाह "विवादास्पद" को यूनिक्स बनाम विंडोज प्रश्न की तरह देखने के लिए कहा गया है। और यह एक तथ्यात्मक, उद्देश्यपूर्ण उत्तर मिला, अतिरिक्त तथ्यात्मक अंतर्दृष्टि के साथ कि विंडोज पर यूनिक्स स्क्रिप्टिंग कितना उपयोगी हो सकता है।
चेरनविक

16
यह फिर से बंद क्यों है? किसी को "विंडोज़ बनाम यूनिक्स के रूप में व्यवहार करने" से दूर ट्रोल्स को चलाने के लिए "पॉवरशेल बनाम यूनिक्स गोले विंडोज प्लेटफॉर्म पर" कहने के लिए शीर्षक संपादित करें। यह एक पूरी तरह से रचनात्मक सवाल है - फिर से खोलने के लिए मतदान किया गया।
x0n

3
ऑप उपकरण के साथ खोल मिला रहा है। PowerShell का उपयोग है। लेकिन GNU, UNIX माल को विंडोज सहित अन्य OS में स्वतंत्र रूप से लाने का एक प्रोजेक्ट है। सूची ऑप में हर चीज विंडोज में एक गनु कार्यान्वयन है। GnuWin32 या अलग-अलग साइटों से सुलभ। विंडोज बैट बेकार नहीं है, इसमें पुनर्निर्देशन और पाइप और स्थितियां हैं।
मेककुलपा

जवाबों:


783

उपकरण सिर्फ उपकरण हैं।
वे मदद करते हैं या वे नहीं करते हैं।
आपको मदद चाहिए या आप नहीं।

यदि आप यूनिक्स और उन उपकरणों को जानते हैं जो आपको विंडोज पर करने के लिए उनकी आवश्यकता है - तो आप एक खुश आदमी हैं और PowerShell सीखने की आवश्यकता नहीं है (जब तक कि आप अन्वेषण नहीं करना चाहते हैं)।

मेरा मूल इरादा विंडोज में यूनिक्स उपकरणों के एक सेट को शामिल करना था और इसके साथ किया जाना था (टीम में हम में से कई के पास गहरी यूनिक्स पृष्ठभूमि है और उस समुदाय के लिए सम्मान की एक स्वस्थ खुराक है।)

मैंने पाया कि यह वास्तव में बहुत मदद नहीं करता था। इसका कारण यह है कि AWK / grep / sed कॉम के खिलाफ काम नहीं करता है , WMI , ADSI , रजिस्ट्री, सर्टिफिकेट स्टोर, इत्यादि के ।

दूसरे शब्दों में, UNIX एक संपूर्ण पारिस्थितिकी तंत्र है जो पाठ फ़ाइलों के चारों ओर स्व-ट्यून है। जैसे, टेक्स्ट प्रोसेसिंग टूल प्रभावी रूप से प्रबंधन उपकरण हैं। विंडोज एपीआई और वस्तुओं के चारों ओर एक पूरी तरह से अलग पारिस्थितिकी तंत्र है। इसलिए हमने पॉवरशेल का आविष्कार किया।

मुझे लगता है कि आप पाएंगे कि बहुत सारे मौके होंगे जब टेक्स्ट-प्रोसेसिंग आपको वह नहीं मिलेगा जो आप विंडोज पर चाहते हैं। उस बिंदु पर, आप PowerShell को चुनना चाहेंगे। नोट - यह सब या कुछ भी सौदा नहीं है। PowerShell के भीतर, आप अपने यूनिक्स टूल से कॉल कर सकते हैं (और उनकी पाठ प्रक्रिया या PowerShell के टेक्स्ट प्रोसेसिंग का उपयोग कर सकते हैं)। इसके अलावा आप अपने Unix टूल्स से PowerShell को कॉल कर सकते हैं और टेक्स्ट प्राप्त कर सकते हैं।

फिर से - यहां कोई धर्म नहीं है - हमारा ध्यान आपको उन उपकरणों को देने पर है जिन्हें आपको सफल होने की आवश्यकता है। यही कारण है कि हम प्रतिक्रिया के बारे में इतने भावुक हैं। हमें बताएं कि हम नौकरी पर कहां गिर रहे हैं या आपके पास कोई उपकरण नहीं है जिसकी आपको आवश्यकता है और हम इसे सूची में डाल देंगे और इसे प्राप्त कर लेंगे।

सभी ईमानदारी में, हम 30 साल के छेद से खुद को खोद रहे हैं, इसलिए इसमें कुछ समय लगने वाला है। उस ने कहा, अगर आप Windows Server 2008 का बीटा उठाते हैं / आर 2 और / या हमारे सर्वर उत्पादों के बीटस के बीटा को चुना है, तो मुझे लगता है कि आपको लगता है कि कितनी जल्दी यह छेद भर जाएगा।

उपयोग के संबंध में - हमारे पास अब तक 3.5 मिलियन डाउनलोड हैं। यह विंडोज सर्वर 2008 में इसका उपयोग करने वाले लोगों को शामिल नहीं करता है, क्योंकि यह एक वैकल्पिक घटक के रूप में शामिल है और इसे डाउनलोड की आवश्यकता नहीं है।

V2 विंडोज के सभी संस्करणों में जहाज जाएगा। यह सर्वर कोर को छोड़कर सभी संस्करणों के लिए डिफ़ॉल्ट रूप से डिफ़ॉल्ट होगा जहां यह एक वैकल्पिक घटक है। विंडोज 7 / विंडोज सर्वर 2008 R2 जहाजों के कुछ समय बाद, हम V2 को सभी प्लेटफार्मों, विंडोज एक्सपी और इसके बाद के संस्करण पर उपलब्ध कराएंगे। दूसरे शब्दों में - सीखने में आपका निवेश बहुत बड़ी संख्या में मशीनों / वातावरण पर लागू होगा।

एक आखिरी टिप्पणी। अगर / जब आप PowerShell सीखना शुरू करते हैं, तो मुझे लगता है कि आप बहुत खुश होंगे। डिजाइन का अधिकांश हिस्सा हमारे यूनिक्स बैकग्राउंड से बहुत प्रभावित होता है, इसलिए जब हम काफी अलग होते हैं, तो आप इसे बहुत तेज़ी से उठाएँगे (आपके द्वारा यह बताने पर कि यह यूनिक्स नहीं है)।

हम जानते हैं कि लोगों के पास सीखने के लिए बहुत सीमित बजट है - यही कारण है कि हम निरंतरता के बारे में सुपर हार्ड-कोर हैं। आप कुछ सीखने जा रहे हैं, और फिर आप इसे बार-बार उपयोग करेंगे।

प्रयोग! का आनंद लें! संलग्न!


11
आपके उत्तर के लिए धन्यवाद। मुझे लगता है कि मैं आगे बढ़कर पॉवरशेल सीखने जा रहा हूं। जो मैंने अभी तक देखा है उससे यह शक्तिशाली लगता है, और मैं काम पर इसके साथ अधिक उपयोगी स्क्रिप्ट लिखने में सक्षम हो जाऊंगा।
एंडी व्हाइट

55
@ जेफ्री: विंडोज के लिए बेहतर टर्मिनल के लिए एक मौका है? पॉवरशेल एक शक्तिशाली स्क्रिप्टिंग भाषा है, लेकिन यह cmd.exe में चलने वाला तथ्य इंटरैक्टिव मोड में इसे और अधिक सुविधाजनक बनाता है
जेक

47
यह "रचनात्मक नहीं" सवाल उत्पन्न करता है सबसे अच्छा अंतर्दृष्टि जो मैंने पूरे में देखा है "यूनिक्स पर सब कुछ एक फाइल है" मंत्र, और क्यों विंडोज अलग है। शायद StackOverflow बेहतर होगा रचनात्मक चर्चा बंद नहीं सेवा ?
चेरनविक

12
@sumek - कॉनम्यू को आज़माएं; मैं कुछ हफ्तों से इसका इस्तेमाल कर रहा हूं और यह बहुत प्यारी है: hanselman.com/blog/…
EZ Hart

4
हेड अप: पॉवरशेल बाइनरी डेटा को पाइप करना पसंद नहीं करता है। इसलिए सावधान रहें जब आप अपने भरोसेमंद यूनिक्स टूल को कॉल कर रहे हैं, तो tar -c . | gzip > package.tar.gz सीधे पावरस्ले में सामान न करें , या आपको नुकसान होगा। देखें brianreiter.org/2010/01/29/…
Interarticle

123

ग्रेप

Select-Stringcmdlet और -matchऑपरेटर regexes के साथ काम करते हैं। इसके अलावा, आप सीधे अधिक उन्नत कार्यक्षमता के लिए .NET के रेगेक्स समर्थन का उपयोग कर सकते हैं।

तरह

Sort-Objectअधिक शक्तिशाली है (जैसा कि मुझे याद है * निक्स sort)। मनमाने भावों पर बहु-स्तरीय छंटनी। यहां PowerShell के अंतर्निहित प्रकार के रखरखाव में मदद मिलती है; उदाहरण के लिए, एक DateTimeसंपत्ति को एक छांटे DateTimeहुए प्रारूप में प्रारूपण सुनिश्चित करने के लिए बिना छंटनी की जाएगी।

uniq

Select-Object -Unique

पर्ल (पॉवर क्षमताओं के लिए पॉवरशेल कितना करीब आता है?)

डोमेन विशिष्ट समर्थन पुस्तकालयों के पर्ल की चौड़ाई के संदर्भ में: कहीं नहीं (अभी तक) करीब।

सामान्य प्रोग्रामिंग के लिए, PowerShell निश्चित रूप से अधिक सुसंगत और सुसंगत है, और विस्तार करने में आसान है। टेक्स्ट मुंगिंग के लिए एक अंतर पर्ल के ..ऑपरेटर के बराबर है ।

AWK

AWK का उपयोग करने के बाद यह काफी लंबा हो गया है (18 साल होना चाहिए, क्योंकि बाद में मैंने सिर्फ पर्ल का इस्तेमाल किया), इसलिए वास्तव में टिप्पणी नहीं कर सकता।

sed

[ऊपर देखो]

फ़ाइल (कमांड जो फ़ाइल जानकारी देती है)

यहाँ PowerShell की ताकत फाइलसिस्टम ऑब्जेक्ट्स के साथ क्या कर सकती है, इसकी बहुत अधिक जानकारी नहीं है (और यह पूरी जानकारी यहाँ मिलती है, dirरिटर्न FileInfoया FolderInfoऑब्जेक्ट्स उपयुक्त है) वह है पूरा प्रदाता मॉडल।

आप रजिस्ट्री, प्रमाणपत्र स्टोर, SQL सर्वर, इंटरनेट एक्सप्लोरर के RSS कैश इत्यादि को समान सिस्टम के रूप में एक ही cmdlets द्वारा फाइल सिस्टम के रूप में व्यवहार कर सकते हैं।


PowerShell निश्चित रूप से विंडोज पर आगे का रास्ता है। Microsoft ने इसे भविष्य के गैर-घरेलू उत्पादों के लिए अपनी आवश्यकताओं का हिस्सा बनाया है। इसलिए एक्सचेंज में समृद्ध समर्थन, SQL सर्वर में समर्थन। यह केवल विस्तार करने जा रहा है।

इसका एक ताजा उदाहरण TFS पॉवरटॉयस है। कई बार TFS क्लायंट के संचालन के बिना कई TFS क्लाइंट ऑपरेशन किए जाते हैं (जिसमें नए TFS सर्वर कनेक्शन आदि की आवश्यकता होती है) और इसके बाद डेटा को आगे प्रोसेस करना आसान नहीं होता। साथ ही पूरे टीएफएस क्लाइंट एपीआई तक विस्तृत पहुंच की अनुमति देकर TF.exe के टीम एक्सप्लोरर में उजागर किया गया है।


2
बात यह है कि प्रदाता मॉडल केवल दिलचस्प है क्योंकि ओएस पाठ को अपने सार्वभौमिक कॉन्फ़िगरेशन माध्यम के रूप में उपयोग नहीं करता है, इसलिए आपने इन प्रदाताओं की आवश्यकता है। UNIX के साथ अधिकांश भाषाओं में PAM, होस्ट और पैकेज को छूने के लिए API हैं, लेकिन अंततः टेक्स्ट हमेशा रहेगा।
दिनमान

12
पाठ हमेशा सब कुछ के लिए सबसे अच्छा प्रारूप नहीं है (डेटाबेस और रेखापुंज छवियों के साथ शुरू)। लेकिन मुझे लगता है कि हम खुले प्रारूप के युद्धों के बजाय असहमत होने के लिए सहमत हो सकते हैं।
रिचर्ड

5
Powershell .NET फ्रेमवर्क में किसी भी ऑब्जेक्ट का उपयोग कर सकता है, क्या यह पर्ल की डोमेन क्षमताओं से मेल नहीं खाता है? साथ ही आप सी # आदि में cmdlets लिख सकते हैं यदि आप पुन: प्रयोज्य चाहते हैं
क्रिस एस

बिंदु तुलना द्वारा बिंदु। अच्छा है। यह स्वीकृत उत्तर होना चाहिए। PowerShell की ताकत इसकी .NET नींव में निहित है और आप कितनी आसानी से नई Cmdlets लिखकर या कक्षा पुस्तकालयों को कॉल करके सिस्टम का विस्तार कर सकते हैं
Sau001

सेड का एक विशिष्ट उपयोग (मुझे लगता है) होगा:, sed 's/pattern/replacement/' fileजो मोटे तौर पर है gc file | %{$_ -replace 'pattern','replacement'}, और इसी तरह जाग के लिए: awk 'BEGIN {} /pat1/ {action1} /pat2/ {action2} END {}' fileमोटे तौर पर{BEGIN {}; switch -r -c -file file { 'pat1' {action1} 'pat2' {action2}}; END{};}
नाथन चैपल

56

1997 से 2010 तक विंडोज करियर डेवलपमेंट पर ध्यान केंद्रित करने वाले किसी व्यक्ति के रूप में, स्पष्ट उत्तर पहले दिए गए सभी अच्छे कारणों के लिए पॉवरशेल होगा (जैसे, यह माइक्रोसॉफ्ट की उद्यम रणनीति का हिस्सा है; यह विंडोज / COM / .NET के साथ अच्छी तरह से एकीकृत होता है; फ़ाइलों के बजाय वस्तुओं का उपयोग करना एक "अमीर" कोडिंग मॉडल के लिए प्रदान करता है)। उस कारण से मैं पिछले दो वर्षों से PowerShell का उपयोग और प्रचार कर रहा हूं, इस विश्वास के साथ कि मैं "वर्ड ऑफ बिल" का पालन कर रहा हूं।

हालाँकि, एक व्यावहारिक के रूप में मुझे अब यकीन नहीं है कि PowerShell इतना बढ़िया उत्तर है। हालांकि यह एक उत्कृष्ट विंडोज टूल है और विंडो कमांड लाइन के ऐतिहासिक छेद को भरने की दिशा में बहुत आवश्यक कदम प्रदान करता है, जैसा कि हम सभी देखते हैं कि उपभोक्ता कंप्यूटिंग स्लिप पर माइक्रोसॉफ्ट की पकड़ बढ़ती जा रही है, ऐसा लगता है कि माइक्रोसॉफ्ट के पास अपने ओएस को रखने के लिए आगे एक बड़ी लड़ाई है। भविष्य के उद्यम के लिए महत्वपूर्ण है।

वास्तव में, मुझे लगता है कि मेरा काम विषम वातावरण में तेजी से बढ़ रहा है, मुझे इस समय बैश स्क्रिप्ट का उपयोग करना अधिक उपयोगी लग रहा है, क्योंकि वे न केवल लिनक्स, सोलारिस और मैक ओएस एक्स पर काम करते हैं, बल्कि वे काम भी करते हैं - विंडोज पर Cygwin- की मदद।

इसलिए यदि आप इस विश्वास में खरीदते हैं कि ओएस का भविष्य एकाधिकार के बजाय कमोडिटाइज़्ड है, तो यह एक फुर्तीले विकास उपकरण की रणनीति का चयन करने के लिए समझ में आता है जो स्वामित्व वाले उपकरणों से दूर रहता है जहां संभव है। हालांकि अगर आप अपने भविष्य को ऑल-द-रेडमंड पर हावी होते हुए देखते हैं तो पावरशेल के लिए जाएं।


1
क्या बिना किसी त्रुटि के सिक्स-विंडोज पर यूनिक्स स्क्रिप्ट पूरी तरह से काम करती है?
पचेरियर

@Pacerier मैं 12 साल से Cygwin और MinGW का उपयोग कर रहा हूं, और आश्चर्यजनक रूप से समस्याएं बहुत कम थीं। महत्वपूर्ण बात यह है कि अगर कुछ काम नहीं करता है, तो विंडोज टूल्स पर वापस गिरना हमेशा संभव है, या कुछ भी - प्रक्रियाएं उसी तरह से शुरू की जा सकती हैं जैसे कोई अन्य शेल उन्हें शुरू करता है।
एवगेनी सर्गेव

4
ठीक है, आपका जवाब 2011 से है। आज शक्तियां लिनक्स पर भी चलती हैं। और - मेरी व्यक्तिगत राय - मार बहुत प्राचीन है। वाक्यविन्यास भयानक है और मैं एक अलग स्क्रिप्टिंग भाषा का उपयोग करूंगा। आजकल अधिकांश लियोन डिस्ट्रोस पर अजगर के मानक होने के कारण मुझे स्क्रिप्ट के लिए बैश का उपयोग करने का कोई कारण नहीं दिखता है। मैं आपको सलाह
दूंगा कि आप शक्तियां


33

मैंने स्क्रिप्ट स्वचालन के लिए पावरशेल का थोड़ा उपयोग किया है। हालांकि यह बहुत अच्छा है कि पर्यावरण को यूनिक्स गोले की तुलना में बहुत अधिक सोचा गया है, व्यवहार में पाठ धाराओं के बजाय वस्तुओं का उपयोग अधिक क्लिंकी है, और यूनिक्स की बहुत सारी सुविधाएं जो पिछले 30 में विकसित हुई हैं साल अभी भी गायब हैं।

Cygwin अभी भी विंडोज मेजबानों के लिए मेरी स्क्रिप्टिंग का विकल्प है। यह निश्चित रूप से चीजों को प्राप्त करने के संदर्भ में विकल्पों की धड़कन करता है।


27
वस्तुओं का उपयोग करना एक प्रतिमान बदलाव है और कुछ को इसकी आदत होती है। लेकिन प्रत्येक चरण में पूरे पुन: पार्सिंग से बचा जाता है जहां संरचित डेटा शामिल है (उदाहरण के लिए फ़ील्ड को सीमांकित करने की आवश्यकता नहीं है)।
रिचर्ड

16
@Andy White @Daishiman, मैं समझ सकता हूं कि पावरशेल के साथ सीखने की अवस्था कहां है, लेकिन पाइपिंग ऑब्जेक्ट्स पाइपिंग टेक्स्ट की तुलना में बहुत अधिक लचीले हो सकते हैं। @ रीचर्ड सही है। :)
स्टीवन मुरावस्की

18
ऑटो मेकर्स को 1000+ साल के घोड़ों के साथ भी बहस करने में मुश्किल हुई। मैं फ्लिप करने की कोशिश नहीं कर रहा हूं। बस यह बताते हुए कि पिछली सफलता नवाचार के संभावित लाभ को नहीं हटाती है।
ईबीग्रीन

12
@daishiman - वस्तुओं का लाभ यह है कि जब आप एक संपत्ति चाहते हैं, तो आप इसके लिए पूछते हैं - आपको पार्स, अनुमान, कास्ट करने की आवश्यकता नहीं है। मुझे आपकी बात समझ में नहीं आई "क्या होता है जब वस्तुओं के पास संगत विधियां नहीं होती हैं" - क्या आप कह सकते हैं कि कोई अन्य तरीका या समस्या का उदाहरण दे सकता है? धन्यवाद।
जेफरी स्नोवर - एमएसएफटी

13
@ दाशिमन - मैं समझता हूं। व्यवहार में लोगों ने इसे एक समस्या नहीं बल्कि एक बड़ा लाभ पाया है। उस ने कहा, मैं देख सकता हूं कि यदि आप एक विशेषज्ञ पाठ पार्सर थे, तो यह सीखने के लिए एक नया कौशल होगा और यह पहली बार में अनावश्यक और अजीब महसूस कर सकता है। फिर से - जो भी मदद करता है वह सही उपकरण है।
जेफरी स्नोवर - MSFT

15

यहाँ बहुत सारे शानदार जवाब हैं, और यहाँ मेरा लेना है। यदि आप कर रहे हैं ... PowerShell तैयार है ...

grep = " सेलेक्ट-स्ट्रिंग-पैटर्न "

सॉर्ट = "सॉर्ट-ऑब्जेक्ट"

यूनीक = " गेट-यूनिक "

फ़ाइल = " गेट-आइटम "

बिल्ली = " गेट-कंटेंट "

पर्ल / एडब्ल्यूके / सेड कमांड नहीं हैं, लेकिन उपयोगिताओं की तुलना करना कठिन है, लेकिन आप पावरशेल में लगभग सब कुछ कर सकते हैं।


2
क्या आप विश्वास कर सकते हैं कि हमारे पूर्वजों को जिन चार-अक्षर वाले आदेशों का उपयोग करने के लिए मजबूर किया गया था?
इवगेनी सर्गेव

4
@EvgeniSergeev उपरोक्त सभी के रूप में डिफ़ॉल्ट रूप से उपलब्ध हैं sls, sort, gu, gi, gc, क्रमशः। लंबे पठनीय नाम जो एक सिस्टम में टैब-पूर्ण और संक्षिप्त प्रकार-सक्षम नाम हैं। यह आपके लिए उपयोगकर्ता के अनुकूल प्रगति है।
TessellatingHeckler

इसके लिए एलियास में से एक Get-Contentहै cat, इसलिए इसके लिए सिग्विन / यूनिक्स और पावरशेल के बीच कोई अंतर नहीं है। दुर्भाग्य से, ज्यादातर मामलों में, cmdlets के लिए Microsoft के प्रलेखन में उपनामों के बारे में जानकारी का अभाव है, लेकिन सभी उपनामों की एक सूचीGet-Alias PowerShell सत्र में उपयोग करके आउटपुट है । "गेट-यूनिक" के लिए उपनाम "गु" है, जो कि साइगविन / यूनिक्स एक से कम है!
पीटर मोर्टेंसन

13

मैंने अभी हाल ही में किसी भी गंभीरता के साथ पावरशेल में डबिंग शुरू की है। यद्यपि पिछले सात वर्षों से मैंने लगभग विशेष रूप से विंडोज-आधारित वातावरण में काम किया है, मैं एक यूनिक्स पृष्ठभूमि से आता हूं और खुद को विंडोज पर "यूनिक्स-फी" मेरे इंटरैक्शन अनुभव को लगातार कोशिश कर रहा हूं। यह कम से कम कहने के लिए निराशाजनक है।

ऐसा लगता है कि कुछ करने के लिए PowerShell तुलना करने के लिए केवल उचित है बैश , tcsh , या zsh तरह उपयोगिताओं के बाद से ग्रेप , sed , awk , लगता है , आदि नहीं हैं, सख्ती से बोल, खोल के भाग; हालांकि, वे हमेशा किसी भी यूनिक्स वातावरण का हिस्सा होंगे। उस ने कहा, Select- String जैसे एक PowerShell कमांड का grep के समान कार्य है और इसे PowerShell में एक मुख्य मॉड्यूल के रूप में बांधा गया है ... इसलिए लाइनें थोड़ी धुंधली हो सकती हैं।

मुझे लगता है कि महत्वपूर्ण बात संस्कृति है , और तथ्य यह है कि संबंधित उपकरण-सेट उनकी संबंधित संस्कृतियों को मूर्त रूप देंगे:

  • यूनिक्स एक है फाइल-आधारित है , (सामान्य रूप से, गैर-यूनिकोड) पाठ-आधारित संस्कृति। कॉन्फ़िगरेशन फ़ाइलें लगभग अनन्य रूप से पाठ फ़ाइलें हैं। दूसरी ओर, विंडोज हमेशा कॉन्फ़िगरेशन प्रारूपों के संबंध में अधिक संरचित रहा है - कॉन्फ़िगरेशन आमतौर पर मालिकाना डेटाबेस (जैसे, विंडोज रजिस्ट्री) में रखे जाते हैं जिनके प्रबंधन के लिए विशेष उपकरण की आवश्यकता होती है।
  • यूनिक्स प्रशासनिक (और, कई वर्षों के लिए, विकास) इंटरफ़ेस परंपरागत रूप से कमांड लाइन और वर्चुअल टर्मिनल रहा है। Windows ने GUI के रूप में शुरू किया और प्रशासनिक कार्यों ने हाल ही में विशेष रूप से GUI- आधारित होने से दूर जाना शुरू कर दिया है । हम कमांड लाइन पर यूनिक्स के अनुभव को अधिक समृद्ध होने की उम्मीद कर सकते हैं, अधिक परिपक्व ने पावरशेल पर महत्वपूर्ण बढ़त दी है, और मेरा अनुभव इससे मेल खाता है। इस पर, मेरे अनुभव में:

    • यूनिक्स प्रशासनिक अनुभव को कम से कम महत्वपूर्ण स्ट्रोक में चीजों को आसान बनाने की दिशा में सक्षम है; यह संभवतः 9600 बॉड डायल-अप कनेक्शन पर एक सर्वर को संचालित करने की ऐतिहासिक स्थिति के परिणामस्वरूप है। अब पॉवरशेल में एलियसेस होते हैं जो क्रिया के बजाय वर्ब-नाउन मानक के आसपास जाने के लिए एक लंबा रास्ता तय करते हैं , लेकिन उन एलियासेस को जानना थोड़ा दर्द होता है (किसी को कुछ बेहतर पता है alias | where {$_.ResolvedCommandName -eq "<command>"}:?)।

      समृद्ध तरीके का एक उदाहरण जिसमें इतिहास में हेरफेर किया जा सकता है:

      iptablesकमांड अक्सर लंबे समय तक घुमावदार होते हैं और थोड़े अंतर के साथ उन्हें दोहराना एक दर्द होगा यदि यह बैश में निर्मित इतिहास हेरफेर की कई साफ-सुथरी विशेषताओं में से एक के लिए नहीं था , इसलिए निम्नलिखित की तरह एक iptables नियम सम्मिलित करें:

      iptables -I camera-1-internet -s 192.168.0.50 -m state --state NEW -j ACCEPT

      दूसरे कैमरे के लिए दूसरी बार (" camera-2") जारी करने का सिर्फ एक मामला है:

      !!:s/-1-/-2-/:s/50/51

      जिसका अर्थ है "पिछले कमांड को निष्पादित करें, लेकिन इसके -1-साथ -2-और उसके स्थान 50पर 51

    • यूनिक्स का अनुभव स्पर्श-टाइपिस्टों के लिए अनुकूलित है; एक बहुत "घर" स्थिति छोड़ने के बिना सब कुछ कर सकता है। उदाहरण के लिए, बैश में , Emacs कुंजी बाइंडिंग (हाँ, बैश भी vi बाइंडिंग का समर्थन करता है ) का उपयोग करते हुए, इतिहास के माध्यम से साइकलिंग का उपयोग किया जाता है Ctrl-Pऔर Ctrl-Nएक लाइन के प्रारंभ और अंत तक चलते हुए उपयोग किया जाता है Ctrl-AऔरCtrl-E क्रमश: ... और यह निश्चित रूप से वहाँ खत्म नहीं होता है। PowerShell कंसोल में नेविगेशन के सबसे सरल तरीके को भी घर की स्थिति से स्थानांतरित किए बिना आज़माएं और आप मुश्किल में हैं।

    • यूनिक्स पर बहुमुखी पेजिंग (एक ला कम ) जैसी सरल चीजें पॉवरशेल में आउट-ऑफ-द-बॉक्स उपलब्ध नहीं लगती हैं, जो थोड़ा निराशाजनक है, और एक समृद्ध संपादक अनुभव भी मौजूद नहीं है। बेशक, कोई हमेशा थर्ड-पार्टी टूल डाउनलोड कर सकता है जो उन अंतरालों को भर देगा, लेकिन यह सुनिश्चित करना अच्छा होगा यदि ये चीजें बस "वहां" थीं जैसे वे यूनिक्स के किसी भी स्वाद पर हैं।
  • कम से कम सिस्टम एपीआई के संदर्भ में विंडोज संस्कृति, बड़े पैमाने पर सहायक फ्रेमवर्क द्वारा संचालित है, अर्थात। COM और .NET जो कि बहुत संरचित और वस्तु-आधारित हैं। दूसरी ओर, यूनिक्स एपीआई तक पहुंच परंपरागत रूप से एक फ़ाइल इंटरफ़ेस ( /devऔर /proc) या (गैर-ऑब्जेक्ट-ओरिएंटेड) सी-स्टाइल लाइब्रेरी कॉल के माध्यम से हुई है। यह कोई आश्चर्य की बात नहीं है कि पटकथा के अनुभव उनके संबंधित ओएस प्रतिमानों से मेल खाते हैं। PowerShell प्रकृति द्वारा संरचित (सब कुछ एक वस्तु है) और बैश -और-मित्र फ़ाइल-आधारित है। PowerShell प्रोग्रामर के निपटान में संरचित API विशाल है (अनिवार्य रूप से मानक COM और .NET इंटरफेस के मौजूदा सेट की विशालता से मेल खाता है)।

संक्षेप में, हालाँकि PowerShell की स्क्रिप्टिंग क्षमता यकीनन से अधिक शक्तिशाली है बैश की (विशेषकर जब आप .NET बीसीएल की उपलब्धता पर विचार करते हैं ), तो इंटरएक्टिव अनुभव काफी कमजोर होता है, खासकर यदि आप इसे पूरी तरह से कीबोर्ड से संचालित कर रहे हैं , कंसोल-आधारित परिप्रेक्ष्य (जितने यूनिक्स-हेड हैं)।


आप पूछते हैं "किसी को इससे बेहतर कुछ पता है: उपनाम। जहां {$ _।। ResolveCommandName -eq" <कमांड> "}?"। कैसे के बारे में सिर्फ alias -Definition *property(या किसी अन्य पैटर्न)? मुझे लगता है कि आपके उत्तर के साथ समस्या यह है कि आप शेल और कंसोल को भ्रमित कर रहे हैं: याद रखें कि आपके पास विभिन्न संपादन विकल्पों के साथ कंसोल का विकल्प है। उन्होंने जानबूझकर डॉस कंसोल एडिटिंग को तोड़ दिया ताकि लोग आईएसई जैसे अन्य कंसोल का उपयोग करने के लिए प्रोत्साहित हो सकें।
डंकन

BTW, आपका !!उदाहरण Powershell में लिखा जा सकता है, (h -c 1) -replace '-1-','-2-' -replace '50','51' | iexलेकिन यह एक ही कमांड के लिए तीर को ऊपर और संपादित करना आसान है। यदि आप इसे बहुत सारी आज्ञाओं में करना चाहते हैं तो मुझे लगता है कि पॉवर्सहेल जीत जाएगा। अपने संपादन के साथ कमांड # 255 पर समाप्त होने वाले 10 आदेशों को दोहराने के लिए: (h -c 10 -id 255) -replace '-1-','-2-' -replace '50','51' | iexइसके अलावा पॉवर्सशेल का इतिहास आपको लिनक्स डिस्क में अनसुनी चीजें करने देता है; अगर आप आश्चर्यचकित हो जाते हैं कि सिर्फ एक कमांड को चलाने में कितना समय लगता है:h -id 20 | select { $_.EndExecutionTime - $_.StartExecutionTime }
डंकन

@ डंकन आपकी टिप्पणी के संदर्भ में शेल और कंसोल को फिर से कहता है - मुझे लगता है कि यह बैश और पीएस के बीच एक मौलिक अंतर है; वह है: बैश एक निश्चित इंटरैक्टिव अनुभव देने की उम्मीद करता है जबकि पीएस "छोड़ता है" जो कि कुछ और है। मेरे पास ISE कंसोल के साथ बहुत अधिक अनुभव नहीं है, लेकिन जब से मैं याद रख सकता हूं, तो इसके पास जबरदस्त समृद्ध इंटरैक्टिव अनुभव भी नहीं है।
एरिक स्मिथ

@ डंकन, हाँ - पीएस की क्षमता के बारे में अच्छी बात चतुर इतिहास चाल के संबंध में देने के लिए।
एरिक स्मिथ

@ डंकन ... लेकिन आपके दावे के बावजूद कि कुछ चीजें लिनक्स गोले में अनसुनी हैं:fc -e "sed -i -e 's/-1-/-2-/g' -e 's/50/51/g'" 10 255
एरिक स्मिथ

8

मैं किसी भी तरह से एक बहुत अनुभवी PowerShell उपयोगकर्ता नहीं हूं, लेकिन इस बात का थोड़ा सा कि मुझे बहुत प्रभावित किया गया था। आप बिल्ट-इन cmdlets को एक साथ कुछ भी करने के लिए चेन कर सकते हैं, जो आप यूनिक्स प्रॉम्प्ट पर कर सकते हैं, और CSV, HTML टेबल, और अधिक इन-डेप्थ सिस्टम एडमिनिस्ट्रेशन जॉब्स के लिए निर्यात करने जैसी चीजों के लिए कुछ अतिरिक्त अच्छाई है। ।

और अगर आपको वास्तव में sed जैसी कोई चीज़ चाहिए , तो हमेशा UnixUtils या GnuWin32 है , जिसे आप साथ काफी आसानी से एकीकृत कर सकते हैं।

लंबे समय तक यूनिक्स उपयोगकर्ता के रूप में, मुझे कमांड नामकरण योजना के लिए उपयोग करने में थोड़ी परेशानी हुई, और मुझे निश्चित रूप से अधिक लाभ होगा यदि मैं अधिक .NET जानता था।

इसलिए अनिवार्य रूप से, मैं कहता हूं कि यह सीखने लायक है अगर इसमें विंडोज-केवल-नेस की समस्या न हो।


1
एक खुला स्रोत प्रोजेक्ट "पश" है जो आपको मोनो के माध्यम से अन्य प्लेटफार्मों पर पावरशेल चलाने की सुविधा देता है। smallurl.com/6dyoso
जॉन डी। कुक

वाह! पारितोषिक के लिए धन्यवाद; मैं इसे एक कोशिश देने के लिए इंतजार नहीं कर सकता
yalestar

6

अगर आपको शेल स्क्रिप्टिंग पसंद है तो आपको PowerShell पसंद आएगा!

Microsoft कमांड शेल (Ars Technica) के एक निर्देशित दौरे से शुरू करें ।


8
मुझे शेल स्क्रिप्टिंग बहुत पसंद है और मैं पॉवरशेल को बर्दाश्त करता हूं । यह आज्ञा है और वाक्यविन्यास अत्याचारी हैं। किसी भी उपयोगी कमांड के पूरा होने के बिना बहुत लंबे आदेश और विकल्प। या अगर वहाँ है मैं इसे नहीं मिला है। बहुत सारी सुविधाएँ एकल आदेशों में चरमरा गई हैं जिन्हें अलग किया जाना चाहिए। अजीब चर और भागने के सिंटैक्स केवल एक डॉस बैच प्रोग्रामर प्यार कर सकता है।
ज़ैन लिंक्स

8
@Zan Lynx - आप सामान नहीं मिलने के बारे में सही हैं। सभी आदेशों में उपनाम हैं, और उनमें से कई डॉस और यूनिक्स कमांड (पीएस, डीआईआर, आरएम, एलएस, किल, हिस्ट्री, मैन, कैट, क्लियर आदि) दोनों से मेल खाते हैं। नाम लंबे हैं ताकि उनका सार्थक नाम हो। लिपियों के लिए बढ़िया यह मदद करता है जब किसी नए व्यक्ति को इसका उपयोग और रखरखाव करना होता है। Cmdlets, फ़ंक्शंस, वैरिएबल, पाथ, पैरामीटर्स आदि के लिए टैब का विस्तार है। अधिकांश सिंटैक्स यूनिक्स के गोले से है और आप किस सिंटैक्स से बच रहे हैं? `` भागने के लिए उपयोग नहीं किया जाता है क्योंकि यह विंडोज में पथ विभाजक है।
मनोजसंघ ४ man

3
@Zan Lynx - आपके तर्क मान्य नहीं हैं। चरों की व्याख्या करना बंद करने के लिए, '(एकल उद्धरण) का उपयोग करें । डबल डबल उद्धरण बात करने के लिए - एक ही, का उपयोग करें write-output 'this is a "test"'। आप जिस प्रश्न की ओर इशारा कर रहे हैं वह Regex के लिए है और Regex के लिए भागने हर जगह मान्य है। पॉवरशेल में हियर-स्ट्रिंग्स / वर्बटिम स्ट्रिंग्स भी हैं। यहां तक ​​कि जावा के पास ये नहीं हैं! जावा में regex से बचने की कोशिश करें। और आप कभी-कभी शाब्दिक रूप से उपयोग नहीं करते हैं। जरूरत पड़ने पर आप उपयोग करते हैं। लिटरलपाथ वाइल्डकार्ड वर्णों को शब्दशः व्यवहार करता है और उनका विस्तार नहीं करता है। जब आपकी फ़ाइलें होती हैं तो आप इसका उपयोग करते हैं। यह आपको अधिक विकल्प देता है।
मनोज् यों

3
@manojlds: बैश शेल की तुलना में, पॉवर्सहेल उन विसंगतियों से भरा है जो कोई मतलब नहीं रखते हैं और सिर्फ भ्रमित कर रहे हैं। बैश में आप हर जगह एक ही भागने के पात्र का उपयोग करते हैं और फ़ाइल पथ वैसे ही बच जाते हैं जैसे कि तार होते हैं। आपको इसके लिए एक विशेष पैरामीटर की आवश्यकता नहीं है। यदि आप एक चर का विस्तार करते हैं, जिसमें विशेष वर्ण हैं, तो आप इसे दोहरे उद्धरण चिह्नों में रखते हैं और सामग्री सुरक्षित है, इसे फिर से बचने के लिए फ़ंक्शन को कॉल करने की आवश्यकता नहीं है।
ज़ैन लिंक्स

5
@Zan Lynx - कोई विसंगतियां नहीं हैं। write-output "this is a `"test`""काम भी करता है। बस ``\` के बजाय का उपयोग करें । रेगेक्स :: भागने में आपकी मदद करने के लिए मौजूद है ताकि आप बच निकलने वाले सामान को याद न करें। इसका उपयोग करना आवश्यक नहीं है। आप सोच रहे हैं कि अतिरिक्त विकल्प जो आपकी मदद करने और गलतियों को रोकने के लिए विसंगतियां हैं।
मनोज्ञ 5

6

जैसा कि मेरे हाल के प्रयोगों ने मुझे PowerShell और .NET कॉल की गहराई में ले लिया, मुझे कहना होगा कि PowerShell Cygwin और Unix शेल को प्रतिस्थापित कर सकता है

मैं पर्ल के बारे में निश्चित नहीं हूं, लेकिन चूंकि पावरशेल और पर्ल दोनों ही ट्राईंग प्रोग्रामिंग भाषाओं के रूप में पूर्ण हैं, इसलिए मैं इसे पर्ल के स्थान पर हां के रूप में भी देता हूं।

एक चीज़ जो पॉवरशेल में सिग्विन और साधारण बैश के ऊपर * निक्स के नीचे है, सैंडबॉक्स डीएलएल कॉल करने की इसकी क्षमता है, डायरेक्ट एपीआई कॉल, डब्ल्यूएमआई विधियों और यहां तक ​​कि COM ऑब्जेक्ट्स के माध्यम से ऑपरेटिंग सिस्टम में हेरफेर करता है। कैसे इंटरनेट एक्सप्लोरर को कोड के माध्यम से लॉन्च करने के बारे में, फिर आप जो कुछ भी इसके प्रदर्शित दस्तावेज़ के साथ चाहते हैं, प्रभावी ढंग से एक वेब सर्वर के लिए बैक-एंड का अनुकरण कर रहे हैं?

SQL सर्वर और अन्य डेटा प्रदाताओं से डेटा इकट्ठा करने के बारे में, उन्हें पार्स करें और CSV, मेल संदेश, पाठ और वास्तव में किसी भी तरह के मौजूदा और गैर-मौजूदा फ़ाइल स्वरूपों के रूप में निर्यात करें? (प्राप्त डेटा से एक वैध फ़ाइल बनाने के उचित कौशल के साथ, निश्चित रूप से, लेकिन सीएसवी आसानी से उपलब्ध हैं)।

और हस्ताक्षरित cmdlets और लिपियों, समूह नीतियों, और निष्पादन नीतियों के माध्यम से एक अतिरिक्त सुरक्षा उपलब्ध है जो आपके सिस्टम पर व्यवस्थापक के रूप में चलने पर भी दुर्भावनापूर्ण कोड को रोकने में मदद करती है।

क्या आदेश लागू किए जाते हैं - इस बारे में रिचर्ड द्वारा दिए गए जवाब से उन्हें और पावरशेल को अपनी कार्यक्षमता का अनुकरण करने की क्षमता पहले से ही सूचीबद्ध है।

इस बारे में कि क्या PowerShell को स्विचिंग वारंट के लिए मजबूत है - यह व्यक्तिगत प्राथमिकता का मामला है, हालांकि अधिक से अधिक विंडोज सेवाएं उन्हें नियंत्रित करने के लिए PowerShell cmdlets प्रदान कर रही हैं, वर्तमान में इन सेवाओं के साथ PowerShell का उपयोग नहीं करना एक बाधा माना जाता है। (हाइपर- V सर्वर प्राथमिक ऐसी सेवा है, और यह II के साथ PowerShell cmdlets के साथ और अधिक करने की क्षमता भी प्रदान करता है!)

संभवतः यह उत्तर पांच साल देर से है, लेकिन फिर भी, अगर कोई विंडोज़ पर विभिन्न सामानों के प्रशासनिक कार्य या सामान्य स्क्रिप्टिंग करता है, तो उन्हें निश्चित रूप से अपने उद्देश्यों के लिए पावरशेल का उपयोग करने का प्रयास करना चाहिए।


6

जब आप PowerShell की तुलना Cygwin / Perl / Shell के संयोजन से करते हैं, तो ध्यान रखें कि PowerShell केवल उस संयोजन के "शेल" भाग का प्रतिनिधित्व करता है।

हालाँकि आप PowerShell से किसी भी कमांड को वैसे ही लागू कर सकते हैं जैसे आप cmd.exe या Cygwin से करते हैं। यह नहीं है निर्दिष्ट कार्यों को फिर से लागू , और यह निश्चित रूप से पर्ल के लिए तुलनीय नहीं है।

यह "सिर्फ" एक शेल है, लेकिन यह .NET ब्रह्मांड को एक सहज इंटरफ़ेस प्रदान करने में प्रोग्रामिंग को आसान बनाता है।

यह भी ध्यान रखें कि PowerShell को Windows XP, Windows Server 2003 या उच्चतर की आवश्यकता होती है, जो आपके IT अवसंरचना के आधार पर एक समस्या उत्पन्न कर सकता है।

अपडेट करें:

मुझे नहीं पता था कि मेरे जवाब से किस तरह की दार्शनिक बहस छिड़ जाएगी।

मैंने अपना जवाब प्रश्न के संदर्भ में पोस्ट किया: पॉवरशेल की तुलना सिग्विन और पर्ल और बैश से करें।

PowerShell एक शेल है, क्योंकि यह अंतर्निहित कमांड्स, कमांडलेट्स, उपयोगकर्ता फ़ंक्शंस और बाहरी कमांड्स (.exe, .bat, .cmd) के बीच कोई वाक्यात्मक अंतर नहीं करता है। कॉल में नाम स्थान या ऑब्जेक्ट जोड़कर केवल .NET विधियों को लागू करना अलग है।

इसकी प्रोग्रामबिलिटी .NET फ्रेमवर्क से निकलती है, पावरस्ले "भाषा" के लिए कुछ विशेष से नहीं।

मैं कहता हूं कि मुझे विश्वास है कि बुग्जिला या मीडियाविकि के रूप में पावरशेल एक "स्क्रिप्टिंग भाषा" है को वेब सर्वर पर चलने वाली पॉवरशेल स्क्रिप्ट के रूप में लागू किया जाता है;)

तब तक, तुलना का आनंद लें ।


हाँ, मुझे लगता है कि जब मैं यूनिक्स "शेल" के बारे में बात कर रहा हूं, तो मैं उन सभी सामान्य उपयोगिताओं का भी उल्लेख कर रहा हूं जो यूनिक्स के साथ आते हैं, जैसे कि grep, awk, आदि। मैं सोच रहा हूं कि क्या PowerShell समान उपयोगिताओं की पेशकश करता है -डिब्बा।
एंडी व्हाइट

3
पॉवरशेल "सिर्फ एक खोल" नहीं है। यह एक स्क्रिप्टिंग भाषा है। मुझे आश्चर्य है कि यह किस तरह से पर्ल से तुलना करने योग्य नहीं है? मैं मानता हूं कि यह उतना परिपक्व नहीं है, लेकिन इससे परे मुझे असमानता नहीं दिखती।
ईबीग्रीन

@EBGreen, इस टिप्पणी के साथ आपका वास्तव में क्या मतलब है? मैं मानता हूं कि कोई भी शेल या स्क्रिप्टिंग भाषा स्वाभाविक रूप से समान है, लेकिन मैं PowerShell बनाम bash / perl / अन्य यूनिक्स शेल / स्क्रिप्टिंग भाषाओं की विशिष्ट क्षमताओं के बारे में अधिक सोच रहा था।
एंडी व्हाइट

2
पॉवर्सशेल में कार्यों की एक अविश्वसनीय विस्तृत श्रृंखला है। यह है - एक इंटरएक्टिव, कंपोजेबल शेल - एक समृद्ध इंटरैक्टिव स्क्रिप्टिंग लैंग्वेज - एक प्रोग्रामिंग लैंग्वेज यह OO & tesxt यूटिलिटी फ़ंक्शंस (यानी grep / awk / etc के साथ) का एक समृद्ध सेट है।
जेफरी स्नोवर - एमएसएफटी

1
@ और - मैंने देवियो को यह समझने के लिए कहा कि पॉवरशेल पर्ल के समान शक्तिशाली नहीं है। मुझे विश्वास नहीं होता कि यह सच है और मुझे आश्चर्य हुआ कि उसने ऐसा क्यों सोचा।
ईबीग्रीन

4

PowerShell में cmdlets बहुत अच्छे हैं और मज़बूती से काम करते हैं। उनका ऑब्जेक्ट-ओरिएंटेशन मुझे बहुत पसंद है क्योंकि मैं एक जावा / सी # डेवलपर हूं, लेकिन यह पूरी तरह से सेट नहीं है। चूंकि यह ऑब्जेक्ट ओरिएंटेड है, इसलिए यह POSIX टूल सेट ( और) के बहुत सारे टेक्स्ट स्ट्रीम मेच्योरिटी से चूक गया हैawksed कुछ नाम रखने के लिए) की ।

सबसे अच्छा जवाब जो मुझे ओओ तकनीक से प्यार करने और पोसिक्स टूल्स में परिपक्वता को प्यार करने की दुविधा के लिए मिला है, दोनों का उपयोग करना है! PowerShell का एक बड़ा पहलू यह है कि यह मानक धाराओं के लिए एक उत्कृष्ट कार्य पाइपिंग ऑब्जेक्ट करता है। डिफ़ॉल्ट रूप से PowerShell अपने ऑब्जेक्ट को चारों ओर ले जाने के लिए ऑब्जेक्ट पाइपलाइन का उपयोग करता है। ये मानक धाराएँ (मानक बाहर, मानक त्रुटि और मानक में) नहीं हैं। जब PowerShell को एक मानक प्रक्रिया के लिए आउटपुट पास करने की आवश्यकता होती है जिसमें ऑब्जेक्ट पाइपलाइन नहीं होती है, तो यह पहले ऑब्जेक्ट्स को एक टेक्स्ट स्ट्रीम में कनवर्ट करता है। चूँकि यह ऐसा अच्छी तरह से करता है, PowerShell POSIX उपकरण होस्ट करने के लिए एक उत्कृष्ट स्थान बनाता है!

सबसे अच्छा POSIX उपकरण सेट GnuWin32 है । इसे स्थापित करने में 5 सेकंड से अधिक समय लगता है, लेकिन यह परेशानी के लायक है, और जहां तक ​​मैं बता सकता हूं, यह आपके सिस्टम (रजिस्ट्री) को संशोधित नहीं करता है,c:\windows\* फ़ोल्डर्स, आदि) को सिवाय आपके द्वारा निर्दिष्ट निर्देशिकाओं की फाइलों को कॉपी करने के। यह अतिरिक्त अच्छा है क्योंकि यदि आप उपकरण को एक साझा निर्देशिका में रखते हैं, तो कई लोग उन्हें समवर्ती रूप से एक्सेस कर सकते हैं।

GnuWin32 इंस्टॉलेशन निर्देश

Exe को डाउनलोड करें और निष्पादित करें (यह SourceForge साइट से है ) इसे एक उपयुक्त निर्देशिका की ओर इंगित करता है (मैं उपयोग करूंगा C:\bin)। यह GetGnuWin32वहां एक निर्देशिका बनाएगा जिसमें आप चलेंगे download.bat, फिर install.bat(मापदंडों के बिना), इसके बाद, एक C:\bin\GetGnuWin32\gnuwin32\binनिर्देशिका होगी जो सबसे उपयोगी फ़ोल्डर है जो कभी भी विंडोज मशीन पर मौजूद है। उस निर्देशिका को अपने पथ में जोड़ें, और आप जाने के लिए तैयार हैं।


4

TL; DR - मुझे विंडोज या पावरशेल से नफरत नहीं है। मैं बस नहीं कर सकते कर Windows में या PowerShell पर कुछ भी।


मैं व्यक्तिगत रूप से अभी भी PowerShell को सबसे अच्छे से अभिभूत पाता हूं।

  • निर्देशिका पथों का समापन पूरा नहीं होता है, उपयोगकर्ता को प्रत्येक नाम पूरा होने के बाद पथ विभाजक में प्रवेश करने की आवश्यकता होती है।
  • मुझे अभी भी ऐसा लगता है कि विंडोज के पास किसी पथ या मार्ग की अवधारणा भी नहीं है, जिसमें कोई सुलभ उपयोगकर्ता होम इंडिकेटर ~/न हो@environment://somejibberish/%user_home%
  • NTFS अभी भी एक गड़बड़ है और प्रतीत होता है कि हमेशा रहेगा। सौभाग्य नौसिखिया।

  • cmd-esque इंटरफ़ेस, डायनासोर cmd.exe अभी भी PowerShell में दिखाई देता है, संपादित करेंमार्क अभी भी जानकारी की प्रतिलिपि बनाने का एकमात्र तरीका है, और केवल दृश्यमान टर्मिनल स्थान के आयताकार ब्लॉक के रूप में प्रतिलिपि बनाता है। और संपादित करेंमार्क अभी भी टर्मिनल में तार चिपकाने का एकमात्र तरीका है।

  • इसे नीले रंग में रंगना इसे और अधिक आकर्षक नहीं बनाता है। मुझे नहीं लगता कि Microsoft डेवलपर्स रंग में एक स्वाद है।

  • विंडोज हमेशा स्क्रीन के ऊपरी बाएं कोने में खुलती है। किसी ऐसे व्यक्ति के लिए जो ऊर्ध्वाधर टास्क बार का उपयोग करता है, यह अविश्वसनीय रूप से कष्टप्रद है, विशेष रूप से यह देखते हुए कि विंडोज टास्क बार खिड़की के एकमात्र कोने को कवर करेगा जो कॉपी / पेस्ट कार्यक्षमता तक पहुंच प्रदान करता है।

मैं उन टूल के आधार पर ज्यादा नहीं बोल सकता, जिनमें विंडोज शामिल है। यह होने के नाते कि मेरी जानकारी के लिए, ओपन-सोर्स, स्वतंत्र रूप से लाइसेंस प्राप्त सीएलआई टूल्स और पॉवरशेल जहाजों का एक पूरा सेट है, उनमें से कोई भी पूरी तरह से निराशा नहीं है।

  • PowerShell का wget GNU wget के लिए अतुलनीय तर्क दिए गए हैं। धन्यवाद, आशा की झलक स्पष्ट रूप से बेकार है।
  • PowerShell POSIX बैश-संगत नहीं है, विशेष रूप से &&ऑपरेटर को संभाला नहीं जाता है, बिना किसी चीज़ के सशर्त आदेश का सबसे सरल बना देता है।

मैं मनुष्य को नहीं जानता; मैंने इसे एक शॉट दिया, मैंने वास्तव में किया; मैं अभी भी इसे इस उम्मीद में एक शॉट देने की कोशिश करता हूं कि अगली बार जब मैं इसे खोलूंगा तो यह कम बेकार होगा। मैं PowerShell में कुछ नहीं कर सकता, और मैं विंडोज़ के लिए GNU टूल लाने के लिए एक वास्तविक परियोजना के साथ मुश्किल से कुछ कर सकता हूं।

MySysGit मुझे GNU टूल्स के एक जोड़े के साथ डायनासोर cmd.exe प्रॉम्प्ट देता है, और यह अभी भी बहुत कम है, लेकिन अंतिम पथ के पूरा होने के काम करता है। और Git Bash में Git कमांड चलेगी।

MySysGit के लिए Mintty, mysysgit के पर्यावरण पर Cygwin इंटरफ़ेस देता है प्रतिलिपि बनाने और चिपकाने के एक बात (माउस कॉपी करने के लिए का चयन करें (), Shift+ Insपेस्ट करने के लिए, कैसे आधुनिक ...)। हालाँकि, चीजें पसंद हैंgit push मिंट्टी में टूट जाती हैं।

मुझे शेख़ी से मतलब नहीं है, लेकिन मैं अभी भी विंडोज पर कमांड-लाइन प्रयोज्य के साथ भारी समस्याओं को देखता हूं, यहां तक ​​कि सिग्विन जैसे उपकरण भी दिए गए हैं।


पुनश्च: सिर्फ इसलिए कि PowerShell में कुछ किया जा सकता है, यह प्रयोग करने योग्य नहीं है । प्रयोज्यता क्षमता से अधिक गहरी है और एक उपभोक्ता के रूप में किसी उत्पाद का उपयोग करने की कोशिश करते समय मैं उस पर ध्यान केंद्रित करता हूं।


QuickEdit मोड चालू करें? कॉपी करने के लिए, ctrl-v पेस्ट करने के लिए एन्टर का चयन करें और दबाएं, कोई और एडिट-> मार्क या एडिट-> पेस्ट न करें। वरीयताओं में रहते हुए, विंडो की स्थिति निर्धारित करें और "सिस्टम स्थिति विंडो दें" को अनटिक करें। टैब पूर्णता केवल फाइल सिस्टम पथ को पूरा नहीं कर रहा है, यह चर नाम, कमांड नाम, ऑब्जेक्ट गुण भी पूरा कर रहा है, आप किसी संपत्ति या इंडेक्स को टाइप .या [एक्सेस करने के बारे में हो सकते हैं, इसलिए यह अंत में एक पथ विभाजक नहीं जोड़ सकता है। कौन सा PowerShell wget, बिल्कुल? जो पॉवरशेल POSIX? यह विंडोज़ के लिए ग्नू उपकरण लाने की कोशिश नहीं कर रहा है, या bash- संगत btw हो सकता है।
TessellatingHeckler

हाँ, मुझे पता है कि यह बैश होने की कोशिश नहीं कर रहा है। मैंने मूल पोस्ट में ऐसा कहने से परहेज किया। मैं कहूंगा कि कौन सी बाइनरी मिलती है, लेकिन पावर शेल में "कोई" "कमांड" नहीं है :( मुझे याद नहीं है कि मैं कहां से खरीदता हूं पॉवर
पॉक्स को

5
पुन: "नहीं जो" -> (get-command wg*.exe).Path। पुन: बैश समाप्ति और रीडलाइन -> leeholmes.com/blog/2012/09/13/… github.com/lzybkr/PSReadLine के लिए अग्रणी
TessellatingHeckler

2

मैंने यह नहीं देखा कि पावरशेल वास्तव में बंद हो गया है, कम से कम अभी तक नहीं। तो यह सीखने के प्रयास के लायक नहीं हो सकता है जब तक कि आपकी टीम के अन्य लोग इसे पहले से ही नहीं जानते हैं।

अपने पूर्वानुमान के लिए आप एक स्क्रिप्टिंग भाषा के साथ बेहतर हो सकते हैं जो दूसरों को पीछे छोड़ सकती है, पर्ल जैसा कि आपने उल्लेख किया है, या अन्य जैसे रूबी या पायथन।

मुझे लगता है कि यह बहुत कुछ इस बात पर निर्भर करता है कि आपको क्या करने की आवश्यकता है। व्यक्तिगत रूप से मैं अपनी निजी स्क्रिप्ट के लिए पायथन का उपयोग कर रहा हूं, लेकिन मुझे पता है कि जब मैं कुछ लिखना शुरू करता हूं तो मैं इसे कभी भी पारित नहीं कर पाऊंगा - इसलिए मैं कुछ भी क्रांतिकारी नहीं करने की कोशिश करता हूं।


2

दोनों का उपयोग क्यों नहीं? Cygwin में PowerShell स्क्रिप्ट को कॉल करें जैसे कि किसी अन्य व्याख्या की गई स्क्रिप्ट जैसे Perl, आदि।

मैं यह पर्याप्त करता हूं कि मैंने https://gbucket.org/jbianchi/powershell को बैश रैपर के लिए Cygwin में powerhell.exe को कॉल करने के लिए लिखा । इसे एक पॉवरबेल। Ex1 स्क्रिप्ट की पहली पंक्ति के रूप में शेबंग के रूप में इस्तेमाल किया जा सकता है (क्योंकि PowerShell एक टिप्पणी के रूप में "#" का भी उपयोग करता है)। उदाहरणों के लिए https://bitbucket.org/jbianchi/powershell/wiki/Home देखें


1

कुछ पंक्तियों में, Cygwin और PowerShell अलग-अलग उपकरण हैं, लेकिन अगर आपके पास Cygwin स्थापित है, तो आप एक PowerShell सत्र में Cygwin निष्पादक चला सकते हैं। मैंने पावरशेल की इतनी आदत डाल ली है कि अब मैं grep, सॉर्ट, awk, आदि का उपयोग नहीं करता हूं। पावरशेल में बहुत अधिक बिल्ट-इन विकल्प हैं, और यदि आप वहां से cmdlet नहीं पा सकते हैं।

मुख्य उपकरण जो मैं खुद का उपयोग कर रहा हूं वह है ssh.exe, लेकिन एक PowerShell सत्र के भीतर।

यह बहुत अच्छा काम करता है।


0

मैंने पाया कि PowerShell प्रोग्रामिंग प्रयास के लायक नहीं है।

मेरे पास यूनिक्स के तहत शेल स्क्रिप्टिंग के साथ कई वर्षों का अनुभव है, लेकिन मुझे पॉवरशेल के साथ कुछ भी करना बहुत मुश्किल लगता है।

ऐसा लगता है कि कई कार्यों के लिए आपको Windows प्रबंधन इंटरफ़ेस से पूछताछ करने और अपनी ज़रूरत की जानकारी प्राप्त करने के लिए SQL जैसी कमांड जारी करने की आवश्यकता है।

उदाहरण के लिए, मैं डायरेक्टरी ट्री से एक विशिष्ट प्रत्यय वाली सभी फाइलों को हटाने के लिए एक स्क्रिप्ट लिखना चाहता था यूनिक्स के तहत, यह एक सरल होगा ...

find . -name \*.xyz -exec rm {} \;

कुछ घंटों के बाद Scripting.FileSystemObjectऔर साथ में WScript.Shellडिनर करें और "SELECT * FROM Win32_ShortcutFile WHERE Drive = '" & Drive & "' और Path = '" & searchFolder & "'" को जारी करने के बाद, मैंने आखिरकार विंडोज एक्सप्लोरर के सर्च कमांड और खोज के लिए छोड़ दिया और बस गया। बस इसे मैन्युअल रूप से करें। वहाँ शायद कुछ ऐसा करने के लिए है जो मैं चाहता था, लेकिन मुझे कुछ भी स्पष्ट नहीं दिख रहा था और एमएसडीएन साइट पर सभी उदाहरण इतने तुच्छ थे कि बेकार हो।

EDIT हेह, निश्चित रूप से जैसे ही मैंने यह लिखा मैंने इसे कुछ और चारों ओर दबाया और पाया कि मुझे क्या याद आ रहा था: -recurseहटाने-आइटम कमांड का विकल्प दोषपूर्ण है (यदि आप उपयोग करते हैं तो पता चलता है get-help remove-item -detailed)।

मैं "हटाने-आइटम -फ़िल्टर '* .xyz' -recurse" की कोशिश कर रहा था और यह काम नहीं कर रहा था, इसलिए मैंने इसे छोड़ दिया।

आपको उपयोग करने की आवश्यकता है get-childitem -filter '*.xyz' -recurse | remove-item


16
मुझे लगता है कि आप PowerShell के साथ Windows स्क्रिप्टिंग होस्ट (WSH) को भ्रमित कर रहे हैं। वे बिलकुल अलग हैं।
एरिक फनकेनबश 3

3
एक उदाहरण के रूप में, यदि आप उन सभी फ़ाइलों को हटाना चाहते हैं जो समाप्त हो जाती हैं। TMN आप इस आदेश को प्राप्त कर सकते हैं- childitem c: \ -include * .TMN -recurse | foreach ($ _) {
निष्कासन

@ मिस्टर: मैंने यह कोशिश की, और यह काम नहीं कर रहा था। कुछ बातों के बारे में सोचने के बाद, ऐसा लगता है कि * .tmn को आपकी ज़रूरत है (सिर्फ .tmn के बजाय)
redtuna

5
मैं सम्मानपूर्वक अधिक असहमत नहीं हो सकता, और मैं किसी भी तरह से एक विंडोज आदमी नहीं हूं। मुझे पीएस को स्क्रिप्ट की तुलना में बहुत आसान लगता है। PS अधिक सुसंगत है। बैश के साथ, आपके द्वारा आह्वान की गई किसी भी कंसोल उपयोगिता का अपना सिंटैक्स, और अद्वितीय व्यवहार है, और बैश सिंटैक्स स्वयं क्रिप्टिक है। पीएस भाषा के फीचर्स जैसे अनाम फ़ंक्शंस, (स्क्रिप्टब्लॉक), पैरामीटर वेलिडेशन, एडवांस्ड फ़ंक्शंस आदि के साथ पोर्टेबिलिटी के लिए मॉड्यूल के प्लस कॉन्सेप्ट और कई अन्य फ़ीचर के साथ अधिक मजबूत है। मुख्य रूप से हालांकि, सबसे बड़ा कारण वह चीज है जो आप हमेशा PS, ऑब्जेक्ट ट्रम्प टेक्स्ट के बारे में सुनते हैं। बैश हालांकि अभी भी तेज है।
user2233949


0

PowerShell बहुत शक्तिशाली है, यूनिक्स के गोले के मानक-निर्मित की तुलना में अधिक शक्तिशाली है (लेकिन केवल इसलिए कि इसमें बहुत अधिक कार्यक्षमता शामिल है जो आमतौर पर उपप्रोग्राम से बाहर होती है)। इसके अलावा, विचार करें कि आप किसी भी .NET लैंग्वेज में एप्लेट्स लिख सकते हैं, जिसमें IronPython , IronRuby , PerlNet, आदि शामिल हैं। या आप केवल PowerShell से अपने Cygwin कमांड को कॉल कर सकते हैं, सभी अतिरिक्त कार्यक्षमता को अनदेखा कर सकते हैं और यह Bash, KornShell के समान ही काम करेगा । जो कुछ भी...


मुझे लगता है कि आप यूनिक्स गोले के डिजाइन लक्ष्यों को याद कर रहे होंगे। पॉवरशेल नॉक करना (खुद अधिक सीखना चाहेंगे) लेकिन आपको इस तरह का बयान देने के लिए यूनिक्स टूलिंग को समझने की आवश्यकता है।
Jé Queue

2
@Xepoch - नहीं, मुझे लगता है कि आपको PowerShell के डिज़ाइन लक्ष्य याद आ रहे हैं। PowerShell सब कुछ कर सकता है यूनिक्स गोले उसी तरह से कर सकते हैं जैसे वे करते हैं। हालाँकि, असली शक्ति तब आती है जब आप पाठ आउटपुट को पार्स करने के बजाय PS के ऑब्जेक्ट पाइपिंग सिस्टम का उपयोग करते हैं। तो, PowerShell ठीक वही कर सकता है जो बैश या कॉर्न कर सकता है, लेकिन वे ऐसा नहीं कर सकते जो PowerShell कर सकता है।
एरिक फनकेनबसच

3
मुझे बस इतना पता नहीं है कि आपको एक समालोचना देने के लिए पावरशेल पर्याप्त है, लेकिन जैसा कि आप स्पष्ट रूप से जानते हैं कि यूनिक्स गोले के लक्ष्य बाहरी टूलिंग के पूरी तरह से व्यापक प्रतिस्थापन नहीं हैं, बल्कि इसके चारों ओर नियंत्रण संरचनाएं हैं। फिर से मैं इस समय तुलना नहीं कर सकता और न ही इसके विपरीत, लेकिन पावरशेल को ऊंचा कर सकता हूं क्योंकि इसमें अधिक बिल्ट-इन नहीं है, यह आवश्यक रूप से यूनिक्स गोले का वरदान है।
18

@Xepoch - मुद्दा यह है, आप चुन सकते हैं कि आप किस तरह से करना चाहते हैं। आप अंतर्निहित शेल की सभी अच्छाई का उपयोग कर सकते हैं, या आप इसे अनदेखा कर सकते हैं और जिस तरह से यूनिक्स इसे करते हैं। यह तुम्हारी पसंद है। और चुनाव अच्छा है, है ना?
एरिक Funkenbusch
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.