如何运行 PowerShell 脚本
Posted
技术标签:
【中文标题】如何运行 PowerShell 脚本【英文标题】:How to run a PowerShell script 【发布时间】:2011-01-03 08:38:12 【问题描述】:?
我有一个名为 myscript.ps1 的脚本 我已安装所有必要的框架 我设置了execution policy 的东西 我已按照this MSDN help page 上的说明进行操作 并试图像这样运行它:powershell.exe 'C:\my_path\yada_yada\run_import_script.ps1'
(有或没有--noexit
)
除了输出文件名外,什么都不返回。
没有错误,没有消息,什么都没有。哦,当我添加-noexit
时,也会发生同样的事情,但我仍然在 PowerShell 中,必须手动退出。
.ps1 文件应该运行一个程序并根据该程序的输出返回错误级别。但我很确定我还没有到达那里。
我做错了什么?
【问题讨论】:
启动powershell
,就像您启动cmd
一样。现在您可以将myscript.ps1
脚本作为其中的任何可执行文件执行(在powershell 窗口中),即.\myscript.ps1
【参考方案1】:
-
打开 Power-shell
移动 .ps1 文件可用的文件夹
前任。 cd c:\users\
现在输入您的 powershell 文件名 ex.testfile.ps1
按 Enter 键
这应该会执行您的简单 powershell 脚本。
【讨论】:
这只是重复所有现有的答案。【参考方案2】:使用适当的执行策略,您应该能够直接调用该文件,Windows 会将其与 PowerShell 关联
C:\my_path\yada_yada\run_import_script.ps1
这对论点没有那么好。你的问题的真正答案是你错过了&
说“执行这个”
powershell.exe '& C:\my_path\yada_yada\run_import_script.ps1'
【讨论】:
【参考方案3】:我有一个非常简单的答案:
-
以管理员模式打开 PowerShell
运行:
set-executionpolicy unrestricted
打开常规 PowerShell 窗口并运行您的脚本。
我在错误消息中提供的链接之后找到了这个解决方案: About Execution Policies
编辑:确保在完成后运行set-ExecutionPolicy default
,否则您将面临安全风险(感谢匿名用户)。
【讨论】:
完成后确保运行set-ExecutionPolicy default
,否则您将面临安全风险。【参考方案4】:
你可以像这样从 cmd 运行:
type "script_path" | powershell.exe -c -
【讨论】:
【参考方案5】:如果您使用的是 PowerShell 2.0,请使用 PowerShell.exe 的 -File
参数从另一个环境(如 cmd.exe)调用脚本。例如:
Powershell.exe -File C:\my_path\yada_yada\run_import_script.ps1
【讨论】:
有没有办法为这样的调用添加参数? 您应该能够在脚本文件路径之后跟踪 args。从 PowerShell.exe 使用 - [-File-ExecutionPolicy Bypass
仅供参考,根据我的经验,这也适用于 PowerShell 1.0(Windows 2012 Server)【参考方案6】:
-
启动 Windows PowerShell,然后等待
PS
命令提示符出现
导航到脚本所在的目录
PS> cd C:\my_path\yada_yada\ (enter)
执行脚本:
PS> .\run_import_script.ps1 (enter)
我错过了什么??
或者:您可以像这样从cmd.exe
运行 PowerShell 脚本:
powershell -noexit "& ""C:\my_path\yada_yada\run_import_script.ps1""" (enter)
据此blog post here
或者您甚至可以从 C# 应用程序运行 PowerShell 脚本 :-)
Asynchronously execute PowerShell scripts from your C# application
【讨论】:
你的博客文章链接做到了。我必须使用powershell -noexit "& "C:\yada_yada\run_import_script.ps1"
(注意三个双引号)我真的不明白为什么,但在这一点上,我真的不在乎:)非常感谢!
"&
到底是做什么的?
根据technet.microsoft.com/en-us/library/ee176949.aspx,'&' 表示“如果你真的想执行那个字符串值(也就是说,如果你想运行路径用双引号括起来的脚本)你需要在路径前加上 Call 运算符(& 符号)。”
在我为新创建的未签名脚本绕过 powershell 的默认执行策略之前,这些都不适合我。除其他外,这需要以管理员身份重新启动 powershell。完全同意@LukePuplett - 让最简单的用例花 20 分钟的时间在谷歌上搜索和摸索真是太棒了。和错误信息!显然这些人在 70 年代在 IBM 工作过。
正如下面评论中所述,必须绕过执行策略。这里没有讨论的项目之一是如何从传递参数的命令行运行 powershell 脚本。为此:输入powershell -executionpolicy bypass ".\myscript.ps1 yadayadayada"
【参考方案7】:
在文件名前使用-File
参数。引号使 PowerShell 认为它是一串命令。
【讨论】:
这么多年过去了,我仍然看不到运行命令的答案,就像从服务中的第三个重试选项一样,在不加载 PS $ 的情况下使用这样的脚本启动服务profile: 'powershell - 命令'Start-Service -Name '服务名称' -ErrorAction Continue -Verbose'【参考方案8】:如果您想使用 Windows 任务计划程序运行 PowerShell 脚本,请按照以下步骤操作:
创建任务
将Program/Script
设置为Powershell.exe
将Arguments
设置为-File "C:\xxx.ps1"
来自另一个答案,How do I execute a PowerShell script automatically using Windows task scheduler?。
【讨论】:
【参考方案9】:一个简单的方法是使用PowerShell ISE,打开脚本,运行并调用你的脚本,函数...
【讨论】:
【参考方案10】:如果您的脚本以 .ps1
扩展名命名,并且您在 PowerShell 窗口中,则只需运行 ./myscript.ps1
(假设文件在您的工作目录中)。
无论如何,在带有 PowerShell 版本 5.1 的 Windows 10 上,这对我来说是正确的,我认为我没有做任何事情来使它成为可能。
【讨论】:
这如何回答这个问题? 它绝对回答了这个问题:如何运行 powershell 脚本?答:启动powershell控制台,然后执行脚本。简单。简单的。也适用于 Linux。 这绝对回答了这个问题,这正是我想要的。因为myscript.ps1
不起作用,抛出了一个错误,但是./
它正在执行。【参考方案11】:
很简单。在 Windows 中右键单击 .ps1 文件,然后在 shell 菜单中单击 Run with PowerShell。
【讨论】:
这可以快速运行脚本,而无需使用执行策略启用脚本的执行。谢谢!【参考方案12】:类型:
powershell -executionpolicy bypass -File .\Test.ps1
注意:这里 Test.ps1
是 PowerShell 脚本。
【讨论】:
这应该在 powershell 中以powershell -executionpolicy bypass -File .\Test.ps1
执行,假设您当前的工作目录包含 Test.ps1【参考方案13】:
给出脚本的路径,即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.
【参考方案14】:
如果您只有 PowerShell 1.0,这似乎可以很好地解决问题:
powershell -command - < c:\mypath\myscript.ps1
它将脚本文件通过管道传送到 PowerShell 命令行。
【讨论】:
安全策略不允许脚本执行时的有用技巧。【参考方案15】:我也遇到过同样的问题,试了又试……终于用上了:
powershell.exe -noexit "& 'c:\Data\ScheduledScripts\ShutdownVM.ps1'"
并将这一行放入批处理文件中,这样就可以了。
【讨论】:
【参考方案16】:使用 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
如果您需要以管理员身份运行:
-
创建一个指向命令提示符的快捷方式(我将其命名为
管理命令提示符)
打开快捷方式的属性并转到兼容性选项卡
在“权限级别”部分下,确保选中“以管理员身份运行此程序”旁边的复选框
【讨论】:
【参考方案17】:如果您想在不修改默认脚本执行策略的情况下运行脚本,可以在启动 Windows PowerShell 时使用 bypass 开关。
powershell [-noexit] -executionpolicy bypass -File <Filename>
【讨论】:
另外,包括-nologo
选项以摆脱启动横幅以上是关于如何运行 PowerShell 脚本的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Visual Studio Code 中调试 PowerShell 脚本
通过 PHP 使用 Exchange 管理单元执行 powershell 脚本
从 Powershell ISE 中的另一个 PS1 脚本调用 PowerShell 脚本 PS1
是否可以/如何使用某些 cmdlet 停止 powershell?