设置PowerShell脚本以执行自动执行

时间:2008-08-27 07:00:43

标签: command-line powershell scripting

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

  1. 一个打开PowerShell的命令行,执行脚本并关闭PowerShell(这将用于全局构建例程)
  2. 我可以双击运行上面的文件(我会在手动测试构建过程的组件时使用此方法)
  3. 我一直在线阅读PowerShell文档,虽然我可以找到很多脚本,但我一直无法找到如何做我需要的说明。谢谢你的帮助。

5 个答案:

答案 0 :(得分:14)

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

如果你愿意用一点CMD来玷污你漂亮的PowerShell脚本,你可以使用PowerShell-CMD多语言技巧。将PowerShell脚本保存为.CMD文件,并将此行放在顶部:

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

如果你需要支持引用的参数,那么有一个更长的版本,它也允许注释。 (注意双重@的不寻常的CMD评论技巧。)

@@:: 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

答案 1 :(得分:8)

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

powershell.exe .\foo.ps1

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

答案 2 :(得分:3)

Source对于马特的回答。

我可以通过创建一个包含以下内容的批处理文件来双击文件来运行它:

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

答案 3 :(得分:2)

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

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

PowerShell C:\Path\To\YourPowerShellScript.ps1

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

PowerShell .\YourPowerShellScript.ps1

在此之前,你将需要设置PC的执行政策,我将在下面展示如何做。


手动运行脚本方法1

您可以see my blog post for more information,但基本上创建PowerShell .ps1脚本文件以执行您想要的操作,然后在同一目录中创建.cmd批处理文件,并使用以下内容获取文件内容:

@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文件以运行它们。

您还需要修改其他注册表设置,以便运行文件路径包含空格的脚本。我将展示如何做这两件事on this blog post

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

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

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

答案 4 :(得分:0)

您可以使用此命令: powershell.exe -argument c:\ scriptPath \ Script.ps1