Powershell脚本没有';双击启动时无法工作

Powershell脚本没有';双击启动时无法工作,powershell,command-line,powershell-3.0,Powershell,Command Line,Powershell 3.0,我在执行powershell脚本时出现了一些奇怪的行为 当我使用ISE运行脚本时,它工作得很好 当我打开Powershell.exe并运行脚本时,它工作正常 当我打开cmd并使用powershell.exe-noexit启动脚本时 /myscript.ps1,myscript工作正常 但是,当我双击myscript时,powershell会打开几毫秒,我看到它显示一些错误(红色字体),powershell窗口关闭。我无法跟踪导致此问题的错误,因为powershell窗口关闭快。 我甚至在我的

我在执行powershell脚本时出现了一些奇怪的行为

  • 当我使用ISE运行脚本时,它工作得很好
  • 当我打开Powershell.exe并运行脚本时,它工作正常
  • 当我打开cmd并使用
    powershell.exe-noexit启动脚本时
    /myscript.ps1
    ,myscript工作正常
但是,当我双击myscript时,powershell会打开几毫秒,我看到它显示一些错误(红色字体),powershell窗口关闭。我无法跟踪导致此问题的错误,因为powershell窗口关闭快。 我甚至在我的hole脚本周围尝试了一个大的try-catch块,捕捉任何
[Exception]
并将其写入日志文件。但是:不会生成日志文件(不会调用catch)

我如何跟踪该问题?可能是什么引起了麻烦?
请注意,我的执行策略设置为无限制。

默认情况下,出于安全原因,在.ps1文件上双击clic时,操作是:编辑文件,而不是运行文件。

要执行脚本:请右键单击脚本并选择“使用powershell运行”,然后再尝试执行建议调用此命令以查看当前设置(如果以后要恢复设置):

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

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


在PSV2中调用脚本的一些细节和一个好方法是。
不幸的是,它在PS v3-中被破坏。

这很可能是本地执行策略的问题

默认情况下,Powershell配置为不运行未签名的脚本(即使是本地脚本)。如果您尚未对脚本进行签名,则在Windows中更改默认双击“操作”将无效-Powershell将打开,读取执行策略,检查脚本签名,如果未找到签名,将因错误而中止

在Powershell中:

关于执行策略的帮助

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


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

如果您发现错误,您很可能会看到这一点

无法加载该文件。该文件不可用 数字签名。脚本将不会在系统上执行。请 有关更多详细信息,请参阅“获取有关签名的帮助”

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

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

Get-ExecutionPolicy

我的情况与问题中描述的完全相同:我的脚本在任何地方都能工作,但双击时除外。*当我双击powershell时,windows会打开,但大约一秒钟后它就会关闭。我的执行策略也设置为无限制

我尝试了有关Microsoft.PowerShellScript.1键入的选定答案,但没有改变任何内容

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

  • 创建一个文件,复制此文件并修改路径:
    powershell.exe-文件“C:\Users\user\script\myscript.ps1”
  • 将其另存为
    .bat
  • 双击球棒

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

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

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

    scipt未能运行。将脚本移动到:

    C:\Scripts\Sample.ps1


    它没有空格,解决了问题。

    正如我所说,powershell打开,脚本正在运行,抛出一个错误。我的默认双击操作是运行文件。但是,我仔细检查了它,并尝试右键单击运行文件:相同的错误。尝试将$ErrorActionPreference设置为在脚本开始时停止,以查看是否捕获了异常仍然没有成功。窗口关闭,没有发现异常。我也有同样的问题,只是我的脚本名有一个空格。
    cmd /c @"
    FType Microsoft.PowerShellScript.1=$PSHOME\powershell.exe -NoExit . "'%1'" %*
    "@
    
    Get-ExecutionPolicy