2009-09-24 8 views
8

मैं सीआई के लिए हडसन संस्करण 1.324 उपयोग कर रहा हूँ और मुद्दों की एक जोड़ी है:पावरशेल स्क्रिप्ट निष्पादित करने के लिए हडसन सीआई कैसे प्राप्त करें?

पर्यावरण:

  • विंडोज सर्वर 2008
  • PowerShell V1.0
  • हडसन 1.324 एक के रूप में चल सेवा
  • हडसन पावरहेल प्लगइन स्थापित
  • साइके (उर्फ। "पाइथहेल मेक/रेक" गीथब से उपलब्ध) 0.23 (सभी वर्तमान/नवीनतम इस आरंभिक पोस्ट के रूप में संस्करणों)

मैं एक Powershell (पी एस) स्क्रिप्ट संकलित करने के लिए काम करता है, को चलाने NUnit परीक्षण है, और यदि सफल, उत्पादन का एक 7z फ़ाइल बनाएँ। पीएस स्क्रिप्ट कमांड लाइन से काम करता है, मेरे स्थानीय विकास बॉक्स के साथ-साथ सीआई सर्वर पर जहां हडसन स्थापित है।

1) पावरहेल के साथ निष्पादन नीति।

मैंने शुरुआत में सर्वर पर एक पीएस कंसोल चलाया, Set-ExecutionPolicy Unrestricted चलाया, जो किसी भी स्क्रिप्ट को चलाने की अनुमति देता है। (हाँ, मुझे यहां सुरक्षा चिंताओं का एहसास है, मैं कुछ काम करने की कोशिश कर रहा हूं और अप्रतिबंधित सुरक्षा मुद्दों को दूर करना चाहिए ताकि मैं अन्य समस्याओं पर ध्यान केंद्रित कर सकूं।)

[यह काम करता है, और मुझे आग लगने की अनुमति देता है कल हडसन से पीएस बिल्ड स्क्रिप्ट। । मैं तो एक और समस्या का सामना करना पड़ा है, लेकिन हम चर्चा करेंगे कि आइटम # 2 में और अधिक]

एक बार हडसन एक पी एस स्क्रिप्ट बंद आग सकता है, यह निम्न त्रुटि के साथ शिकायत की:

"C:\Windows\system32\WindowsPowerShell\v1.0\powershell "& 'OzSystems.Tools\psake\psake.ps1' '.\oz-build.ps1'" The term 'OzSystems.Tools\psake\psake.ps1' is not recognized as a cmdlet, funct ion, operable program, or script file. Verify the term and try again. At line:1 char:2 + & <<<< 'OzSystems.Tools\psake\psake.ps1' '.\oz-build.ps1'"

समान आदेश का उपयोग करना लाइन, मैं मैन्युअल रूप से कमांड लाइन से पीएस स्क्रिप्ट को सफलतापूर्वक निष्पादित करने में सक्षम हूं। हालांकि हडसन पीएस को ऐसा करने में असमर्थ है। अतिरिक्त पीएस दस्तावेज देखने के बाद मैंने यह भी कोशिश की:

"& 'OzSystems.Tools\psake\psake.ps1' '.\oz-build.ps1'" 

और इसी तरह की त्रुटि मिली। हडसन के लिए पावरहेल प्लगइन के लिए कोई प्रलेखन प्रतीत नहीं होता है। मैं सभी पावरहेल प्लगइन फाइलों के माध्यम से चला गया है और कॉन्फ़िगर करने योग्य कुछ भी नहीं देख रहा हूं। मुझे अतिरिक्त जानकारी प्राप्त करने के लिए हडसन के लिए लॉग फ़ाइल नहीं मिल रही है।

क्या कोई मुझे इस से पहले मदद कर सकता है?

2) मैंने कल # 1 के साथ कुश्ती बिताई। मैं इस एएम में आया और हडसन सर्वर/सेवा को पुनरारंभ करने के बाद फिर से खोदने की कोशिश की, और अब ऐसा प्रतीत होता है कि ExecutionPolicy को प्रतिबंधित करने के लिए रीसेट कर दिया गया है। मैंने कल क्या किया, मैंने एक पीएस कंसोल खोला और Set-ExecutionPolicyUnrestricted पर खोला। यह पीएस कंसोल में Unrestricted दिखाता है, लेकिन हडसन का कहना है कि इसे पीएस स्क्रिप्ट निष्पादित करने का अधिकार नहीं है। मैंने एक नया पीएस कंसोल दोबारा खोल दिया और पुष्टि की कि ExecutionPolicy अभी भी Unrestriced है - यह है। लेकिन हडसन स्पष्ट रूप से इस परिवर्तन से अवगत नहीं है। हडसन सेवा को फिर से शुरू करने से नीति के हडसन के दृष्टिकोण को नहीं बदला जाता है।

