【问题标题】:How to run PowerShell in CMD如何在 CMD 中运行 PowerShell
【发布时间】:2022-01-24 20:59:31
【问题描述】:

我正在尝试在 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、函数的名称,

我该如何解决这个问题?

【问题讨论】:

  • 您确定要使用 -noexit 吗?这意味着当您的脚本完成时,shell 会挂起,可能会阻止 CMD 中批处理文件的执行。

标签: windows powershell batch-file cmd


【解决方案1】:

您需要将参数与文件路径分开:

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

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

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

【讨论】:

  • 所以基本上你只需要添加-file
【解决方案2】:

我想在 Shay Levy 的正确答案中添加以下内容: 如果您创建一个小批处理脚本 run.cmd 来启动您的 powershell 脚本,您可以让您的生活更轻松:

run.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 脚本,即
    @ 987654328@

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

【讨论】:

  • 你可以用@powershell.exe -noexit -file "%~dp0SQLExecutor.ps1" "MY-PC"做同样的事情。
  • 如果你想摆脱变量batchPath,当然可以。但是由于setlocal,该变量不会造成损害,因为该变量的生命周期会在脚本退出时结束。 @NunoAndré
【解决方案3】:

试试吧:

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

【讨论】:

    猜你喜欢
    • 2019-02-25
    • 2014-09-16
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2015-05-12
    • 2018-04-11
    • 1970-01-01
    相关资源
    最近更新 更多