如何运行 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 ] "无法加载,因为在此系统上禁用了脚本的执行。有关详细信息,请参阅"get-help about_signing"。" 如果您尚未在系统上启用 PowerShell 脚本执行,请添加参数 -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?

如何在 Chocolatey 安装后刷新 PowerShell 会话的环境而无需打开新会话

使用以下逻辑编写 Powershell 脚本的指南 [关闭]