Duplicate Question and Answer I Posted, यहां पोस्ट करने के लिए मतदान के लिए पोस्टरिटी के लिए यहां। मुख्य अंतर यह है कि यह प्रश्न ओओटीबी होने के लिए बाध्य था और मेरा आत्म-जवाब उस बाधा के भीतर रहता है।
प्रश्न
Powershell एक तरीका है कि सही ढंग से कॉल करने कि PowerShell नहीं हैं साथ interoperates में एक मनमाना आदेश और फिर बबल सामने पार्स और निष्पादन त्रुटियों के साथ यह गति प्रदान करने के लिए एक आसान तरीका है करने के लिए प्रतीत नहीं होता है - जैसे, cmd.exe
, TeamCity आदि
मेरा प्रश्न सरल है। ओओटीबी एमएसबिल्ड वी 4 और पावरशेल वी 3 के साथ मेरे लिए सबसे अच्छा तरीका क्या है (सुझावों के लिए खुला- एक उपयुक्त उत्पादन तैयार एमएसबिल्ड टास्क को रद्द नहीं करेगा, लेकिन यह आसान है - पावरशेल टास्क फैक्ट्री नमूना लेने और यह सुझाव देने से थोड़ा मजबूत होना चाहिए। .ps1
स्क्रिप्ट का एक आमंत्रण चलाने के लिए इसे (और आमतौर पर) एक छोटे स्क्रिप्ट सेगमेंट, या (आमतौर पर) एक आमंत्रण चलाने के लिए इसे ट्विक करें (या आमतौर पर)
मुझे लगता है कि यह कुछ सामान्य होना चाहिए:
<Exec
IgnoreStandardErrorWarningFormat="true"
Command="PowerShell "$(ThingToDo)"" />
उदासी काम नहीं करता है कि: -
- अगर
ThingToDo
पार्स करने के लिए विफल रहता है, यह चुपचाप
- विफल रहता है
ThingToDo
एक स्क्रिप्ट मंगलाचरण जो मौजूद नहीं है है, यह विफल रहता है
- अगर आप एक
ERRORLEVEL
आधारित .cmd
परिणाम का प्रचार करना चाहते हैं, यह बालों हो जाता है
- यदि आप
ThingToDo
में "
उद्धरण एम्बेड करना चाहते हैं, यह काम नहीं करेगा
तो, क्या MSBuild से PowerShell होना चाहिए चलाने का बुलेट प्रूफ तरीका है? क्या सबकुछ ठीक करने के लिए मैं कुछ PsGet कर सकता हूं?
उत्तर
Weeeeelll, आप कुछ देर तक इस तरह चढ़ा हुआ इस्तेमाल कर सकते हैं जब तक आप एक बेहतर तरीका खोजने के: -
<PropertyGroup>
<__PsInvokeCommand>powershell "Invoke-Command</__PsInvokeCommand>
<__BlockBegin>-ScriptBlock { $errorActionPreference='Stop';</__BlockBegin>
<__BlockEnd>; exit $LASTEXITCODE }</__BlockEnd>
<_PsCmdStart>$(__PsInvokeCommand) $(__BlockBegin)</_PsCmdStart>
<_PsCmdEnd>$(__BlockEnd)"</_PsCmdEnd>
</PropertyGroup>
और फिर 'सभी' आप क्या करने की जरूरत है:
<Exec
IgnoreStandardErrorWarningFormat="true"
Command="$(_PsCmdStart)$(ThingToDo)$(_PsCmdEnd)" />
इस की एकल रिडीमिंग सुविधा (सभी त्रुटि प्रकारों को फँसाने के अलावा मैं सोच सकता हूं), यह है कि यह किसी भी पावरशेल संस्करण और किसी भी एमएसबिल्ड संस्करण के साथ ओओटीबी काम करता है।
मुझे अपना कोट मिल जाएगा।
स्रोत
2012-10-10 10:48:17
मैं ब्लॉग पोस्ट को स्टार्टर के रूप में उपयोग करता हूं। हम माइक्रोसॉफ्ट के सलाहकार के साथ काम कर रहे हैं और यह वह पद है जिसने हमें संदर्भित किया है। मैंने कोडप्लेक्स पर पावरहेल एमएसबिल्ड कार्य की कोशिश की, और यह मेरी पावरशेल स्क्रिप्ट पर त्रुटियों से बाहर निकलता है जो बार्ट डी स्मेट-लेखक कार्य में काम करता है। –