2010-10-24 9 views
27

मैं पावरहेल के साथ एक बिल्ड स्क्रिप्ट लिख रहा हूं। स्क्रिप्ट में इस तरह के, SVN बंद नवीनतम स्रोत कोड हो रही बैकअप, आदि के रूप में विभिन्न कार्यों प्रदर्शन करती है, और समाधान MSBuild का उपयोग कर बनाता है:पावरहेल स्क्रिप्ट में एमएसबिल्ड - बिल्ड कैसे सफल हुआ मुझे कैसे पता चलेगा?

cmd /c C:\WINDOWS\Microsoft.NET\Framework\v3.5\msbuild.exe "C:\Dev\Path\MyProjct.sln" /p:Configuration=Release 

इस निर्देश के बाद, मैं केवल स्क्रिप्ट अगर के बाकी पर अमल करना चाहते हैं संकलन सफल हुआ। मैं इसे कैसे देख सकता हूं?

प्रोजेक्ट एक वेब प्रोजेक्ट है, इसलिए आउटपुट की जांच करना इतना आसान नहीं है, लेकिन मुझे लगता है कि कुछ चरों में संकलन परिणाम होगा। इसके अलावा से मैं एमएसबिल्ड को cmd/c के साथ कॉल करता हूं, क्या मैं इन चरों तक पहुंचने में सक्षम हूं?

+0

मैं बस उत्सुक हूँ ... क्यों निर्माण करने के लिए एक PowerShell स्क्रिप्ट का उपयोग? एमएसबील्ड फ़ाइल का उपयोग क्यों न करें और एसवीएन से प्राप्त सामान जैसी चीजें करने के लिए एक्सटेंशन कार्य पुस्तकालयों का उपयोग क्यों करें? पावरशेल शांत और शक्तिशाली है लेकिन कुछ हद तक आप कठिन तरीके से ले रहे हैं। – slugster

+0

खैर, पहली बात यह है कि मुझे वास्तव में एमएसबिल्ड नहीं पता है, लेकिन मुझे एक विचार है कि यह इमारत के लिए एक उपकरण है, और मैं किसी और चीज (एसवीएन, विनर, ...) के साथ बातचीत करने के लिए संघर्ष कर सकता हूं। मेरे लिए इमारत विकास प्रक्रिया का केवल 5% है और मुझे लगता है कि एक स्क्रिप्टिंग भाषा अन्य 95% के लिए सबसे उपयुक्त है। लेकिन मुझे गलत होने में खुशी है। –

+2

एमएसबिल्ड एक महान कार्य उन्मुख निर्भरता उपकरण है। PowerShell का उपयोग कई परिदृश्यों को सक्षम बनाता है और उत्पाद उन्मुख दृष्टिकोण सक्षम बनाता है। पीएसके भी देखें, हम इसका इस्तेमाल करते हैं। जब आप चीजें विस्तारित करना चाहते हैं, तो आपको सी # (एमएसबिल्ड कार्य) में छोड़ना नहीं है। आप बस अधिक PowerShell जोड़ें। –

उत्तर

36

MSBUILD पर कॉल के ठीक बाद $LastExitCode का मान देखें। यदि यह 0 है, तो MSBUILD सफल हुआ, अन्यथा यह असफल रहा।

बीटीडब्ल्यू सीएमडी/सी का उपयोग करने की कोई आवश्यकता नहीं है। बस MSBUILD.exe को सीधे कॉल करें। हम PowerShell स्क्रिप्ट में हर समय ऐसा करते हैं।

+0

जब आप $ LastExitCode का उपयोग करते हैं तो आपको त्रुटि संदेश कैसे मिलता है? – Rookian

+0

आप exe (stderr सहित) के आउटपुट को कैप्चर कर सकते हैं। यह $ LastExitCode के मान की जांच से अलग है। –

+0

मैं सी # सिस्टम का उपयोग करता हूं। प्रबंधन .ऑटोमेशन। पावरशेल ऑब्जेक्ट और सिंक्रोनस इनकोक विधि को कॉल करें। समस्या यह है कि न तो त्रुटि स्ट्रीम में कोई प्रविष्टि है और न ही PowerShell.HadErrors सत्य है। – Rookian

10

सफलता/विफलता की जांच करने के लिए, स्वचालित चर $? का उपयोग करें।

 
PS> help about_Automatic_Variables 


    $? 
     Contains the execution status of the last operation. It contains 
    TRUE if the last operation succeeded and FALSE if it failed. 
उदाहरण के लिए

:

 
msbuild 
if (! $?) { throw "msbuild failed" } 
+5

जबकि इस मामले में '$?' काम करता है, तो बस जागरूक रहें कि कई कंसोल exes (विशेष रूप से माइक्रोसॉफ्ट टूल्स) कई सफलता कोड वापस करने के लिए निकास कोड तर्क को उलटा करते हैं। तो 'ex? 'उन पूर्वजों पर काम नहीं करेगा। –

संबंधित मुद्दे