क्या किसी को पता है कि यहां क्या हो रहा है?

धन्यवाद, डेरेक

+0

मैं ठीक उसी समस्या में चल रहा हूँ। ईमानदारी से यह शक्तियों को लगता है कि बैश के साथ तुलनीय होने के लिए मेरे बाहर है। बहुत अधिक सुरक्षा! – stimms

+0

दर्दनाक प्रक्रिया है कि हस्ताक्षर करने लिपि (http://www.hanselman.com/blog/SigningPowerShellScripts.aspx) मदद नहीं की के माध्यम से जा रहे हैं। FYI करें। – stimms

+0

सुनिश्चित करें कि आपने किसी भी तरह से -स्कोप टर्मिनल के बजाय -स्कोप CurrentUser के लिए सेट-निष्पादन नीति नहीं बनाई है ... और सुनिश्चित करें कि हडसन किसी अन्य क्लाइंट पर आपके निर्माण को चलाने की कोशिश नहीं कर रहा है;) – Jaykul

उत्तर

1

# 1 प्रश्न के लिए, यह (आप PowerShell 2.0 का उपयोग कर रहे हैं यह सोचते हैं) की कोशिश:

"C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ powershell -executionPolicy अप्रतिबंधित - फ़ाइल OzSystems.Tools \ psake \ psake.ps1 सी: \ {पथ} \ oz-build.ps1 "

आप"। "का उपयोग कर रहे हैं। oz-build.ps1 के पथ के लिए। मुझे संदेह है कि आपको यह काम करने के लिए अपने oz-build.ps1 फ़ाइल को पूरा पथ प्रदान करने की आवश्यकता होगी। जब तक ऊपर दिए गए आदेश को निष्पादित करने वाले बुनियादी ढांचे में वर्तमान डीआईआर सही ढंग से सेट नहीं होता है। और यहां तक ​​कि अगर यह "प्रक्रिया" के लिए सही ढंग से सेट किया गया है, तो यह केवल .NET/Win32 API कॉल के लिए महत्वपूर्ण है, न कि PowerShell cmdlets पर। पावरशेल में वर्तमान डीआईआर प्रक्रिया की वर्तमान डीआईआर की तुलना में अलग-अलग ट्रैक किया जाता है क्योंकि पावरशेल में एक साथ चलने वाले एकाधिक रनस्पेस हो सकते हैं। इस तरह के वैश्विक, परिवर्तनीय मूल्य इस समवर्ती परिदृश्य में काम नहीं करते हैं।

प्रश्न # 2 के लिए, हडसन सेवा किस खाते में चलती है? सुनिश्चित करें कि खाते ने सेट-एक्जिक्यूशन पॉलिसी रिमोटसाइन (या अप्रतिबंधित) निष्पादित किया है।

+0

कीथ, मैं ' मैंने # 1 के लिए सुझावों का प्रयास किया है। वही समस्याएं # 2 के लिए, हां, मैंने यह सुनिश्चित कर लिया है कि एक्जिक्यूशन पॉलिसी उस खाते के लिए सेट है जो हडसन चल रहा है। ExecutionPolicy जांचने के लिए मैन्युअल रूप से लॉग इन करते समय यह अप्रतिबंधित है। हडसन अभी भी कह रहा है कि स्क्रिप्ट अक्षम हैं। हम के बारे में Powershell पर बाज़ी और हडसन के साथ रैक की कोशिश करने का कर रहे हैं। ऐसा लगता है कि पीएस प्रधान समय के लिए काफी तैयार नहीं है, या कम से कम हमारे लिए भरोसा करने के लिए लगातार पर्याप्त व्यवहार नहीं कर रहा है। इनपुट कीथ के लिए धन्यवाद! – user178557

+0

छोड़ने से पहले, -ExecutionPolicy अप्रतिबंधित पैरामीटर का उपयोग करने का प्रयास करें। मैंने इसे दिखाने के लिए ऊपर दिए गए उदाहरण को संशोधित किया है। –

1

मुझे आपके जैसी ही समस्याएं हैं (जैसा कि आपने मेरी टिप्पणियों से देखा है)। मैंने पावरहेल लॉन्चर पर छोड़ दिया है और बैच फ़ाइल लॉन्चर का उपयोग करके चलने वाली चीजों में स्थानांतरित हो गया है। भले ही मैंने सिस्टम को अप्रतिबंधित करने के लिए सेट किया था कि सेटिंग हडसन के लॉन्चर से कोई फर्क नहीं पड़ता। मुझे नहीं पता कि यह किसी अन्य संदर्भ या कुछ में चलता है, यहां तक ​​कि वैश्विक प्रोफ़ाइल में चीजें जोड़ना भी .ps1 मदद नहीं कर रहा था। मैं क्या कर रहा था

