2010-03-01 5 views
7

PowerShell आदेश को चलाने के लिए php में निम्न आदेश को चलाने के लिए कोशिश कर रहा है ...पीएचपी PowerShell आदेश

निम्नलिखित काम करता है:

$output = shell_exec(escapeshellcmd('powershell get-service | group-object')); 

मैं इस तरह यह नहीं चल सकता:

$output = shell_exec('powershell get-service | group-object'); 

यह पाइप पास नहीं करेगा | चरित्र

लेकिन अगर मैं चलाने का प्रयास:

$output = shell_exec(escapeshellcmd('powershell get-service | where-object {$_.status -eq "Running"}')); 

मुझे कोई उत्पादन मिलता है।

निम्नलिखित:

$cmd = escapeshellcmd('powershell get-service | where-object {$_.status -eq "Running"}'); 

रिटर्न:

powershell get-service ^| where-object ^{^$_.status -eq ^"Running^"^} 

क्यों यह हो रहा है और कैसे इसे ठीक करने पर कोई सुझाव?

संपादित करें: मैं इसे .ps1 स्क्रिप्ट के रूप में चला सकता हूं लेकिन मैं इसे $ var पास करने में सक्षम होना चाहता हूं।

उत्तर

4

मैं एक स्टैब ले जाऊंगा हालांकि मेरे पास कोई PHP अनुभव नहीं है।

मुझे एहसास है कि क्या हो रहा है कि आपके पाइप चरित्र का अर्थ PowerShell के बजाय कमांड शैल द्वारा किया जा रहा है।

dir /s | more 

पहले आदेश के उत्पादन में दूसरे के इनपुट, जैसा कि आपने PowerShell में उम्मीद थी को पहुंचाया जाता है: उदाहरण के लिए यदि आप cmd.exe कमांड प्रॉम्प्ट पर निम्न भाग गया।

स्ट्रिंग से बचने से समस्या केवल खराब हो जाएगी क्योंकि आप स्ट्रिंग को इस तरह से बदल रहे हैं कि PowerShell को यह पता नहीं है कि इसे कैसे अनदेखा करना है।

निम्नलिखित की तरह एक बोली में अपने मूल PowerShell अभिव्यक्ति संलग्न प्रयास करें:

$output = shell_exec('powershell.exe -c "get-service | group-object"'); 

या अधिमानतः, ऐसा लगता है जैसे वहाँ एक exec() फ़ंक्शन कि आदेश खोल के माध्यम से जाना नहीं है। यह बेहतर काम कर सकता है।

$output = exec('powershell.exe -c get-service | group-object'); 
+1

shell_exec ('powershell -c "मिल-सेवा | जहां-वस्तु {$ _ स्थिति -eq \।" चल रहा \ "}');! की तरह एक आकर्षण जोश, धन्यवाद काम किया –

+0

कार्यकारी दें एक शॉट भी कमांड करें। चूंकि आप पावरशेल को सीधे कॉल कर रहे हैं, पहले कमांड शेल के माध्यम से जाने की कोई वास्तविक आवश्यकता नहीं है। यह प्रतिशत प्रतीकों जैसे अन्य पात्रों के साथ भी मुद्दों से बच सकता है। – Josh

+0

निष्पादन कमांड पसंद नहीं है। –

2
'powershell get-service | group-object' 

  1. रन powershell रूप में समझा जाएगा और (यानी नहीं के उत्पादन में एक तर्क
  2. तो पाइप powershell के उत्पादन group_object के रूप में इसे पाने के सेवा पारित सेवा प्राप्त करें)

आप जो चाहते हैं वह शक्तियों के लिए है नरक get-service | group-object को यह तर्क के रूप में देखने के लिए, इसलिए आपको इस तरह उद्धरणों में संलग्न करना होगा।

$output = shell_exec('powershell "get-service | group-object"');