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.
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 &
.
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!
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.
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.
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
.
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
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 git
crt
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
.