स्क्रिप्ट परीक्षण के लिए पॉवरशेल में इको समकक्ष


233

मैं झंडे की स्थापना और पूरे स्क्रिप्ट में डेटा मैट्रिकुलेट को देखकर PowerShell स्क्रिप्ट में चर और मानों को आउटपुट करना चाहूंगा ।

यह मैं कैसे करूंगा?

उदाहरण के लिए, निम्नलिखित PHP कोड के बराबर पावरशेल क्या होगा?

echo "filesizecounter: " . $filesizecounter 

PowerGUI के साथ आने वाले स्क्रिप्ट-एडिटर / डिबगर को देखें । आप जो कर रहे हैं, उसके लिए यह उपयुक्त हो सकता है। मुझे लगता है कि Powershell 2 एक डिबगर के साथ भी आता है (लेकिन मैंने इसे आज़माया नहीं है)।
डैन-gph

जवाबों:


275

कई तरीके हैं:

Write-Host: कंसोल पर सीधे लिखें, फ़ंक्शन / cmdlet आउटपुट में शामिल नहीं। अग्रभूमि और पृष्ठभूमि रंग सेट करने की अनुमति देता है।

Write-Debug: कंसोल पर सीधे लिखें, अगर $DebugPreferenceजारी या रोकना है।

Write-Verbose: कंसोल पर सीधे लिखें, अगर $VerbosePreferenceजारी या रोकना है।

उत्तरार्द्ध अतिरिक्त वैकल्पिक जानकारी के लिए लक्षित है, Write-Debugडिबगिंग के लिए (तो इस मामले में उचित प्रतीत होगा)।

अतिरिक्त : PSH2 (कम से कम) स्क्रिप्ट्स में cmdlet बाइंडिंग का उपयोग स्वचालित रूप से -Verboseऔर -Debugस्विच मापदंडों को मिलेगा , जो स्थानीय रूप से सक्षम Write-Verboseऔर Write-Debug(यानी वरीयता चर को ओवरराइड करके) संकलित cmdlets और प्रदाताओं के रूप में करते हैं।


4
राइट-डीबग और राइट-वर्बोज़ के बारे में अच्छी बात यह है कि आप अपने कोड में अपने डिबग स्टेटमेंट को छोड़ सकते हैं, और जब आप उचित वरीयता चर का उपयोग करके इसकी आवश्यकता होती है, तो आउटपुट चालू करें। समय बचाता है और आपके कार्यों के अन्य उपयोगकर्ताओं के लिए एक अच्छी सुविधा है।
जेसनमाकर 20

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

113

पॉवरशेल में एक एलीस मैपिंग इको है Write-Output, इसलिए:

echo "filesizecounter : $filesizecounter"


7
echoWrite-OutputMicrosoft के TechNet के अनुसार एक उपनाम है और यहाँ
ग्लेन लॉरेंस

2
धन्यवाद ग्लेन, ऐसा लगता है कि जब से मैंने यह पोस्ट किया है, उर्फ ​​को 6 साल में हटा दिया गया है। जो अच्छा है, एक को वास्तव में राइट-होस्ट का उपयोग नहीं करना चाहिए क्योंकि यह पाइपलाइन को बायपास करता है। मैंने इसे इंगित करने के लिए अपना उत्तर अपडेट कर दिया है। धन्यवाद!
जस्टिन आर।

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

33

पावरशेल इंटरपोल करता है, है ना?

PHP में

echo "filesizecounter: " . $filesizecounter 

के रूप में भी लिखा जा सकता है:

echo "filesizecounter: $filesizecounter" 

PowerShell में ऐसा कुछ आपकी आवश्यकताओं के अनुरूप होना चाहिए:

Write-Host "filesizecounter: $filesizecounter"

9
PHP का इस प्रश्न में कुछ भी कोई लेना देना नहीं है
रेगैगिटेरिट


14

पावरशेल में प्रतिध्वनित करने का अब तक का सबसे आसान तरीका है, बस स्ट्रिंग ऑब्जेक्ट बनाएं और इसे पाइपलाइन आउटपुट दें:

$filesizecounter = 8096
"filesizecounter : $filesizecounter"

बेशक, आप कुछ लचीलेपन का त्याग करते हैं जब लिखो- * विधियों का उपयोग नहीं करते हैं।


9

गूंज लिखने-आउटपुट के लिए उपनाम है, हालांकि यह लिखें-होस्ट के समान है ।

ऐसा नहीं है कि पावरशेल में गूंज और राइट-होस्ट में क्या अंतर है?

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



5

मुझे नहीं पता कि ऐसा करने में समझदारी है, लेकिन आप बस लिख सकते हैं

"filesizecounter: " + $filesizecounter

और यह उत्पादन करना चाहिए:

filesizecounter: मूल्य


1
"filesizecounter: $filesizecounter"और भी छोटा है।
जिग्गंजर

3

PowerShell में कई सामान्य आदेशों जैसे उपनाम हैं echo। PowerShell में निम्न टाइप करें:

Get-Alias echo

प्रतिक्रिया पाने के लिए:

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           echo -> Write-Output

यहां तक ​​कि गेट-एलियास का एक उपनाम भी है gal -> Get-Alias। आप के gal echoलिए उपनाम पाने के लिए लिख सकते हैं echo

gal echo

अन्य उपनाम यहां सूचीबद्ध हैं: https://docs.microsoft.com/en-us/powershell/scripting/learn/using-familiar-command-names?view=powershell-6

cat dir mount rm cd echo move rmdir chdir erase popd sleep clear h ps sort cls history pushd tee copy kill pwd type del lp r write diff ls ren


2

प्रयत्न Get-Content .\yourScript.PS1 और आप अपनी स्क्रिप्ट की सामग्री देखेंगे।

यह भी आप अपने कोड में इस लाइन को सम्मिलित कर सकते हैं:

get-content .\scriptname.PS1
script code
script code

....


संसाधित किए गए वास्तविक मान नहीं दिखाए जाते हैं (जैसे env var प्रतिस्थापन) तो पूछे गए प्रश्न का उत्तर नहीं।
iisystems

0

यह भी उल्लेख किया जाना चाहिए, कि सेट-पीएसबग पुराने स्कूल के echo onबैच कमांड के समान है:

Set-PSDebug -Trace 1

इस कमांड के परिणामस्वरूप निष्पादित स्क्रिप्ट की प्रत्येक पंक्ति दिखाई जाएगी:

जब Traceपैरामीटर का मान 1 होता है, तो स्क्रिप्ट की प्रत्येक पंक्ति का पता लगाया जाता है क्योंकि यह चलता है। जब पैरामीटर में 2 का मान होता है, तो चर असाइनमेंट, फ़ंक्शन कॉल और स्क्रिप्ट कॉल का भी पता लगाया जाता है। यदि चरण पैरामीटर निर्दिष्ट किया गया है, तो आपको स्क्रिप्ट चलाने की प्रत्येक पंक्ति से पहले संकेत दिया जाता है।

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