How to run PowerShell in CMD
I'm trying to run a PowerShell script inside cmd command line. Someone gave me an example and it worked:
powershell.exe -noexit "& 'c:\Data\ScheduledScripts\ShutdownVM.ps1'"
But the problem is my PowerShell script has input parameters, so I tried, but it doesn't work:
powershell.exe -noexit "& 'D:\Work\SQLExecutor.ps1 -gettedServerName "MY-PC" ' "
The error is:
The term 'D:\Work\SQLExecutor.ps1 -gettedServerName "MY-PC" ' is not recognized as the name of a cmdlet, function,
How can I fix this problem?
Solution 1:
You need to separate the arguments from the file path:
powershell.exe -noexit "& 'D:\Work\SQLExecutor.ps1 ' -gettedServerName 'MY-PC'"
Another option that may ease the syntax using the File parameter and positional parameters:
powershell.exe -noexit -file "D:\Work\SQLExecutor.ps1" "MY-PC"
Solution 2:
I'd like to add the following to Shay Levy's correct answer:
You can make your life easier if you create a little batch script run.cmd
to launch your powershell script:
run.cmd
@echo off & setlocal
set batchPath=%~dp0
powershell.exe -noexit -file "%batchPath%SQLExecutor.ps1" "MY-PC"
Put it in the same path as SQLExecutor.ps1
and from now on you can run it by simply double-clicking on run.cmd
.
Note:
-
If you require command line arguments inside the run.cmd batch, simply pass them as
%1
...%9
(or use%*
to pass all parameters) to the powershell script, i.e.powershell.exe -noexit -file "%batchPath%SQLExecutor.ps1" %*
-
The variable
batchPath
contains the executing path of the batch file itself (this is what the expression%~dp0
is used for). So you just put the powershell script in the same path as the calling batch file.
Solution 3:
Try just:
powershell.exe -noexit D:\Work\SQLExecutor.ps1 -gettedServerName "MY-PC"