PowerShell में कंसोल पर लिखने का सबसे अच्छा तरीका


142

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

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

सभी तीन तरीके कंसोल पर प्रिंट होंगे। बीच वाला किसी भी तरह सरल और कम क्रिया है और उपयोग में आसान है। मुझे यह भी पता है कि जब आप कोई फ़ंक्शन लिखते हैं जैसे:

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

यह अभी भी पाइपलाइन में दो तार देता है:

और मैं अभी भी मूल्यों को प्रिंट करने में सक्षम हूं:

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

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

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

जवाबों:


101

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

बस चीजों को पाइपलाइन से बाहर निकलने देना एक विकल्प नहीं है Write-Hostजिसके लिए होस्ट एप्लिकेशन में टेक्स्ट को आउटपुट करने का एकमात्र कारण मौजूद है।

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


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

58

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

जब किसी ऑब्जेक्ट को पाइपलाइन के लिए लिखा जाता है, तो इसे चेन में अन्य कमांड द्वारा खपत किया जा सकता है। उदाहरण के लिए:

"hello world" | Do-Something

लेकिन यह Write-Hostकंसोल से लिखने के बाद काम नहीं करेगा , पाइप लाइन के लिए नहीं (डू-समथिंग टू द स्ट्रिंग नहीं मिलेगा):

Write-Host "hello world" | Do-Something

3
यह उत्तर तकनीकी रूप से सही है, लेकिन मुझे संदेह है कि यह एक neophyte PowerShell उपयोगकर्ता को भटकाता है। प्रभावी PowerShell का पहला नियम आउटपुट का उत्पादन करना है जो पाइपलाइन में उपयोगी है। यदि आप Write-Host का बहुत अधिक उपयोग कर रहे हैं, तो आप शायद इसे गलत कर रहे हैं।
ओल्डफार्ट

6
ठीक है, क्या यह नहीं है कि ओपी ने पूछा कि कंसोल को कैसे लिखा जाए? होस्ट को लिखने और पाइपलाइन में लिखने के बीच अंतर है, और किसी को यह जानना होगा कि प्रत्येक क्या करता है। मैं एक स्पष्टीकरण के साथ अपने उत्तर को अपडेट करूंगा।
शाए लेवी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.