web-dev-qa-db-fra.com

Faire un lot pour exécuter Windows PowerShell, puis l'avoir exécuté du texte

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

Jusqu'à présent, j'ai ce qui suit. Powershell.exe -noexit -command "cd 'c:\Dev\ProductDev'" Cela semble fonctionner dans l'ouverture de PowerShell au bon endroit, mais je ne peux pas l'obtenir pour exécuter la commande node sp.

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

Aussi, est-il possible de l'avoir ouvert à Windows PowerShell dans l'écran d'affichage bleu, plutôt que dans la fenêtre CMD (Noir/Blanc)?

3
Austin

Comme vous n'avez pas fourni votre fichier de batterie 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 passe au répertoire donné, puis reste ouverte. Si vous quittez ce PowerShell, le fichier BAT démarrera le deuxième PowerShell.

Vous devez exécuter un PowerShell et 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 façon est d'écrire un fichier de script PowerShell comme MyScript.ps1 avec ce contenu:

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

et Démarrez PowerShell ne lui donnant pas la commande d'exécuter, mais le script à exécuter (voir aussi this et ceci Stackoverflow Question). Vous pouvez soit exécuter cette commande directement ou la mettre dans un fichier BAT, ou même l'utiliser comme la commande à exécuter dans un fichier LNK:

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 qui ne sont pas (cryptographiquement) signés. Le moyen facile de résoudre ce problème est le -ExecutionPolicy Bypass Paramètre.

7
Werner Henze