web-dev-qa-db-fra.com

Exécution de la commande CMD dans PowerShell

L'exécution d'une commande PowerShell pose de nombreux problèmes. Tout ce qu’il fait consiste à exécuter une commande qui serait exécutée dans une fenêtre d’invite CMD.

Voici la commande:

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

J'ai essayé ce qui suit sans succès (j'ai essayé plusieurs itérations pour essayer d'en trouver une qui fonctionne. La syntaxe est probablement complètement foutue):

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

La commande ouvrira simplement la fenêtre de connexion à distance SCCM à l'ordinateur spécifié par l'utilisateur dans la zone de texte.

52
user3585839

Essaye ça:

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

Pour PowerShell, une chaîne "..." est simplement une chaîne et PowerShell l'évalue en la renvoyant à l'écran. Pour que PowerShell exécute la commande dont le nom figure dans une chaîne, utilisez l'opérateur d'appel &.

64
Keith Hill

Pour exécuter ou convertir des fichiers de commandes en externe à partir de PowerShell (en particulier si vous souhaitez signer tous vos scripts de tâches planifiés avec un certificat), je crée simplement un script PowerShell, par exemple. deletefolders.ps1.

Entrez ce qui suit dans le 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"

* Chaque commande doit être placée sur une nouvelle ligne appelant à nouveau cmd.exe.

Ce script peut maintenant être signé et exécuté à partir de PowerShell, en générant directement les commandes à la commande Invite/cmd.

C'est un moyen beaucoup plus sûr que d'exécuter des fichiers de commandes!

35
Armand G.

Une solution serait de diriger votre commande de PowerShell à CMD. L'exécution de la commande suivante dirigera la commande notepad.exe vers CMD, qui ouvrira ensuite l'application Notepad.

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

Une fois la commande exécutée dans CMD, vous serez renvoyé à une invite PowerShell et pourrez continuer à exécuter votre script PowerShell.


Édite

Le message de démarrage du CMS est affiché

Comme le souligne mklement0 , cette méthode affiche le message de démarrage de CMD. Si vous deviez copier le résultat en utilisant la méthode ci-dessus dans un autre terminal, le message de démarrage sera copié avec lui.

1
reelyard

Vous devez utiliser la cmdlet Invoke-Command pour lancer ce programme externe. Normalement, cela fonctionne sans effort.

Si vous avez besoin de plusieurs commandes, vous devez utiliser la cmdlet Invoke-Expression avec l'option -scriptblock.

0
Tim Christin

Pour ceux qui peuvent avoir besoin de cette information:

J'ai réalisé que vous pouvez très bien exécuter une commande qui se trouve dans votre PATH à partir d'un script PS, et cela devrait fonctionner.

Parfois, vous devrez peut-être pré-lancer cette commande avec cmd.exe /c

Exemples

Appel de git depuis un script PS

Je devais reconditionner un client git encapsulé dans Chocolatey (pour ceux qui ne le savent peut-être pas, c'est une sorte de magasin d'applications pour Windows) qui utilise massivement les scripts PS.

J'ai découvert que, une fois que git est dans la PATH, les commandes telles que

$ca_bundle = git config --get http.sslCAInfo

stockera l'emplacement du fichier gitcrt dans la variable $ca_bundle.

Vous cherchez une application

Un autre exemple est une combinaison de la publication actuelle SO et de cette publication SO correspond à l'utilisation de la commande where

$Java_exe = cmd.exe /c where Java

va stocker l'emplacement du fichier Java.exe dans la variable $Java_exe.

0
avi.elkharrat