Ich habe einige Probleme damit, einen PowerShell-Befehl auszuführen. 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 Folgendes ohne Erfolg versucht (ich habe viele Iterationen davon versucht, um eine zu erhalten, die funktioniert. Die Syntax ist wahrscheinlich völlig 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 nur das SCCM-Remoteverbindungsfenster für den Computer, den der Benutzer im Textfeld angibt.
powershell
command-line
cmd
user3585839
quelle
quelle
Antworten:
Versuche dies:
& "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe" PCNAME
Für PowerShell ist eine Zeichenfolge "..." nur eine Zeichenfolge, und PowerShell wertet sie aus, indem sie sie auf dem Bildschirm wiedergibt. Um PowerShell zu veranlassen, den Befehl auszuführen, dessen Name in einer Zeichenfolge enthalten ist, verwenden Sie den Aufrufoperator
&
.quelle
ipconfig.exe
ohne verwenden zu müssen&
. Sie müssen nur&
einen Befehlsnamen in Zeichenfolgenform aufrufen. Und Sie müssen "Zeichenfolgenform" verwenden, wenn der Pfad oder Dateiname ein Leerzeichen enthält.&
, da PowerShell glaubt, dass die gesamte Zeichenfolge der Name der ausführbaren Datei ist. Zitieren Sie stattdessen nur den Namen der ausführbaren Datei und geben Sie anschließend die Parameter der ausführbaren Datei ein.&
undcmd
?&
ist der PowerShell-Aufrufoperator (auch als Aufrufoperator bezeichnet). Sie können einen Befehl ausführen, wenn Sie eine Zeichenfolge haben, die entweder den Namen des Befehls oder den Pfad zur Exe enthält. Sie können auch einen Skriptblock&{$foo=42}
oder ein CommandIno-Objekt angeben, z$cmd = Get-Command Get-Date; &$cmd
.cmd
ist eine andere Schale. Beachten&
Sie, dass die Ausführung in einem untergeordneten Bereich ausgeführt wird. Sie werden also feststellen, dass der oben festgelegte Skriptblock nach$foo
Abschluss$foo
nicht mehr festgelegt wird.Um Batchdateien extern von PowerShell auszuführen oder zu konvertieren (insbesondere, wenn Sie alle geplanten Aufgabenskripte mit einem Zertifikat signieren möchten), erstelle ich einfach ein PowerShell-Skript, z. B. 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 mit dem Aufruf cmd.exe eingefügt werden.
Dieses Skript kann jetzt signiert und von PowerShell ausgeführt werden, wobei die Befehle an die Eingabeaufforderung /
cmd
direkt ausgegeben werden.Es ist viel sicherer als das Ausführen von Batch-Dateien!
quelle
sc query serviceName
von PowerShell dachte, es würde ausgeführt, aber keine Ausgabe. Ich habe mehrere Iterationen der & Technik ausprobiert, keine Würfel. Aber es so zu betreiben, wie Sie es empfohlen haben, hat funktioniert. Als nächstes drücke ich cmd.exe /? um zu sehen, welche anderen Wunder mich erwarteten. Ich mag es, cmd nur bei Bedarf auszuführen.Eine Lösung wäre, Rohr Ihr Befehl von Powershell CMD. Durch Ausführen des folgenden Befehls wird der
notepad.exe
Befehl an CMD weitergeleitet, wodurch die Notepad-Anwendung geöffnet wird.PS C:\> "notepad.exe" | cmd
Sobald der Befehl in CMD ausgeführt wurde, kehren Sie zu einer PowerShell-Eingabeaufforderung zurück und können Ihr PowerShell-Skript weiter ausführen.
Bearbeitungen
Die Startmeldung von CMD wird angezeigt
Wie mklement0 hervorhebt , zeigt diese Methode die Startnachricht von CMD an. Wenn Sie die Ausgabe mit der oben beschriebenen Methode in ein anderes Terminal kopieren, wird die Startnachricht zusammen mit dieser kopiert.
quelle
&
dies nicht der Fall ist. ZB& "mklink"
hat bei mir nicht gearbeitet während der"mklink" | cmd
ArbeitFür diejenigen, die diese Informationen benötigen:
Ich habe herausgefunden, dass Sie einen Befehl, der in Ihrem
PATH
PS-Skript enthalten ist , so ziemlich ausführen können , und er sollte funktionieren.Manchmal müssen Sie diesen Befehl mit vorab starten
cmd.exe /c
Beispiele
Aufruf von git aus einem PS-Skript
Ich musste einen
git
eingepackten Client neu verpackenChocolatey
(für diejenigen, die es vielleicht nicht wissen, ist es eine Art App-Store für Windows), der massiv PS-Skripte verwendet.Ich fand heraus, dass, sobald
git
in derPATH
, Befehle wie$ca_bundle = git config --get http.sslCAInfo
speichert den Speicherort der
git
crt
Datei in einer$ca_bundle
Variablen.Auf der Suche nach einer App
Ein weiteres Beispiel, das eine Kombination aus dem vorliegenden SO-Beitrag und diesem SO-Beitrag darstellt, ist die Verwendung eines
where
Befehls$java_exe = cmd.exe /c where java
speichert den Speicherort der
java.exe
Datei in einer$java_exe
Variablen.quelle
cmd /c
aufrufen , z . Im Gegensatz dazu handelt es sich um ein externes Programm, sodass Sie es direkt aufrufen können. Aufgrund eines Namenskonflikts mit dem in PowerShell integrierten Alias (für ) müssen Sie jedoch Folgendes verwenden : zB , .mklink
where.exe
where
Where-Object
where.exe
where.exe java
Get-Command
anstatt anzurufencmd
? Gleich wie zuvor:$java_exe = $(Get-Command java.exe).Source
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
-scriptblock
Option verwenden.quelle