2012-03-02 16 views
15

Przeszukałem wszystkie i wypróbowałem różne warianty poleceń, ale nadal ich nie ma.Powershell Wykonaj zdalny exe z argumentami wiersza poleceń na komputerze zdalnym

Moim celem jest uruchomienie exe, które już znajduje się na zdalnym komputerze i przekazywanie argumentów wiersza poleceń. Próbowałem invoke-command, ale nie mogę uzyskać mojej składni do rozpoznawania argumentów.

Metody próbuje:

  1. Win32_Process.Create()
  2. Wywołanie podsystemu
  3. uruchamiania procesu
  4. [diagnostics.process] :: rozpocząć
  5. Wywołanie-WmiMethod

Z moich testów, najbliżej, które mogę uzyskać, jest za pomocą następującego polecenia:

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

Komenda zakończy się bez błędu lub kodu powrotu, ale na komputerze zdalnym nie działała z argumentami. Grałem z pojedynczymi/podwójnymi cudzysłowami, aby sprawdzić, czy są jakieś zmiany, ale żadne.

Odpowiedz

19

Czy spróbować za pomocą parametru -ArgumentList:

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

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

Przykładem powołując się program, który nie znajduje się na ścieżce i ma miejsce w jego ścieżka folderu:

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

Jeśli wartość argumentu jest statyczna, możesz po prostu podać ją w bloku skryptu w następujący sposób:

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

Dzięki za szybką odpowiedź. Z jakiegoś powodu, kiedy próbuję tego w ten sposób, mogę wydrukować rozwinięte polecenie, które zadziała, jeśli uruchomię to ręcznie, ale tak naprawdę nie działa. Musiałem usunąć "&", ponieważ napisano, że jest to zarezerwowana postać do przyszłego użytku. – gregs

+0

@gregs Musiałem włączyć funkcję zdalnego sterowania na moim komputerze do przetestowania. Zmieniłem polecenie na prosty test ping wysyłający argument localhost. Powyższe odnosi się do mnie. –

+0

Możliwe, że wymyśliłem blokadę, ale nie rozwiązanie. Ta linia działa, jeśli używam polecenia ping.exe i "localhost" jako argumentu, ale muszę umieścić wycinki wokół mojej ścieżki wykonywalnej, ponieważ ścieżka zawiera spacje. Kiedy to robię, po prostu powtarza mój ciąg w cudzysłowie, ale nie sądzę, że działa. – gregs

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

To powinno działać i uniknąć mylące początkujących.

3

Czy próbujesz przekazać argumenty wiersza poleceń do programu po uruchomieniu? Pracuję teraz nad czymś, co robi dokładnie to i było to o wiele prostsze, niż myślałem. Jeśli pójdę do wiersza poleceń i wpisz

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

wtedy moje starty aplikacji i tworzy plik w określonym katalogu o określonej nazwie.

chciałem zrobić to za pomocą skryptu PowerShell na komputerze zdalnym, i zorientowali się, że wszystko, co potrzebne do zrobienia oddano

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

(mam kilka więcej podobnych poleceń wewnątrz sesji, to jest tylko minimum, które musi uruchomić). Zwróć uwagę na spację między plikiem wykonywalnym i argumentami wiersza poleceń. To działa dla mnie, ale nie jestem pewien, jak działa twoja aplikacja, ani czy to w jaki sposób przekazujesz do niej argumenty.

* Mogę też mieć mój wniosek przesunąć plik z powrotem do mojego lokalnego komputera poprzez zmianę skryptu blok

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

Trzeba cytaty jeśli plik-ścieżka ma miejsca w nim.

EDYCJA: w rzeczywistości wywołało to pewne głupie problemy z uruchomieniem aplikacji PowerShell jako usługi lub czegoś takiego, więc przeszukałem je i zorientowałem się, że możesz wywołać CMD, aby wykonać polecenia dla ciebie na komputerze zdalnym. W ten sposób polecenie jest DOKŁADNIE wykonane tak, jakbyś właśnie wpisał je w oknie CMD na zdalnej maszynie. Umieść komendę w bloku skryptu w podwójnych cudzysłowach, a następnie umieść przed nią plik cmd.exe/C. tak:

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

rozwiązało to wszystkie problemy, które ostatnio miałem.

EDYTUJ EDIT: Miał więcej problemów i znalazł o wiele lepszy sposób na zrobienie tego.

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

i to nie powoduje zawieszenia się okna terminala, które czeka na zakończenie procesu zdalnego. Tylko upewnij się, że masz sposób, aby zakończyć proces, jeśli nie robi to na własną rękę. (moje nie wymaga kodowania innego argumentu)

+0

Najlepsza odpowiedź: –

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

Witamy w StackOverflow! Być może mógłbyś dodać jakieś wyjaśnienie, może to być pomocne dla osoby, która zadała pytanie. –

Powiązane problemy