首页 / 知识

关于命令行:设置PowerShell脚本以自动执行

2023-04-13 07:59:00

关于命令行:设置PowerShell脚本以自动执行

Set up PowerShell Script for Automatic Execution

我想将几行PowerShell代码用作自动化脚本。 我希望它能够工作的方式是能够使用以下选项之一进行调用:

  • 一个命令行,用于打开PowerShell,执行脚本并关闭PowerShell(这将用于全局构建例程)
  • 我可以双击运行上述文件(在手动测试构建过程的组件时,我将使用此方法)
  • 我一直在在线浏览PowerShell文档,尽管我可以找到很多脚本,但是却找不到有关如何执行所需操作的说明。 谢谢您的帮助。


    从http://blogs.msdn.com/b/jaybaz_ms/archive/2007/04/26/powershell-polyglot.aspx

    如果您愿意用一些CMD来替换漂亮的PowerShell脚本,则可以使用PowerShell-CMD多语言技巧。将PowerShell脚本另存为.CMD文件,并将此行放在顶部:

    1
    @PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %*);'+[String]::Join(';',(Get-Content '%~f0') -notmatch '^^@PowerShell.*EOF$')) & goto :EOF

    如果需要支持带引号的参数,则可以使用更长的版本,该版本还允许注释。 (请注意双@的不寻常的CMD评论技巧)。

    1
    2
    3
    4
    5
    6
    @@:: This prolog allows a PowerShell script to be embedded in a .CMD file.
    @@:: Any non-PowerShell content must be preceeded by"@@"
    @@setlocal
    @@set POWERSHELL_BAT_ARGS=%*
    @@if defined POWERSHELL_BAT_ARGS set POWERSHELL_BAT_ARGS=%POWERSHELL_BAT_ARGS:"=\"%
    @@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %POWERSHELL_BAT_ARGS%);'+[String]::Join(';',$((Get-Content '%~f0') -notmatch '^^@@'))) & goto :EOF


    将脚本另存为.ps1文件,然后使用powershell.exe启动它,如下所示:

    1
    powershell.exe .\\foo.ps1

    确保指定脚本的完整路径,并确保将执行策略级别设置为至少" RemoteSigned",以便可以运行未签名的本地脚本。


    Matt的答案来源。

    通过创建包含以下内容的批处理文件,双击文件即可运行它:

    1
    C:\\WINDOWS\\system32\\windowspowershell\\v1.0\\powershell.exe LocationOfPS1File

    从另一个脚本(例如批处理文件)自动运行脚本

    正如Matt Hamilton建议的那样,只需创建您的PowerShell .ps1脚本并使用以下命令进行调用:

    1
    PowerShell C:\\Path\\To\\YourPowerShellScript.ps1

    或者,如果批处理文件的工作目录与PowerShell脚本所在的目录相同,则可以使用相对路径:

    1
    PowerShell .\\YourPowerShellScript.ps1

    在此操作生效之前,您需要设置PC的执行策略,下面将说明如何执行。

    手动运行脚本方法1

    您可以查看我的博客文章以获取更多信息,但实际上是创建PowerShell .ps1脚本文件来执行所需的操作,然后在同一目录中创建.cmd批处理文件,并将以下内容用作文件的内容:

    1
    2
    3
    4
    @ECHO OFF
    SET ThisScriptsDirectory=%~dp0
    SET PowerShellScriptPath=%ThisScriptsDirectory%MyPowerShellScript.ps1
    PowerShell -NoProfile -ExecutionPolicy Bypass -Command"& '%PowerShellScriptPath%'"

    用您的PowerShell脚本的文件名替换第3行上的MyPowerShellScript.ps1。

    这样一来,您只需双击批处理文件即可运行PowerShell脚本,并且避免您必须更改PowerShell执行策略。

    我的博客文章还显示了您需要做的如何以管理员身份运行PowerShell脚本。

    手动运行脚本方法2

    或者,如果您不想为每个PowerShell脚本创建批处理文件,则可以将默认PowerShell脚本行为从"编辑"更改为"运行",从而允许您双击.ps1文件来运行它们。

    您还需要修改其他注册表设置,以便可以运行文件路径包含空格的脚本。我在这篇博客文章中展示了如何做这两个事情。

    但是,使用这种方法,您首先需要设置执行策略以允许运行脚本。您每台PC只需执行一次此操作,就可以通过在PowerShell命令提示符下运行此行来完成。

    1
    Start-Process PowerShell -ArgumentList 'Set-ExecutionPolicy RemoteSigned -Force' -Verb RunAs

    Set-ExecutionPolicy RemoteSigned -Force是实际更改执行策略的命令。这会将其设置为RemoteSigned,因此您可以根据需要将其更改为其他名称。另外,此行将自动为您以管理员身份运行PowerShell,这是更改执行策略所必需的。


    您可以使用以下命令:
    powershell.exe-参数c:\ scriptPath \ Script.ps1


    脚本执行命令行设置

    最新内容

    相关内容

    热门文章

    推荐文章

    标签云

    猜你喜欢