2012-05-31 13 views
87

में कंसोल को लिखने का सबसे अच्छा तरीका मुझे कंसोल पर प्रिंट (गूंज) के विभिन्न तरीकों के बारे में थोड़ा उलझन है। मैंने देखा है कि कंसोल पर आउटपुट लिखने के कई तरीके हैं, जैसे:PowerShell

Write-Host "Hello world1" 
"Hello World2" 
Out-Host -InputObject "Hello World3" 

सभी तीन तरीके कंसोल पर प्रिंट होंगे। मध्य एक किसी भी तरह से सरल और कम verbose और उपयोग करने में आसान है। मैं यह भी पता है कि जब आप इस तरह के रूप में एक समारोह लिखें:

function GetValues() 
{ 
    "1" 
    "2" 
} 

यह अभी भी पाइप लाइन में दो स्ट्रिंग रिटर्न:

और मैं अभी भी बाहर मूल्यों मुद्रित करने में सक्षम हूँ:

foreach ($s in GetValues) 
{ 
    Write-Host "s: " $s 
} 

जो चीज़ मैंने पाया है वह था कि केवल उद्धृत स्ट्रिंग का उपयोग कस्टम होस्ट पर हमेशा दिखाई नहीं देता है, और मुझे कस्टम होस्ट पर प्रिंट करने के लिए मान प्राप्त करने के लिए Write-Host का उपयोग करना पड़ता है।

किसी भी तरह से मुझे यह भ्रमित लगता है। "Print something"Write-Host पर उपनाम होना चाहिए या इरादा क्या है?

+2

[लिखें मेजबान बुराई है ] (http://windowsitpro.com/blog/what-do-not-do-powershell-part-1) –

उत्तर

64

पावरशेल का डिफ़ॉल्ट व्यवहार किसी अन्य पाइपलाइन तत्व द्वारा उठाए बिना किसी पाइपलाइन से बाहर निकलने वाली चीज़ों को डंप करना है या Out-Host में एक चर (या पुनर्निर्देशित) को असाइन किया जा रहा है। Out-Host स्पष्ट रूप से होस्ट-निर्भर है।

बस दे बातें पाइप लाइन के बाहर गिर नहींWrite-Host के लिए एक विकल्प है जो मेजबान आवेदन में पाठ outputting के एकमात्र कारण के लिए मौजूद है।

यदि आप आउटपुट चाहते हैं, तो Write-* cmdlets का उपयोग करें। यदि आप किसी फ़ंक्शन से मूल्यों को वापस करना चाहते हैं, तो बिना किसी cmdlet के ऑब्जेक्ट्स को डंप करें।

+0

लेखन-होस्ट "हैलो वर्ल्ड" क्यों फेंकने की त्रुटि 'कथन का अपेक्षित अंत' है? – FrenkyB

+0

मुझे कोई जानकारी नहीं है। टाइपिंग कि PowerShell में यहां अपेक्षित व्यवहार प्रदर्शित करता है और कोई त्रुटि नहीं देता है। – Joey

+1

मैंने इसे .vbs स्क्रिप्ट में टाइप किया है। बस कोड की उस पंक्ति और यह मुझे त्रुटि फेंक रहा है। – FrenkyB

35

मध्य एक पाइपलाइन को लिखता है। Write-Host और Out-Host कंसोल को लिखते हैं। 'echo' Write-Output के लिए उपनाम है जो पाइपलाइन को भी लिखता है। कंसोल को लिखने का सबसे अच्छा तरीका Write-Host सेमीडलेट का उपयोग करेगा।

जब कोई ऑब्जेक्ट पाइपलाइन पर लिखा जाता है तो इसे श्रृंखला में अन्य आदेशों द्वारा खपत किया जा सकता है। उदाहरण के लिए:

"hello world" | Do-Something 

लेकिन जब से Write-Host, कंसोल के लिए लिखते हैं पाइपलाइन के लिए नहीं यह काम नहीं करेगा (क्या-कुछ स्ट्रिंग नहीं मिलेगा):

Write-Host "hello world" | Do-Something 
+3

यह उत्तर तकनीकी रूप से सही है, लेकिन मुझे संदेह है कि यह एक neophyte PowerShell उपयोगकर्ता भटक जाता है। प्रभावी पावरशेल का पहला नियम पाइपलाइन में उपयोगी उत्पादन का उत्पादन करना है। यदि आप बहुत अधिक लिखने वाले होस्ट का उपयोग कर रहे हैं, तो आप शायद इसे गलत कर रहे हैं। – OldFart

+3

ठीक है, ओपी ने क्या पूछा, कंसोल को कैसे लिखना है? मेजबान को लिखने और पाइपलाइन पर लिखने के बीच एक अंतर है, और किसी को यह पता होना चाहिए कि प्रत्येक क्या करता है। मैं एक स्पष्टीकरण के साथ अपना जवाब अपडेट करूंगा। –