Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 203
XiaoYao Avatar asked May 08 '13 08:05

XiaoYao


Video Answer


2 Answers

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" 
like image 93
Shay Levy Avatar answered Oct 26 '22 11:10

Shay Levy


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.

like image 42
Matt Avatar answered Oct 26 '22 10:10

Matt