अपडेट करें :
- द
if ($LASTEXITCODE -eq 0) ...
दृष्टिकोण बाहरी कार्यक्रमों के साथ मजबूती से काम करना जारी रखेगा। - हालांकि, यदि और कब पूर्व-v7.2 प्रयोगात्मक विशेषता
नाम
PSNotApplyErrorActionToStderr
एक आधिकारिक विशेषता बन जाती है,if ($?) ...
भी मजबूती से काम करेगा - देखें यह जवाब अधिक जानकारी के लिए।
$LASTEXITCODE -eq 0
का उपयोग करें के बजाय $?
गैर-शून्य निकास कोड का मज़बूती से पता लगाने के लिए (आमतौर पर सिग्नलिंग विफलता) एक बाहरी कार्यक्रम द्वारा रिपोर्ट किया गया।
फिर आप *> $null
का उपयोग कर सकते हैं सभी आउटपुट को स्पष्ट रूप से दबाने के लिए $?
. पर उस पुनर्निर्देशन के प्रभाव के बारे में चिंता किए बिना :
mysql -u root --password=mypass -e "show databases" *>$null
if ($LASTEXITCODE -eq 0) {
"Hooray!"
} else {
"Boo!"
}
एक पुनर्निर्देशन का उपयोग करना जिसमें PowerShell की त्रुटि स्ट्रीम शामिल है - या तो स्पष्ट रूप से 2>
. के माध्यम से या परोक्ष रूप से *>
. के माध्यम से - का अर्थ है कि यदि उस स्ट्रीम के माध्यम से कोई डेटा प्राप्त होता है - जिसका बाहरी प्रोग्राम को कॉल करने के मामले में stderr से कोई भी आउटपुट होता है - पॉवरशेल $?
सेट करता है से $false
।
हालांकि, बाहरी कंसोल/टर्मिनल प्रोग्राम के दायरे में, stderr का उपयोग केवल त्रुटि को आउटपुट करने के लिए नहीं किया जाता है। जानकारी, लेकिन कोई भी जानकारी जो डेटा नहीं है , जैसे स्थिति की जानकारी। इसलिए, आप stderr आउटपुट की उपस्थिति से विफलता का अनुमान नहीं लगा सकते हैं ।
बाहरी कंसोल/टर्मिनल प्रोग्राम केवल अपने निकास कोड . के माध्यम से अपनी सफलता की स्थिति का संचार करते हैं , जिसे PowerShell स्वचालित $LASTEXITCODE
. में दर्शाता है चर।
ऊपर से यह पता चलता है कि $?
$false
हो सकता है भले ही एग्जिट कोड 0
. हो , इसलिए यह एक विश्वसनीय सफलता संकेतक नहीं है - $LASTEXITCODE
. के विपरीत ।