2010-11-08 13 views
27

BAT/CMD स्क्रिप्ट के साथ मैं बस "msiexec /i <whatever.msi> /quiet /norestart" का उपयोग कर सकता हूं और फिर परिणाम के लिए %errorlevel% देख सकता हूं।पावरशेल से MsiExec चलाएं और रिटर्न कोड

"result = oShell.Run("msiexec /i ...", 1, True)" 

मैं कैसे PowerShell के साथ ऐसा कर सकते हैं:

VBScript साथ

, Wscript.Shell वस्तु Run() पद्धति का उपयोग करके, मैं इस तरह परिणाम प्राप्त कर सकते हैं?

+0

पूर्ण स्रोत कोड के साथ कोई नमूना? – Kiquenet

उत्तर

48

मुझे लगता है कि लपेट प्रारंभ प्रक्रिया में और जिसके परिणामस्वरूप प्रक्रिया वस्तु की ExitCode संपत्ति का प्रयोग करेंगे। उदाहरण के लिए

(Start-Process -FilePath "msiexec.exe" -ArgumentList "<<whatever>>" -Wait -Passthru).ExitCode 
+0

यही वह है जिसे मैं ढूंढ रहा था! हालांकि, यह "ArgumentList" नहीं है "ArgumentsList", लेकिन किसी भी मामले में आपने प्रश्न का उत्तर दिया - धन्यवाद! – Skatterbrainz

+0

हा .. यह एक टाइपो था। मैंने अभी अपना जवाब संपादित किया है। – ravikanth

+2

नोट्स; 1. उद्धृत-एर्ग्यूमेंटलिस्ट के अंदर, तर्क अंतरिक्ष-सीमित हैं और एकल उद्धरणों का उपयोग नाम में रिक्त स्थान वाले पथों को रखने के लिए किया जा सकता है। 2. एक्स्टिटोड केवल तभी उपलब्ध हो जाता है जब सभी स्पॉन्डेड विंडो बंद हो जाएं; 3. मैं पीएस v4.0 पर हूँ। – AnneTheAgile

18
$LastExitCode 

या

$? 

क्या आप के बाद कर रहे हैं पर निर्भर करता है। पूर्व एक पूर्णांक है, उत्तरार्द्ध सिर्फ एक बुलियन है। इसके अलावा, $LastExitCode केवल देशी प्रोग्राम चलाने के लिए आबादी है, जबकि $? आम तौर पर बताता है कि अंतिम आदेश चलाने सफल था या नहीं - इसलिए यह cmdlets के लिए भी सेट किया जाएगा।

PS Home:\> cmd /c "echo foo"; $?,$LASTEXITCODE 
foo 
True 
0 
PS Home:\> cmd /c "ech foo"; $?,$LASTEXITCODE 
'ech' is not recognized as an internal or external command, 
operable program or batch file. 
False 
1