2014-07-24 17 views
33

Sto riscontrando un sacco di problemi con l'esecuzione di un comando PowerShell. Tutto ciò che sta facendo è eseguire un comando che verrebbe eseguito nella finestra del prompt di CMD.Esecuzione del comando CMD in PowerShell

Ecco il comando: (. Ho provato molte iterazioni di questo per cercare di ottenere quello che funziona sintassi è probabilmente tutto incasinato)

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

Ho provato quanto segue senza successo:

$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) 

Il comando aprirà semplicemente la finestra di connessione remota SCCM al computer specificato dall'utente nella casella di testo.

+0

Non sono sicuro di quale versione di SCCM si sta utilizzando, ma 07 richiede un "-1", ma il 2012 non viene eseguito all'avvio di CmRcViewer. Solo una FYI. –

risposta

44

Prova questo:

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

Per PowerShell una stringa "..." è solo una stringa e PowerShell lo valuta facendo eco allo schermo. Per far sì che PowerShell esegua il comando il cui nome si trova in una stringa, si utilizza l'operatore di chiamata &.

+0

Fantastico, questo ha funzionato. Dovrebbe funzionare per la maggior parte dei comandi di cmd? – user3585839

+1

Sì ma non è necessario per gli ex che non hanno uno spazio nel loro nome o percorso. Ad esempio, è possibile eseguire 'ipconfig.exe' senza dover usare' & '. L'unica volta che devi usare '&' è invocare un nome di comando in forma di stringa. E devi usare "string form" quando c'è uno spazio nel percorso o nel nome del file. –

+4

Vorrei aggiungere che non funzionerà per costruire una stringa da riga di comando e provare ad eseguire con '&', perché PowerShell penserà che l'intera stringa sia il nome dell'eseguibile. Prendi invece solo il nome dell'eseguibile e inserisci i parametri dell'eseguibile in un secondo momento. –

0

È necessario utilizzare il cmdlet invoke-command per avviare questo programma esterno. Normalmente funziona senza sforzo. Se è necessario più di un comando, è necessario utilizzare il cmdlet invoke-expression con l'opzione the- scriptblock. Dimmi se è chiaro per te.

+0

Invoke-Command non è necessario in questo caso (vedere la risposta di Keith Hill). –

+0

Sì, sono d'accordo. Stavo pensando più alla soluzione di scripting. –

+2

Non importa se il comando viene eseguito da uno script o meno. In questo caso non è ancora necessario utilizzare Invoke-Command. –

16

Per eseguire o convertire i file batch esternamente da PowerShell (in particolare se si desidera firmare tutti gli script attività pianificate con un certificato) ho semplicemente creare uno script PowerShell per esempio deletefolders.ps1

ingresso il seguente nello script:

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" 

* Ogni comando deve essere inserito in una nuova riga chiamando di nuovo cmd.exe.

Questo script può ora essere firmato ed eseguito da PowerShell che invia i comandi direttamente al prompt dei comandi/cmd.

Un modo molto più sicuro di eseguire file batch!

+2

'cmd/c" ... "' funziona anche. –

Problemi correlati