如何在 CMD 中运行 PowerShell

我试图在 cmd 命令行中运行一个 PowerShell 脚本,有人给了我一个例子,它起作用了:

powershell.exe -noexit "& 'c:\Data\ScheduledScripts\ShutdownVM.ps1'"

但问题是我的 PowerShell 脚本有输入参数,所以我试了试,但它不起作用:

powershell.exe -noexit "& 'D:\Work\SQLExecutor.ps1 -gettedServerName "MY-PC" ' "

错误是:

术语“ D: Work SQLExecutor.ps1-gettedServerName“ MY-PC”’不能识别为 cmdlet,function,

我怎样才能解决这个问题?

403908 次浏览

您需要将参数从文件路径中分离出来:

powershell.exe -noexit "& 'D:\Work\SQLExecutor.ps1 ' -gettedServerName 'MY-PC'"

使用 File 参数和位置参数简化语法的另一个选项:

powershell.exe -noexit -file "D:\Work\SQLExecutor.ps1" "MY-PC"

试试看:

powershell.exe -noexit D:\Work\SQLExecutor.ps1 -gettedServerName "MY-PC"

我想在 Shay Levy 的正确答案中加上以下几点: 如果您创建一个小的批处理脚本 run.cmd来启动您的 Powershell 脚本,那么您的生活将变得更加轻松:

运行 cmd

@echo off & setlocal
set batchPath=%~dp0
powershell.exe -noexit -file "%batchPath%SQLExecutor.ps1" "MY-PC"

将它放在与 SQLExecutor.ps1相同的路径中,从现在开始,只需双击 run.cmd就可以运行它。


注:

  • 如果您需要 run.cmd 批处理中的命令行参数,只需将它们作为 %1... %9(或使用 %*传递所有参数)传递给 powershell 脚本,即。
    powershell.exe -noexit -file "%batchPath%SQLExecutor.ps1" %*

  • 变量 batchPath包含批处理文件本身的执行路径(这就是表达式 %~dp0的用途)。因此,您只需将 powershell 脚本放在与调用批处理文件相同的路径中。