如何运行PowerShell脚本


709

如何运行PowerShell脚本?

  • 我有一个名为myscript.ps1的脚本
  • 我已经安装了所有必要的框架
  • 我设置执行政策的事情
  • 我已按照此MSDN帮助页面上的说明进行操作, 并尝试按以下方式运行它:( powershell.exe 'C:\my_path\yada_yada\run_import_script.ps1'带有或不带有--noexit

除了输出文件名外,它什么也不返回。

没有错误,没有消息,什么都没有。哦,当我添加时-noexit,会发生同样的事情,但是我仍然在PowerShell中,必须手动退出。

.ps1文件应该运行一个程序,并根据该程序的输出返回错误级别。但是我很确定我还没有到达那儿。

我究竟做错了什么?


2
启动,powershell就像开始时一样cmd。现在,您可以myscript.ps1在其中(在.\myscript.ps1
Powershell

Answers:


730
  1. 启动Windows PowerShell,然后等待PS命令提示符出现
  2. 导航到脚本所在的目录

    PS> cd C:\my_path\yada_yada\ (enter)
  3. 执行脚本:

    PS> .\run_import_script.ps1 (enter)

我想念什么?

或者:您可以cmd.exe像这样运行PowerShell脚本:

powershell -noexit "& ""C:\my_path\yada_yada\run_import_script.ps1""" (enter)

根据此博客文章在这里

或者甚至可以从C#应用程序中运行PowerShell脚本:-)

从C#应用程序异步执行PowerShell脚本


19
您的博客文章链接做到了。我必须使用powershell -noexit "& "C:\yada_yada\run_import_script.ps1"(注意三个双引号)我不太明白为什么,但是在这一点上,我并不在乎:)非常感谢!
Pekka 2010年

16
到底是"&做什么的?
BlueRaja-Danny Pflughoeft 2012年

16
根据technet.microsoft.com/zh-cn/library/ee176949.aspx,“& ”用于“如果您实际上要执行该字符串值(即,如果您要运行路径包含在其中的脚本,双引号),则需要使用Call运算符(与号)作为路径的开头。”
道格·道森

29
在我为新创建的未签名脚本绕过powershell的默认执行策略之前,这些方法都不对我有用。除其他事项外,这还需要以管理员身份重新启动powershell。完全同意@LukePuplett-使最简单的用例花20分钟的时间来进行谷歌搜索和细化是很棒的。和错误消息!显然,这些家伙是在70年代在IBM工作的。
Spike0xff

14
如以下评论中所述,必须绕过执行策略。此处未讨论的项目之一是如何从传递参数的命令行运行Powershell脚本。为此:请键入powershell -executionpolicy bypass ".\myscript.ps1 yadayadayada"
Jim Lahman

229

如果您使用的是PowerShell 2.0,请使用PowerShell.exe的-File参数从另一个环境(如cmd.exe)中调用脚本。例如:

Powershell.exe -File C:\my_path\yada_yada\run_import_script.ps1

5
有没有一种方法可以向此类调用添加参数?
亚历山大·格罗斯

11
您应该只能够在脚本文件路径之后尾随args。来自PowerShell.exe的用法-[-File <filePath> <args>]
Keith Hill 2010年

“由于在该系统上禁用了脚本的执行,因此无法加载。请参阅“获得帮助about_signing”以获取更多详细信息。”
帕维尔·弗拉索夫

7
如果您尚未在系统上启用PowerShell脚本执行,请添加参数-ExecutionPolicy Bypass
Keith Hill

4
仅供参考,根据我的经验,这也适用于PowerShell 1.0(Windows 2012 Server)
knocte

189

如果要运行脚本而不修改默认脚本执行策略,则可以在启动Windows PowerShell时使用旁路开关。

powershell [-noexit] -executionpolicy bypass -File <Filename>

11
另外,包括-nologo摆脱启动标语的选项
swdev

73

类型:

powershell -executionpolicy bypass -File .\Test.ps1

注意:这Test.ps1是PowerShell脚本。


powershell -executionpolicy bypass -File .\Test.ps1假设您当前的工作目录包含Test.ps1
Yeow_Meng 2015年

29

我遇到了同样的问题,并且尝试了一下……最后我使用了:

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

并将此行放入批处理文件中,即可正常工作。


22

如果您只有PowerShell 1.0,这似乎可以很好地解决问题:

powershell -command - < c:\mypath\myscript.ps1

它将脚本文件通过管道传递到PowerShell命令行。


3
安全策略不允许脚本执行时的有用技巧。
阿隆·洛林奇

17

满容易。在Windows中右键单击.ps1文件,然后在外壳菜单中单击“使用PowerShell运行”


这样可以快速运行脚本,而不必启用具有执行策略的脚本。谢谢!
B01

这就是我一直在寻找的东西,谢谢!
Aamol

11

使用cmd(BAT)文件:

@echo off
color 1F
echo.

C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "PrepareEnvironment.ps1"

:EOF
echo Waiting seconds
timeout /t 10 /nobreak > NUL

如果您需要以管理员身份运行

  1. 使快捷方式指向命令提示符(我将其命名为“管理命令提示符”)
  2. 打开快捷方式的属性,然后转到“兼容性”选项卡
  3. 在“特权级别”部分下,确保选中“以管理员身份运行该程序”旁边的复选框


10

如果您的脚本使用.ps1扩展名命名,并且您在PowerShell窗口中,则只需运行./myscript.ps1(假设文件位于工作目录中)。

无论如何,对于Windows 10和PowerShell版本5.1而言,这对我都是正确的,而且我认为我没有做任何事情来实现它。


2
这如何回答这个问题?
Peter Mortensen

4
它绝对回答了以下问题:如何运行Powershell脚本?答:启动PowerShell控制台,然后执行脚本。简单。简单。也可以在Linux上使用。
Thufir '18

4
这绝对可以回答问题,而这正是我想要的。如myscript.ps1不起作用,则抛出错误,但./仍在执行。
杰夫

7
  • 给出脚本的路径,即cmd的路径设置:

    $> . c:\program file\prog.ps1

  • 运行PowerShell的入口点功能:

    例如, $> add or entry_func or main


从cmd提示符运行命令:>$ . c:\program file\prog.ps1 '.' is not recognized as an internal or external command, operable program or batch file.>$ add or entry_func or main 'add' is not recognized as an internal or external command, operable program or batch file.
Suncat2000,19年


1

使用-File文件名前面的参数。引号使PowerShell认为它是一串命令。


1

我有一个非常简单的答案,可以工作:

  1. 在管理员模式下打开PowerShell
  2. 跑: set-executionpolicy unrestricted
  3. 打开常规的PowerShell窗口并运行脚本。

我根据错误消息的一部分给出的链接找到了该解决方案: 关于执行策略

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.