php

2011-03-15 7 views
9

से पावरशेल स्क्रिप्ट निष्पादित करने में मैं PHP से पावरहेल स्क्रिप्ट निष्पादित करने का प्रयास कर रहा हूं, लेकिन ऐसा लगता है कि यह काम नहीं करता है।php

स्क्रिप्ट 'newEvent.ps1' एक्सचेंज सर्वर पर एक ईवेंट बनाता है।

$psPath = "powershell.exe"; 
$psDIR = "C:\\wamp\\www\\ant\\assets\\ps\\"; 
$psScript = "newEvent.ps1"; 
$runScript = $psDIR. $psScript; 
$runCMD = $psPath." ".$runScript." 2>&1"; 

echo "\$psPath $psPath <br>"; 
echo "\$psDIR $psDIR <br>"; 
echo "\$psScript $psScript <br>"; 
echo "\$runScript $runScript <br>"; 
echo "\$runCMD $runCMD <br>"; 

exec($runCMD,$out,$ret); 

echo "<pre>"; 
print_r($out); 
print_r($ret); 
echo "</pre>"; 

यह आउटपुट:

$psPath powershell.exe 
$psDIR C:\wamp\www\ant\assets\ps\ 
$psScript newEvent.ps1 
$runScript C:\wamp\www\ant\assets\ps\newEvent.ps1 
$runCMD powershell.exe C:\wamp\www\ant\assets\ps\newEvent.ps1 2>&1 

Array 
(
    [0] => File C:\wamp\www\ant\assets\ps\newEvent.ps1 cannot be loaded because the execut 
    [1] => ion of scripts is disabled on this system. Please see "get-help about_signing" 
    [2] => for more details. 
    [3] => At line:1 char:39 
    [4] => + C:\wamp\www\ant\assets\ps\newEvent.ps1 <<<< 
    [5] =>  + CategoryInfo   : NotSpecified: (:) [], PSSecurityException 
    [6] =>  + FullyQualifiedErrorId : RuntimeException 
    [7] => 
) 

अगर मैं कमांड लाइन पर powershell.exe C:\wamp\www\ant\assets\ps\newEvent.ps1 चलाने के लिए, यह ठीक काम करता है।

यह पहली बार ऐसा कुछ करने का प्रयास कर रहा है। मैं Set-ExecutionPolicy RemoteSigned -Scope LocalMachine भाग गया लेकिन यह अभी भी मुझे एक ही त्रुटि देता है। वास्तव में मैं Set-ExecutionPolicy unristricted चला गया, लेकिन यह अभी भी वही है।

+0

आपके द्वारा चलाए जा रहे कमांड लाइन को देखें। –

+0

32-बिट और 64-बिट दोनों उदाहरणों में जाना सुनिश्चित करें और निष्पादन नीति सेट करें फिर पुन: प्रयास करें।-> सेट-एक्जिक्यूशन पॉलिसी अप्रतिबंधित –

उत्तर

8

ऐसा लगता है कि आपका आदेश एकल-उद्धरण से घिरा हुआ है। मुझे लगता है कि अगर आप उन्हें हटा देते हैं, तो आपका आदेश चलाना चाहिए।

shell_exec आपके द्वारा चलाए जाने वाले आदेश से आउटपुट लौटाता है। आगे निदान करने के लिए, एक चर में आउटपुट को स्टोर करने के लिए, इसे प्रिंट करें:

$output= shell_exec($runCMD); 
echo('<pre>'); 
echo($output); 
echo('</pre>'); 

सुनिश्चित करें कि आप चल रहे स्क्रिप्ट सक्षम करते हैं। डिफ़ॉल्ट रूप से वह क्षमता बंद हो जाती है। आपको प्रत्येक मशीन पर स्क्रिप्ट के निष्पादन को सक्षम करना है जिसे आप PowerShell स्क्रिप्ट चलाने के लिए चाहते हैं। अधिक जानकारी के लिए about help_signing चलाएं।

माइक्रोसॉफ्ट Set-ExecutionPolicy RemoteSigned -Scope LocalMachine चलाने की सिफारिश करता है। यह किसी भी समस्या के बिना स्थानीय स्क्रिप्ट चलाने के लिए मशीन पर सभी उपयोगकर्ता खातों को अनुमति देता है, लेकिन इंटरनेट से डाउनलोड की गई स्क्रिप्ट चलाने की पुष्टि की आवश्यकता होती है। इसे एक प्रशासनिक संकेत में चलाने की जरूरत है। यदि आप 64-बिट ऑपरेटिंग सिस्टम चला रहे हैं, तो आपको इसे 64-बिट और 32-बिट खोल दोनों से करना होगा।

+0

दोनों थक गए, कोई किस्मत नहीं। – heshanh

+0

आपके द्वारा प्राप्त किए जा रहे त्रुटि संदेश के आपके अतिरिक्त को प्रतिबिंबित करने के लिए बस मेरे उत्तर को अपडेट किया गया है। –

+1

ठीक है इसे http://stackoverflow.com/questions/4647429/powershell-on-windows-7-set-executionpolicy-for-regular-users को x86 और 64 बिट कंसोल दोनों पर चलाने की आवश्यकता है केवल 64 बिट कंसोल पर यह कर रहा है। – heshanh

0

किसी अन्य वेबसाइट पर इस मिला और सोचा था कि मैं के साथ इसे पारित होगा:

मैं एक कार्यक्रम Windows API (पुन: निर्देशित इनपुट और आउटपुट के साथ एक बाल प्रक्रिया बनाना) का उपयोग करता है के माइक्रोसॉफ्ट के stdout कब्जा करने के लिए डिबगिंग गया था विंडोज पावरशेल

पावरशेल (-फाइल स्विच) को पारित स्क्रिप्ट निष्पादित नहीं हुई और पावरशेल बस कार्य प्रबंधक द्वारा मारे जाने तक फांसी लगा दी गई।

ऐसा लगता है कि आप " कोई भी -InputFormat" गैर-दस्तावेजी पैरामीटर का उपयोग करने की जरूरत है:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -InputFormat none -File file.ps1

यह मेरे लिए चाल किया था।

+1

यह आमतौर पर स्रोत, साइट पर 'लिंक' करने के लिए अच्छा रूप है, यह मानते हुए कि यह '! NSFW' है। –

2

"-executionPolicy Unrestricted" कमांड के साथ "powershell.exe" का उपयोग करें। इसलिए आदेश होगा:

powershell.exe -executionPolicy Unrestricted 

फिर यह निश्चित रूप से काम करेगा।

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

  • कोई संबंधित समस्या नहीं^_^