J'ai donc essayé un tas de façons différentes d'exécuter un script PowerShell à partir de la ligne de commande et chacune renvoie une erreur.
Voici ce chemin:
C:\Users\test\Documents\test\line space\PS Script\test.ps1
J'ai essayé ces derniers:
powershell -File '"C:\Users\test\Documents\test\line space\PS Script\test.ps1"'
powershell "& ""C:\Users\test\Documents\test\line space\PS Script\test.ps1"""
Powershell "& 'C:\Users\test\Documents\test\line space\PS Script\test.ps1'"
Powershell -File 'C:\Users\test\Documents\test\line space\PS Script\test.ps1'"
Je reçois toutes ces erreurs:
&: Le terme "C:\Users\test\Documents\test\line space\PS Script \" n'est pas reconnu comme le nom d'une applet de commande, d'une fonction, d'un fichier de script ou d'un programme exploitable. Vérifiez l'orthographe du nom, ou si un chemin a été inclus, vérifiez que le chemin est correct et réessayez.
Échec du traitement du fichier '' C:\Users\test\Documents\test\line space\PS Script\'': le format du chemin indiqué n'est pas pris en charge. Spécifiez un chemin d'accès valide pour le paramètre -File.
Toute aide serait grandement appréciée!
Dans vos exemples, vous mélangez des devis et des devis doubles sans raison.
IF EXIST "C:\Users\test\Documents\test\line space\PS Script\test.ps1" (
powershell -ExecutionPolicy Unrestricted -File "C:\Users\test\Documents\test\line space\PS Script\test.ps1"
)
-File
ParamètreSi vous souhaitez exécuter powershell.exe -File
à partir de la ligne de commande, vous devez toujours définir des chemins avec des espaces dans doubleqoutes ("
). Guillemets simples ('
) ne sont reconnus que par PowerShell. Mais comme powershell.exe est appelé (et donc le paramètre de fichier traité) par la ligne de commande, vous devez utiliser "
.
powershell.exe -File "C:\Users\test\Documents\Test Space\test.ps1" -ExecutionPolicy Bypass
-Command
ParamètreSi vous utilisez le -Command
paramètre, au lieu de -File
, le -Command
le contenu est traité par PowerShell, vous pouvez donc - et dans ce cas devez - utiliser '
à l'intérieur "
.
powershell.exe -Command "& 'C:\Users\test\Documents\Test Space\test.ps1'" -ExecutionPolicy Bypass
Les guillemets doubles sont traités par la ligne de commande et & 'C:\Users\test\Documents\Test Space\test.ps1'
est une commande qui est réellement traitée par PowerShell.
La solution 1 est évidemment plus simple.
Notez que -Command
est également le paramètre par défaut utilisé, si vous n'en spécifiez aucun.
powershell.exe "& 'C:\Users\test\Documents\Test Space\test.ps1'" -ExecutionPolicy Bypass
Cela fonctionnerait aussi.
-EncodedCommand
ParamètreVous pouvez encoder votre commande en Base64. Cela résout de nombreux problèmes de "citation" et est parfois (mais pas dans votre cas) le seul moyen possible.
Vous devez d'abord créer la commande encodée
$Command = "& 'C:\Users\test\Documents\Test Space\test.ps1'"
[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($Command))
Et puis vous pouvez utiliser le -EncodedCommand
paramètre comme celui-ci
powershell.exe -EncodedCommand JgAgACcAQwA6AFwAVQBzAGUAcgBzAFwAdABlAHMAdABcAEQAbwBjAHUAbQBlAG4AdABzAFwAVABlAHMAdAAgAFMAcABhAGMAZQBcAHQAZQBzAHQALgBwAHMAMQAnAA== -ExecutionPolicy Bypass
Essaye ça:
PS C:\> & "C:\Users\test\Documents\test\line space\PS Script\test"