2012-03-02 10 views
15

मैंने पूरी खोज की है और कमांड के विभिन्न बदलावों का प्रयास किया है, लेकिन मैं अभी भी वहां नहीं हूं।पावरहेल रिमोट कंप्यूटर पर कमांड लाइन तर्कों के साथ रिमोट एक्सई निष्पादित करें

मेरा लक्ष्य एक exe चलाने के लिए है जो पहले से ही एक दूरस्थ मशीन पर रहता है और कमांड लाइन तर्क में पास करता है। मैंने invoke-command की कोशिश की है, लेकिन मुझे तर्कों को पहचानने के लिए मेरा वाक्यविन्यास नहीं मिल रहा है।

तरीके की कोशिश की:

  1. Win32_Process.Create()
  2. आह्वान-कमान
  3. प्रारंभ प्रक्रिया
  4. [diagnostics.process] :: शुरू
  5. आह्वान-WmiMethod

मेरे परीक्षणों से, निकटतम मैं निम्न आदेश के साथ प्राप्त कर सकता हूं:

$command = "program.exe -r param" 
Invoke-Command -ComputerName $server -ScriptBlock {$command} 

आदेश त्रुटि या वापसी कोड के बिना पूरा करता है, लेकिन दूरस्थ मशीन पर, यह तर्कों के साथ नहीं चला था। मैंने यह देखने के लिए सिंगल/डबल कोट्स के साथ खेला है कि कोई बदलाव है, लेकिन कोई नहीं।

उत्तर

19

आप -ArgumentList पैरामीटर का उपयोग करने की कोशिश किया:

invoke-command -ComputerName studio -ScriptBlock { param ($myarg) ping.exe $myarg } -ArgumentList localhost 

http://technet.microsoft.com/en-us/library/dd347578.aspx

एक प्रोग्राम है जो रास्ते में नहीं है और यह एक जगह है लागू करने का एक उदाहरण फ़ोल्डर पथ है:

invoke-command -ComputerName Computer1 -ScriptBlock { param ($myarg) & 'C:\Program Files\program.exe' -something $myarg } -ArgumentList "myArgValue" 

यदि तर्क का मान स्थिर है तो आप इसे केवल स्क्रिप्ट ब्लॉक में प्रदान कर सकते हैं:

invoke-command -ComputerName Computer1 -ScriptBlock { & 'C:\Program Files\program.exe' -something "myArgValue" } 
+0

त्वरित प्रतिक्रिया के लिए धन्यवाद। किसी कारण से, जब मैं इसे इस तरह से आजमाता हूं, तो मुझे विस्तारित कमांड मुद्रित करने के लिए मिलता है जो काम करेगा यदि मैं इसे मैन्युअल रूप से चलाता हूं, लेकिन यह वास्तव में इसे नहीं चला रहा है। मुझे "&" को हटाना पड़ा क्योंकि यह कहा गया था कि यह भविष्य के उपयोग के लिए एक आरक्षित चरित्र था। – gregs

+0

@gregs मुझे परीक्षण करने के लिए मेरी मशीन पर रिमोटिंग सक्षम करना पड़ा। मैंने कमांड को एक साधारण पिंग टेस्ट में बदल दिया जो स्थानीयहोस्ट का तर्क भेज रहा था। उपर्युक्त मेरे लिए सफल रहा। –

+0

मैंने पकड़ लिया है, लेकिन समाधान नहीं। यह पंक्ति काम करती है अगर मैं तर्क के रूप में ping.exe और "localhost" का उपयोग करता हूं, लेकिन पथ के स्थान के बाद से मुझे अपने निष्पादन योग्य पथ के चारों ओर उद्धरण देना पड़ रहा है। जब मैं ऐसा करता हूं, तो यह मेरे पीछे उद्धरण में मेरी स्ट्रिंग को इकोस करता है, लेकिन मुझे नहीं लगता कि यह चलता है। – gregs

-2
$sb = ScriptBlock::Create("$command") 
Invoke-Command -ScriptBlock $sb 

