Faire en sorte que Batch exécute Windows PowerShell, puis le fait exécuter du texte

3

Je suis plus récent dans la création de fichiers batch. J'essaie d'exécuter une commande qui ouvrira Windows PowerShell dans un répertoire spécifique, puis une fois pour exécuter une commande.

Jusqu'à présent, j'ai ce qui suit. Powershell.exe -noexit -command "cd 'c:\Dev\ProductDev'" Cela semble fonctionner pour ouvrir PowerShell au bon endroit, mais je ne parviens pas à le faire exécuter ensuite la commande. node sp.

J'ai essayé ce qui suit sans succès PowerShell -NoExit -Command "Write-Host 'node sp'"

En outre, est-il possible d'ouvrir Windows PowerShell dans l'écran d'affichage bleu plutôt que dans la fenêtre CMD (noir / blanc)?

Austin
la source
1
Je ne suis pas sûr de savoir pourquoi vous n'écririez pas simplement le script dans Powershell?
EBGreen
@ EBGreen expliquer? Désolé, je suis nouveau à l'écriture de scripts en général.
Austin
Tout ce que j'essaie de faire est de créer un ou deux raccourcis pour exécuter certaines tâches pour moi, mais je souhaite les voir / les visualiser sur l'écran de PowerShell plutôt que dans CMD.
Austin
3
Si je comprends bien, vous ouvrez en ce moment un fichier dans un éditeur (probablement le bloc-notes) et vous tapez des commandes par lots, probablement une par ligne, puis enregistrez le fichier avec une extension .bat. Donc faire un fichier batch. Powershell est également un langage de script (et plus polyvalent que batch). Vous feriez quelque chose de très similaire. Ouvrez un fichier dans un éditeur, tapez des commandes powershell puis enregistrez-le sous un fichier .ps1. Il existe des guides sur Internet pour bien commencer à Powershell.
EBGreen
@EBGreen ohhh ne le savais pas. Je vous remercie!
Austin

Réponses:

7

Comme vous n’avez pas fourni votre fichier de batte complet, je suppose que c’est

Powershell.exe -noexit -command "cd 'c:\Dev\ProductDev'"
PowerShell -NoExit -Command "Write-Host 'node sp'"

C'est la mauvaise approche. Vous démarrez d’abord un Powershell qui change de répertoire et reste ouvert. Si vous quittez ce PowerShell, le fichier bat va démarrer le deuxième PowerShell.

Vous devez exécuter un PowerShell et le laisser exécuter les deux commandes. Une façon est de

Powershell.exe -noexit -command "cd 'c:\Dev\ProductDev'; Write-Host 'node sp'"

Une autre méthode consiste à écrire un fichier de script PowerShell tel que MyScript.ps1 avec le contenu suivant:

cd 'c:\Dev\ProductDev'
Write-Host 'node sp'

et démarrez PowerShell en ne lui donnant pas la commande à exécuter mais le script à exécuter (voir aussi ce et ce Question StackOverflow). Vous pouvez soit exécuter cette commande directement, soit la placer dans un fichier bat, ou même l'utiliser comme commande à exécuter dans un fichier lk:

PowerShell.exe -noexit -ExecutionPolicy Bypass -File "MyScript.ps1"

Un problème avec PowerShell est que, par défaut, il n'exécute pas de scripts non signés (de manière cryptographique). Le moyen facile de résoudre ce problème est le -ExecutionPolicy Bypass paramètre.

Werner Henze
la source
Je vais donner un coup de feu! Pour la deuxième partie, exécuter le script PowerShell, s’agit-il d’un fichier bat?
Austin
J'ai ajusté ma réponse, j'espère que c'est plus clair maintenant. Le troisième bloc de code dans ma réponse est le contenu du nouveau fichier de script MyScript.ps1. Le quatrième (et dernier) bloc de code est une ligne que vous pouvez entrer directement dans cmd.exe ou que vous pouvez placer dans un fichier bat ou que vous pouvez utiliser comme ligne de commande dans un fichier lk.
Werner Henze
Ok cool! J'ai fait comme tu l'as dit! Je mets la quatrième ligne dans une batte avec l'intérieur étant PowerShell.exe -ExecutionPolicy Bypass -File "RunProductDev.ps1", lorsque je clique dessus, CMD s’ouvre un instant puis se ferme, mais mon RunProductDev.ps1 ne semble jamais fonctionner ni s’ouvrir. Ils sont tous deux assis sur mon bureau en ce moment, alors ils sont dans le même répertoire. Dans le ps1 j'ai cd 'c:\Dev\ProductDev' Write-Host 'node sp'
Austin
Si cela compte, le node sp la commande est fondamentalement un serve pour exécuter une application, c’est donc une commande constamment en cours d’exécution / surveillance jusqu’à ce que je la quitte.
Austin
Pour déboguer, vous pouvez exécuter cmd.exe et y exécuter votre test.bat afin d’afficher le résultat. La raison pour la fermeture de powershell est que j’ai oublié le -noexit. J'ai mis à jour ma réponse afin qu'elle soit incluse.
Werner Henze