J'ai de nombreux problèmes pour exécuter une commande PowerShell. Tout ce qu'il fait, c'est 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é de nombreuses itérations pour essayer d'en obtenir une qui fonctionne. La syntaxe est probablement 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.
powershell
command-line
cmd
user3585839
la source
la source
Réponses:
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 est dans une chaîne, vous utilisez l'opérateur d'appel
&
.la source
ipconfig.exe
sans avoir à utiliser&
. Le seul moment où vous devez utiliser&
est d'appeler un nom de commande sous forme de chaîne. Et vous devez utiliser «forme de chaîne» lorsqu'il y a un espace dans le chemin ou le nom de fichier.&
, car PowerShell pensera que la chaîne entière est le nom de l'exécutable. Au lieu de cela, ne citez que le nom de l'exécutable et mettez ensuite les paramètres de l'exécutable.&
etcmd
?&
est l'opérateur d'appel PowerShell (aka invocation). Il vous permet d'exécuter une commande lorsque vous disposez d'une chaîne contenant soit le nom de la commande, soit le chemin vers l'exe. Vous pouvez également spécifier un scriptblock par exemple&{$foo=42}
ou un objet CommandIno par exemple$cmd = Get-Command Get-Date; &$cmd
.cmd
est une coquille différente. Notez que&
s'exécute dans une portée enfant, vous noterez donc qu'après la fin du scriptblock défini$foo
ci-dessus, il$foo
n'est plus défini.Pour exécuter ou convertir des fichiers batch en externe à partir de PowerShell (en particulier si vous souhaitez signer tous vos scripts de tâches planifiées avec un certificat), je crée simplement un script PowerShell, par exemple deletefolders.ps1.
Saisissez les éléments suivants 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 en appelant à nouveau cmd.exe.
Ce script peut maintenant être signé et exécuté à partir de PowerShell en envoyant les commandes à l'invite de commande /
cmd
directement.C'est un moyen beaucoup plus sûr que d'exécuter des fichiers batch!
la source
sc query serviceName
partir de PowerShell en pensant qu'il s'exécuterait, mais pas de sortie. J'ai essayé plusieurs itérations de la technique &, pas de dés. Mais l'exécuter comme vous l'avez recommandé a fonctionné. Ensuite, j'ai frappé cmd.exe /? pour voir quelles autres merveilles m'attendaient. Je n'aime exécuter cmd qu'en cas de besoin.Une solution serait de diriger votre commande de PowerShell vers CMD. L'exécution de la commande suivante dirigera la
notepad.exe
commande vers CMD, qui ouvrira ensuite l'application Bloc-notes.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.
Modifications
Le message de démarrage de CMD est affiché
Comme le souligne mklement0 , cette méthode affiche le message de démarrage de CMD. Si vous copiez la sortie en utilisant la méthode ci-dessus dans un autre terminal, le message de démarrage sera copié avec lui.
la source
&
n'est pas le cas. Par exemple,& "mklink"
je n'ai pas travaillé pour moi pendant que je"mklink" | cmd
travaillaisPour ceux qui peuvent avoir besoin de ces informations:
J'ai compris que vous pouvez à peu près exécuter une commande qui se trouve dans votre
PATH
script PS, et cela devrait fonctionner.Parfois, vous devrez peut-être pré-lancer cette commande avec
cmd.exe /c
Exemples
Appeler git depuis un script PS
J'ai dû reconditionner un
git
client enveloppéChocolatey
(pour ceux qui ne le savent peut-être pas, c'est une sorte d'app-store pour Windows) qui utilise massivement des scripts PS.J'ai découvert que, une fois
git
dans lePATH
, des commandes comme$ca_bundle = git config --get http.sslCAInfo
stockera l'emplacement du
git
crt
fichier dans la$ca_bundle
variable.Recherche d'une application
Un autre exemple qui est une combinaison du poste SO actuel et de ce poste SO est l'utilisation de la
where
commande$java_exe = cmd.exe /c where java
stockera l'emplacement du
java.exe
fichier dans la$java_exe
variable.la source
cmd /c
d'appeler ses commandes internes , telles quemklink
. En revanche,where.exe
est un programme externe, vous pouvez donc l'invoquer directement. Cependant, en raison d'un conflit de nom avec l'where
alias intégré de PowerShell (pourWhere-Object
), vous devez utiliserwhere.exe
; par exemplewhere.exe java
.Get-Command
lieu d'appelercmd
? Idem avant:$java_exe = $(Get-Command java.exe).Source
Vous devez utiliser l'applet de commande 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'
-scriptblock
option.la source