यह काम करते हैं और शुरुआती भ्रामक से बचना चाहिए।

3

क्या आप इसे लॉन्च करते समय प्रोग्राम में कमांड लाइन तर्क पास करने का प्रयास कर रहे हैं? मैं अभी कुछ पर काम कर रहा हूं जो वास्तव में ऐसा करता है, और यह मैंने सोचा था कि यह बहुत आसान था। मैं कमांड लाइन में जाते हैं, और फिर टाइप

C:\folder\app.exe/xC:\folder\file.txt 

अपने आवेदन की शुरूआत, और निर्दिष्ट नाम के साथ निर्दिष्ट निर्देशिका में फ़ाइल बनाता है।

मैं एक दूरस्थ मशीन पर एक PowerShell स्क्रिप्ट के माध्यम से ऐसा करना चाहता था, और पता लगा कि सब मुझे क्या करना जरूरत सत्र के अंदर

$s = New-PSSession -computername NAME -credential LOGIN 
    Invoke-Command -session $s -scriptblock {C:\folder\app.exe /xC:\folder\file.txt} 
Remove-PSSession $s 

(मैं एक गुच्छा अधिक समान आदेशों रखा गया था, यह वह जगह है केवल न्यूनतम इसे चलाने की आवश्यकता है) निष्पादन योग्य और कमांड लाइन तर्कों के बीच की जगह को नोटिस करें। यह मेरे लिए काम करता है, लेकिन मुझे यकीन नहीं है कि आपका एप्लिकेशन कैसे काम करता है, या यदि यह भी है कि आप इसके लिए तर्क कैसे पारित करते हैं।

* मैं भी अपने आवेदन फ़ाइल

C:\folder\app.exe /x"\\LocalPC\DATA (C)\localfolder\localfile.txt" 

स्क्रिप्ट ब्लॉक बदलकर मेरे अपने स्थानीय कंप्यूटर पर पीछे धकेलने हो सकता है आप अपनी फ़ाइल पथ उस में एक जगह है, तो उद्धरण की जरूरत है।

संपादित करें: असल में, इसने पावरहेल को सेवा या कुछ के रूप में एप्लिकेशन लॉन्च करने के साथ कुछ मूर्खतापूर्ण समस्याएं लाईं, इसलिए मैंने कुछ खोज किया, और यह पता लगाया कि आप रिमोट कंप्यूटर पर आपके लिए कमांड निष्पादित करने के लिए सीएमडी को कॉल कर सकते हैं। इस तरह, कमांड निष्पादित किया जाता है जैसे कि आपने इसे दूरस्थ मशीन पर एक सीएमडी विंडो में टाइप किया था। स्क्रिप्टब्लॉक में कमांड को डबल कोट्स में रखें, और फिर इससे पहले cmd.exe/C डालें। इस तरह:

cmd.exe /C "C:\folder\app.exe/xC:\folder\file.txt" 

इसने हाल ही में होने वाली सभी समस्याओं को हल किया।

संपादित करें संपादित करें: अधिक समस्याएं थीं, और इसे करने का एक बेहतर तरीका मिला।

start-process -filepath C:\folder\app.exe -argumentlist "/xC:\folder\file.txt" 

और यह आपकी टर्मिनल विंडो को दूरस्थ प्रक्रिया समाप्त होने की प्रतीक्षा में लटका नहीं देता है। बस सुनिश्चित करें कि आपके पास प्रक्रिया को समाप्त करने का कोई तरीका है यदि यह स्वयं पर ऐसा नहीं करता है। (मेरा नहीं, किसी अन्य तर्क की कोडिंग की आवश्यकता है)

+0

बेस्ट उत्तर अभी तक –

-1
$sb = [scriptblock]::create($command) 
+2

स्टैक ओवरव्लो में आपका स्वागत है! शायद आप कुछ स्पष्टीकरण जोड़ सकते हैं, यह उस व्यक्ति के लिए सहायक हो सकता है जिसने सवाल पूछा था। –

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