【问题标题】:Powershell Script doesn't work when starting it by double-clicking双击启动时Powershell脚本不起作用
【发布时间】:2012-12-07 11:15:09
【问题描述】:

我在执行 powershell 脚本时遇到了一些奇怪的行为。

  • 当我使用 ISE 运行我的脚本时,它运行良好。
  • 当我打开 Powershell.exe 并运行我的脚本时,它运行良好。
  • 当我打开 cmd 并使用 powershell.exe -noexit ./myscript.ps1 启动我的脚本时,myscript 工作正常。

但是,当我双击 myscript 时,powershell 打开了几毫秒,我看到它显示了一些错误(红色字体)并且 powershell 窗口关闭了。由于 powershell 窗口关闭得很快,我无法找到导致此问题的错误。 我什至在我的洞脚本周围尝试了一个大的 try-catch 块,捕获任何 [Exception] 并将其写入日志文件。但是:没有生成日志文件(没有调用catch)。

如何跟踪该问题?什么可能导致麻烦? 请注意,我的执行策略设置为不受限制。

【问题讨论】:

    标签: powershell command-line powershell-3.0


    【解决方案1】:

    默认情况下,出于安全原因,当您双击 .ps1 文件时,操作是:编辑文件,而不是运行文件。
    执行您的脚本:右键单击它并选择使用 powershell 运行

    【讨论】:

    • 正如我所说,powershell 打开并且脚本正在运行,抛出一个错误。我的默认双击操作是运行文件。但是,我仔细检查并尝试右键单击运行文件:相同的错误。
    • 尝试将您的 $ErrorActionPreference 设置为在脚本开头停止以查看您的异常是否被捕获
    • 还是没有运气。窗口关闭,没有捕获到异常。
    【解决方案2】:

    我也无法通过双击来运行脚本,尽管手动运行它没有问题。我发现问题出在路径上。当我从包含空格的路径运行脚本时,例如:

    C:\Users\john doe\Documents\Sample.ps1

    scipt 运行失败。将脚本移至:

    C:\Scripts\Sample.ps1

    没有空格,解决了问题。

    【讨论】:

    • 我遇到了同样的问题,只是我的脚本名称有一个空格。
    【解决方案3】:

    在尝试建议之前调用它以查看您当前的设置(如果您想稍后恢复它们):

    cmd /c FType Microsoft.PowerShellScript.1
    

    然后调用它(请注意,您将通过它更改“从资源管理器”调用脚本的方式):

    cmd /c @"
    FType Microsoft.PowerShellScript.1=$PSHOME\powershell.exe -NoExit . "'%1'" %*
    "@
    

    然后双击脚本,它不应该退出,-NoExit 可以解决问题。查看您的错误消息并解决问题。 但是现在您“从资源管理器”调用的所有脚本都保持其控制台打开。那么你可以 从上述命令中删除 -NoExit 并再次运行它或恢复您的 原始设置。


    在 PS v2 中调用脚本的一些细节和一种好方法是here。 不幸的是,它在 PS v3 中被破坏了 - submitted issue

    【讨论】:

    • 好的指针,但它应该是-NoExit -File "%1" %*,同时也支持嵌入' 字符的文件路径。并防止对传递参数的潜在不需要的解释 (%*)。虽然委派给cmd.exe 的内部ftype 命令很方便,但它只修改机器级 配置,这有两个重要含义:(a) 你需要elevation i> 运行命令和 (b) user-level 定义可能会覆盖机器级别的定义。
    【解决方案4】:

    这很可能是您当地执行政策的问题。

    默认情况下,Powershell 配置为不运行未签名的脚本(甚至是本地脚本)。如果您还没有签署脚本,那么在 Windows 中更改默认的双击“操作”将无效 - Powershell 将打开,读取执行策略,检查脚本的签名,如果没有发现,将中止并出现错误。

    在 Powershell 中:

    Help about_execution_policies

    为您提供所有血腥细节,以及允许未签名脚本运行的方法(在合理范围内 - 您可能不想运行远程脚本,只希望运行您保存到系统中的脚本)。

    编辑:我在您问题的结尾看到您已将执行策略设置为“不受限制”,这应该允许脚本运行。但是,对于遇到执行策略问题的其他人来说,这可能是有用的信息。

    【讨论】:

      【解决方案5】:

      如果你会发现错误,你很可能会看到这个

      无法加载文件。文件不是 数字签名。该脚本不会在系统上执行。请 有关详细信息,请参阅“Get-Help about_signing”。

      因为您可以从自己启动的 shell 运行它,而不是用鼠标右键单击“使用 PowerShell 运行”,所以我敢打赌您拥有 x64 系统。手动启动配置执行策略的一个版本的 PowerShell,同时右键单击启动另一个版本的 PowerShell。

      尝试同时启动 x64 和 x86 版本并检查每个版本中的安全策略

      Get-ExecutionPolicy
      

      【讨论】:

        【解决方案6】:

        我的情况与问题中描述的情况完全相同:我的脚本在任何地方都可以工作,除非双击。*当我双击时,powershell 窗口会打开,但一秒钟左右就会关闭。我的执行策略也设置为无限制。

        我尝试了有关FType Microsoft.PowerShellScript.1 的选定答案,但它没有改变任何东西。

        我找到的唯一解决方案是解决方法:创建一个启动 powershell 的 bat 文件。

        1. 创建一个文件,复制它并修改路径:powershell.exe -File "C:\Users\user\script\myscript.ps1"
        2. 另存为.bat
        3. 双击蝙蝠

          • 我还使用.ahk 以快捷方式启动我的powershell,但直接指向powershell 时它不起作用。我必须指向.bat

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-11-10
          • 2011-10-29
          • 1970-01-01
          • 1970-01-01
          • 2012-05-04
          • 1970-01-01
          • 1970-01-01
          • 2020-01-01
          相关资源
          最近更新 更多