【问题标题】:How to condense PowerShell script to fit on a single line如何压缩 PowerShell 脚本以适合单行
【发布时间】:2014-03-08 03:25:41
【问题描述】:

快速提问。我正在尝试编写以下 PowerShell 脚本,但我希望它适合一行:

$app = New-Object -comobject Excel.Application
$wb1 = $app.Workbooks.Open("C:\xampp\upload_files\Launchpad.xlsm")
$app.Run("Refresh")
$wb1.Close($false)
$app.Quit()

伪代码如下所示:

$app = New-Object -comobject Excel.Application AND $wb1 = $app.Workbooks.Open AND "C:\xampp\upload_files\Launchpad.xlsm") AND $app.Run("Refresh") AND $wb1.Close($false) AND $app.Quit()

我想放在一行的原因是因为我想直接在 Windows 任务计划程序的“参数”框中插入参数。原因是由于某些原因脚本已被禁用(例如,我无法调用 .ps1 文件...)

我知道这仍然有效,因为我已经运行了“单线”PS 脚本。语法是什么样的??

亲切的问候, G.

【问题讨论】:

  • “原因是由于某种原因脚本已被禁用” - 与其尝试解决此问题,不如找出该决定是否有正当理由(可能没有,或者原因未知,根据您的措辞方式)。如果这不是出于正当理由而做出的有意识决定,则将其撤销。
  • 如果“脚本已被禁用”是指 Powershell 执行策略设置为“受限”,您可以在调用 Powershell.exe 时在命令行中覆盖该策略。

标签: windows powershell


【解决方案1】:

Powershell 语句可以用分号隔开:

$app = New-Object -COM 'Excel.Application'; $wb1 = $app.Workbooks.Open("..."); ...

PowerShell 可执行文件采用-Command 参数,允许您指定要在 PowerShell 中执行的命令字符串:

powershell.exe -Command "stmnt1; stmnt2; ..."

要通过任务计划程序运行它,您需要将powershell.exe 放入任务的“程序”字段,并将-Command "stmnt1; stmnt2; ..." 放入任务的“参数”字段。

但是,正如@alroc 所说:您应该验证脚本执行受到限制的原因。如果它只是默认设置,您可以通过运行 Set-ExecutionPolicy RemoteSigned 来更改它,或者通过将 -ExecutionPolicy ByPass 添加到 PowerShell 命令行来覆盖它。但是,如果通过更改/绕过策略来强制执行该设置,则该设置将失败,并且您可能会因违反公司政策而陷入相当大的麻烦。

【讨论】:

  • 非常感谢您的快速回复!当我将脚本直接输入到 powershell 时,您的语法有效……但是当我将其放入 Windows 任务计划程序的“参数”框中时,它不起作用?
  • 更新:我已将以下代码 -Command "$app = New-Object -comobject Excel.Application; $wb1 = $app.Workbooks.Open("C:\xampp\upload_files\Launchpad.xlsm"); $app.Run("Refresh"); $wb1.Close($false); $app.Quit()" 插入参数部分,但似乎没有任何效果。但是,当我将代码直接输入到 powershell 时,该代码可以完美运行。这是一个政策问题吗?还是语法仍然有错误?再次感谢大家。
  • @Noobster:尝试从常规命令提示符 (CMD.exe) 运行命令行 powershell.exe -Command "..."
  • 谢谢伙计——这样做让我知道出了什么问题。忘记用 ' 转义“。这是编程的恼人方面,有时让我想放弃并建立一个农场。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-08
  • 2019-04-26
  • 2019-07-30
  • 2020-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多