powershell " set-executionpolicy Unrestricted; & 'somefile.ps1'" 

जो मुझे चाहिए, हालांकि यह आदर्श नहीं है। मैंने इस बारे में प्लगइन लेखक को ईमेल किया है और अपडेट करूँगा।

2

जब एक निर्धारित कार्य या हडसन से PowerShell चल रहा है आप चाहते हैं: (: -Ex Unrestricted अपने मामले में)

  • या तो-Command { ... } या -Fileनहीं का उपयोग कर कि आदेश निर्दिष्ट करें

    1. -ExecutionPolicy पैरामीटर निर्दिष्ट दोनों और बिना किसी निर्दिष्ट के निर्दिष्ट।

    इस प्रयास करें (सिवाय इसके कि मैं संबंधित पथ उपयोग करने की अनुशंसा नहीं करते हैं):

    PowerShell.exe -Ex Unrestricted -Command "C:\Path\To\OzSystems.Tools\psake\psake.ps1" ".\oz-build.ps1" 
    

    स्पष्ट है कि, यह भी काम करेगा:

    PowerShell.exe -Ex Unrestricted -Command "&{&'OzSystems.Tools\psake\psake.ps1' '.\oz-build.ps1'}" 
    

    -Command के बाद पहली स्ट्रिंग एक COMMAND के नाम के रूप में व्याख्या की जाती है, और इसके बाद प्रत्येक पैरामीटर केवल उस कमांड को पैरामीटर के रूप में पास कर दिया जाता है। स्ट्रिंग एक स्क्रिप्ट नहीं है, यह एक कमांड का नाम है (इस मामले में, एक स्क्रिप्ट फ़ाइल) ... आप "&'OzSystems.Tools\psake\psake.ps1'" डाल सकते हैं लेकिन आप "OzSystems.Tools\psake\psake.ps1" डाल सकते हैं भले ही इसमें रिक्त स्थान हों।

    मदद से (रन PowerShell -?) जोर मेरा शब्दों में:

    -Command

    Executes the specified commands (and any parameters) as though they were typed at the Windows PowerShell command prompt, and then exits, unless NoExit is specified. The value of Command can be "-", a string. or a script block.

    If the value of Command is "-", the command text is read from standard input.

    If the value of Command is a script block, the script block must be enclosed in braces ({}). You can specify a script block only when running PowerShell.exe in Windows PowerShell. The results of the script block are returned to the parent shell as deserialized XML objects, not live objects.

    If the value of Command is a string, Command must be the last parameter in the command , because any characters typed after the command are interpreted as the command arguments.

  • 1

    मैं सिर्फ इस सटीक समस्या के माध्यम से मिला है। क्या मुसीबत है!

    आप एक 64-बिट Windows पर एक 32-बिट JVM चला रहे हैं, सुनिश्चित करें कि आप 32-बिट Powershell इंटरफेस के लिए निष्पादन नीति सेट है कि सुनिश्चित करें। मैं अपने 32 बिट यहाँ निष्पादन योग्य पाया:

    C:\Windows\syswow64\Windowspowershell\v1.0\powerhsell.exe 
    

    32- और 64-बिट Powershell वातावरण तो एक में निष्पादन नीति की स्थापना दूसरे पर कोई प्रभाव नहीं है पूरी तरह से अलग हैं।

    7

    मैं सिर्फ हडसन में powershell स्क्रिप्ट चला की समस्या हुई थी। बात यह है कि आप जावा की 32-बिट प्रक्रिया चला रहे हैं, और आपने 64-बिट के लिए हडसन को कॉन्फ़िगर किया है लेकिन 32-बिट के लिए नहीं। माइक्रोसॉफ्ट पर बनाए गए निम्नलिखित धागे को देखें।

    http://social.technet.microsoft.com/Forums/en/winserverpowershell/thread/a9c08f7e-c557-46eb-b8a6-a19ba457e26d

    अपने आलसी हैं। 1. स्टार्ट मेनू से व्यवस्थापक के रूप में प्रारंभ करेंशक्ति (x86) प्रारंभ करें 2.

    इसे एक बार और अपने होमफ्री को चलाने के लिए निष्पादन नीति सेट करें।

    +0

    धन्यवाद! मुझे मूल पोस्टर की तुलना में थोड़ा अलग समस्या थी, लेकिन x86 में निष्पादन नीति को सेट करने के साथ ही मेरी समस्या को ठीक किया गया। –

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