【问题标题】:Powershell Start-Process works but not from .ps1 scriptPowershell Start-Process 有效,但不适用于 .ps1 脚本
【发布时间】:2018-12-24 18:41:24
【问题描述】:

如果我将它粘贴到 Powershell 蓝色窗口中,它会运行良好并启动程序

Start-Process “C:\Program Files (x86)\Engine Pro\engine.exe” -ArgumentList "#21#”;

但如果我尝试在脚本中运行相同的命令,run.ps1 脚本,该脚本从 Windows 中的计划任务启动,它什么也不做

PowerShell.exe -windowstyle hidden -NoProfile -ExecutionPolicy Bypass C:\run.ps1

它与 -ExecutionPolicy 绕过有关吗?我是否也必须在脚本中有执行策略?我真的不知道那是什么。我知道 -windowstyle hidden 是什么,但是 -NoProfile -ExecutionPolicy Bypass 我不知道为什么会这样,只是在另一个页面上找到了它,但是除了从脚本中启动的程序之外,它都可以正常工作。

谢谢。

【问题讨论】:

  • 你的命令使用了Unicode(非ASCII)双引号;除非您将 *.ps1 文件保存为 UTF-8 with BOM(或 UTF-16LE),否则 PowerShell 会误解它。
  • 根据您的 PowerShell 版本(低于 6/core)默认为 -Command 而不是 -File,因此您可能需要使用 PowerShell.exe -windowstyle hidden -NoProfile -ExecutionPolicy Bypass -File C:\run.ps1
  • 整个脚本都与“”一起工作,但是当我尝试从脚本中启动一个程序时,它只是没有注意到。我使用“”并使用编码程序 ATOM 1.33.1 x64 编辑文件。添加 -File 什么也没做。我以为它可能是 BitDefender,但我把它关掉了,程序没有启动。我尝试从脚本启动notepad.exe,但也没有启动。不知道发生了什么。
  • 愚蠢的我,这是 & 符号。我已经在数百个线程上看到了它。 & Start-Process "C:\Program Files (x86)\Engine Pro\engine.exe" -ArgumentList "#21#"; 工作,花了一段时间才弄明白。谢谢大家

标签: powershell start-process


【解决方案1】:
& Start-Process "C:\Program Files (x86)\Engine Pro\engine.exe" -ArgumentList "#21#";

【讨论】:

  • 这里的调用运算符(&)是多余的。
  • 详细说明@Bill_Stewart 的评论:& 在您的Start-Process 呼叫之前的缺席不能成为您问题中描述的问题的根源,因为您是否在之前放置& Start-Process 没有区别。 & 只有在引号和/或通过变量引用指定命令名称/路径时才需要
  • 哦,即使有 -ArgumentList 位?它上面的线是我正在使用的确切线,它正在工作。所以我不会在这个时候胡闹。我想知道当时的问题是什么,我所做的事情似乎已经解决了。我很快就会重新审视这个问题,我不得不在圣诞节前尝试让它工作,并且我做了一些修复它。该脚本现在也可以按照我的需要启动程序。感谢您的支持。也许是 Bit Defender 威胁防御,我将其关闭,然后为 Powershell.exe 和 x64 Powershell.exe 设置了一个例外。我也注意到了。
猜你喜欢
  • 2019-08-16
  • 2012-08-04
  • 2017-03-25
  • 1970-01-01
  • 1970-01-01
  • 2022-12-10
  • 2011-10-12
  • 2018-06-15
  • 1970-01-01
相关资源
最近更新 更多