राइट-होस्ट और राइट-आउटपुट के बीच PowerShell अंतर?


जवाबों:


82

संक्षेप में, Write-Hostकंसोल को ही लिखता है। इसे VBScript में MsgBox के रूप में सोचें । Write-Outputदूसरी ओर, पाइपलाइन को लिखता है, इसलिए अगला कमांड इसे इसके इनपुट के रूप में स्वीकार कर सकता है। आपको Write-Outputऑब्जेक्ट लिखने के लिए उपयोग करने की आवश्यकता नहीं है , जैसा Write-Outputकि आपके लिए अनुमानित रूप से कहा जाता है।

PS> Get-Service

जैसा होगा:

PS> Get-Service | Write-Output

16
पॉवरशेल इस तरह से भ्रामक है। यह पॉवरलाइन में उल्लिखित पाइपलाइन की भावना प्राप्त करने के लिए इस लिंक को पढ़ने के लायक है, और मान फ़ंक्शन से कैसे लौटाए जाते हैं। "PowerShell में वापसी कीवर्ड भ्रामक है - ईमानदारी से, मैं इससे बचता हूं, क्योंकि यह अधिकांश प्रोग्रामिंग भाषाओं की तरह काम नहीं करता है।" - powershell.org/forums/topic/…
जिम आहो

1
यदि आप ऐसे फ़ंक्शन को कॉल कर रहे हैं जिसका रिटर्न मान है, तो उस फ़ंक्शन में राइट-आउटपुट का उपयोग न करें या वह स्ट्रिंग आपके रिटर्न मान के बजाय वापस कर दी जाएगी। जो हर तरह के कहर का कारण बन सकता है।
ब्रेन २००

28

लिखो-आउटपुट पाइपलाइन को आउटपुट भेजता है। वहां से इसे दूसरे cmdlet पर पाइप किया जा सकता है या एक चर को सौंपा जा सकता है। राइट-होस्ट इसे सीधे कंसोल पर भेजता है।

$a = 'Testing Write-OutPut'  | Write-Output
$b = 'Testing Write-Host' | Write-Host

Get-Variable a,b

आउटपुट:

Testing Write-Host

Name                           Value                                                                 
----                           -----                                                                 
a                              Testing Write-OutPut                                                  
b                                                  

यदि आप पॉवर्सहेल को यह नहीं बताते हैं कि इसे आउटपुट के साथ क्या करना है, तो इसे वेरिएबल में असाइन करके या अनहेर कमांड को पाइप करके, तो इसे आउट-डिफॉल्ट में भेज दिया जाता है, जो कि आमतौर पर कंसोल होता है, इसलिए अंतिम परिणाम समान दिखाई देता है ।


9

Write-Outputपाइप लाइन के माध्यम से डेटा को ऑब्जेक्ट के रूप में भेजता है। सवालों के उदाहरण में यह सिर्फ एक स्ट्रिंग पास करेगा।

write-hostहोस्ट निर्भर है कंसोल write-hostमें अनिवार्य रूप से कर रहा है [console]::WriteLine। अधिक जानकारी के लिए इसे देखें ।


4
बस भविष्य के पाठकों के लिए स्पष्ट करने के लिए। Write-Ouputवस्तुओं को भेजता है। इस बार यह एक तार था, लेकिन सामान्य तौर पर यह वस्तुओं को भेजेगा, और सामान्य रूप से उपयोग करने के लिए अनावश्यक है क्योंकि यह आउटपुट परिणाम / डेटा के लिए डिफ़ॉल्ट तरीका है :)
फ्रोड एफ।

5

राइट-होस्ट और राइट-आउटपुट के बीच एक और अंतर:

  • राइट-होस्ट संदेश को स्क्रीन पर प्रदर्शित करता है, लेकिन यह उसे लॉग में नहीं लिखता है

  • राइट-आउटपुट लॉग को संदेश लिखता है, लेकिन यह इसे स्क्रीन पर प्रदर्शित नहीं करता है।

और राइट-होस्ट को हानिकारक माना जाता है। आप लिखो-होस्ट माना जाता हानिकारक में एक विस्तृत विवरण देख सकते हैं ।


2
मुझे लिखना-आउटपुट बहुत अधिक हानिकारक लगता है। आप कैसे सुनिश्चित कर रहे हैं कि कोई फ़ंक्शन वास्तव में आपके अपेक्षित परिणाम देता है और कमांड से कुछ अप्रत्याशित कचरा उत्पादन नहीं करता है?
एमकेस्पर

6
मुझे लगता Write-Outputहै कि स्क्रीन पर संदेश प्रदर्शित होता है, यदि आप स्क्रिप्ट को स्वयं चला रहे हैं। इसलिए मुझे यकीन नहीं है कि आप "राइट-आउटपुट लॉग में एक संदेश लिखते हैं, लेकिन इसका स्क्रीन पर प्रदर्शन नहीं होता है।" ?
जिम आहो

स्क्रीन पर राइट-आउटपुट रिटर्न की जानकारी नहीं हो सकती है यदि यह एक फ़ंक्शन के अंदर उपयोग किया जाता है जिसमें से आप आउटपुट को एक चर पर कैप्चर करते हैं। यह आउटपुट को बर्बाद भी कर सकता है। इसके लिए राइट-होस्ट बेहतर अनुकूल है।
गाल्मोक

@Summer राइट-आउटपुट हानिकारक है, राइट-इनफॉर्मेशन शानदार है। राइट-आउटपुट Powershell फ़ंक्शंस का दुश्मन है जिसमें रिटर्न मान हैं।
ब्रेन २००

डॉक्स के अनुसार , "विंडोज पॉवरशेल 5.0 में शुरू होकर, राइट-होस्ट राइट-इनफॉर्मेशन के लिए एक आवरण है। यह आपको सूचना स्ट्रीम में आउटपुट का उपयोग करने के लिए राइट-होस्ट का उपयोग करने की अनुमति देता है।"
फिस्ट्रोम

0

आप नीचे दिए गए उदाहरण के साथ दो सेमी के अंतर को समझ सकते हैं:

लिखो-होस्ट "msgtxt" | Get-Service ऊपर चलने पर, आपको "msgtxt" के रूप में आउटपुट मिलेगा

लिखो-आउटपुट "msgtxt" | Get-Service ऊपर चलने पर, आपको एक त्रुटि मिलेगी क्योंकि msgtxt किसी सेवा का नाम नहीं है। (आदर्श स्थिति में) (चूंकि आप इसे एक पाइपलाइन में लिख रहे हैं और इसे Get-Service के इनपुट के रूप में पारित किया जा रहा है)

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