How to run a powershell script with white spaces in path from command line?
-File
Parameter
If you want to run powershell.exe -File
from the commandline, you always have to set paths with spaces in doubleqoutes ("
). Single quotes ('
) are only recognized by powershell. But as powershell.exe is invoked (and hence the file parameter processed) by command line, you have to use "
.
powershell.exe -File "C:\Users\test\Documents\Test Space\test.ps1" -ExecutionPolicy Bypass
-Command
Parameter
If you use the -Command
parameter, instead of -File
, the -Command
content is processed by PowerShell, hence you can - and in this case have to - use '
inside "
.
powershell.exe -Command "& 'C:\Users\test\Documents\Test Space\test.ps1'" -ExecutionPolicy Bypass
The double quotes are processed by command line, and & 'C:\Users\test\Documents\Test Space\test.ps1'
is command that is actually processed by PowerShell.
Solution 1 is obviously simpler.
Note that -Command
is also the default parameter that is used, if you do not specify any.
powershell.exe "& 'C:\Users\test\Documents\Test Space\test.ps1'" -ExecutionPolicy Bypass
This would work, too.
-EncodedCommand
Parameter
You can encode your command as Base64. This solves many "quoting" issues and is sometimes (but not in your case though) the only possible way.
First you have to create the encoded command
$Command = "& 'C:\Users\test\Documents\Test Space\test.ps1'"
[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($Command))
And then you can use the the -EncodedCommand
parameter like this
powershell.exe -EncodedCommand JgAgACcAQwA6AFwAVQBzAGUAcgBzAFwAdABlAHMAdABcAEQAbwBjAHUAbQBlAG4AdABzAFwAVABlAHMAdAAgAFMAcABhAGMAZQBcAHQAZQBzAHQALgBwAHMAMQAnAA== -ExecutionPolicy Bypass
Try this:
PS C:\> & "C:\Users\test\Documents\test\line space\PS Script\test"
In your examples, you're mixing quotes and double quoting for no reason.
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"
)