it-swarm.com.de

Ausführen des CMD-Befehls in PowerShell

Ich habe eine Reihe von Problemen mit der Ausführung eines PowerShell-Befehls. Es wird lediglich ein Befehl ausgeführt, der in einem CMD-Eingabeaufforderungsfenster ausgeführt wird.

Hier ist der Befehl:

"C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe" PCNAME

Ich habe das folgende ohne Erfolg versucht (ich habe viele Iterationen von diesem versucht, um zu versuchen, eine zu erhalten, die funktioniert. Die Syntax ist wahrscheinlich alles durcheinander):

$TEXT = $textbox.Text #$textbox is where the user enters the PC name.
$CMDCOMMAND = "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe"
Start-Process '"$CMDCOMMAND" $TEXT'
#iex -Command ('"C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe"' $TEXT)

Der Befehl öffnet lediglich das Fenster für die Remote-Verbindung SCCM zu dem Computer, den der Benutzer im Textfeld angibt.

52
user3585839

Versuche dies:

& "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe" PCNAME

Bei PowerShell ist eine Zeichenfolge "..." nur eine Zeichenfolge, die von PowerShell ausgewertet wird, indem sie auf dem Bildschirm angezeigt wird. Um zu erreichen, dass PowerShell den Befehl ausführt, dessen Name in einer Zeichenfolge steht, verwenden Sie den Aufrufoperator &.

64
Keith Hill

Um Batchdateien extern von PowerShell auszuführen oder zu konvertieren (insbesondere, wenn Sie alle geplanten Task-Skripts mit einem Zertifikat signieren möchten), erstelle ich einfach ein PowerShell-Skript, z. deletefolders.ps1.

Geben Sie Folgendes in das Skript ein:

cmd.exe /c "rd /s /q C:\#TEMP\test1"

cmd.exe /c "rd /s /q C:\#TEMP\test2"

cmd.exe /c "rd /s /q C:\#TEMP\test3"

* Jeder Befehl muss erneut in eine neue Zeile geschrieben werden, in der cmd.exe erneut aufgerufen wird.

Dieses Skript kann jetzt von PowerShell aus signiert und ausgeführt werden, wobei die Befehle direkt an den Befehl Prompt/cmd ausgegeben werden.

Dies ist viel sicherer als das Ausführen von Batch-Dateien!

35
Armand G.

Eine Lösung wäre, pipe Ihren Befehl von PowerShell an CMD zu übergeben. Wenn Sie den folgenden Befehl ausführen, wird der Befehl notepad.exe an CMD übergeben, wodurch die Anwendung Notepad geöffnet wird.

PS C:\> "notepad.exe" | cmd

Nachdem der Befehl in CMD ausgeführt wurde, kehren Sie zu einer PowerShell-Eingabeaufforderung zurück und können das PowerShell-Skript ausführen.


Bearbeitungen

CMS-Startmeldung wird angezeigt

Wie mklement0 zeigt, zeigt diese Methode die Startmeldung von CMD. Wenn Sie die Ausgabe mit der oben beschriebenen Methode in ein anderes Terminal kopieren, wird die Startmeldung mit kopiert.

1
reelyard

Sie müssen das Cmdlet Invoke-Command verwenden, um dieses externe Programm zu starten. Normalerweise funktioniert es ohne Anstrengung.

Wenn Sie mehr als einen Befehl benötigen, sollten Sie das Cmdlet Invoke-Expression mit der Option -scriptblock verwenden.

0
Tim Christin

Für diejenigen, die diese Informationen benötigen:

Ich habe herausgefunden, dass Sie einen Befehl, der sich in Ihrer PATH befindet, von einem PS-Skript aus ziemlich gut ausführen können, und dass er funktionieren sollte.

Manchmal müssen Sie diesen Befehl möglicherweise mit cmd.exe /c starten.

Beispiele

Git aus einem PS-Skript aufrufen

Ich musste einen git-Client umpacken, der in Chocolatey (für diejenigen, die es vielleicht nicht wissen, eine Art App-Store für Windows ist), der PS-Skripte massiv verwendet.

Ich fand heraus, dass, sobald sich git in der PATH befindet, Befehle wie

$ca_bundle = git config --get http.sslCAInfo

speichert den Ort der gitcrt-Datei in der $ca_bundle-Variablen.

App suchen

Ein anderes Beispiel, das eine Kombination aus dem gegenwärtigen SO post und this SO post ist, ist die Verwendung des Befehls where

$Java_exe = cmd.exe /c where Java

speichert den Ort der Java.exe-Datei in $Java_exe-Variable.

0
avi.elkharrat