5

执行 powershell 脚本时出现一些奇怪的行为。

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

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

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

4

6 回答 6

6

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

cmd /c FType Microsoft.PowerShellScript.1

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

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

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


在 PS v2 中调用脚本的一些细节和一种好方法在这里。不幸的是,它在 PS v3提交的问题中被破坏了。

于 2012-12-07T15:18:29.217 回答
2

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

于 2012-12-07T11:30:25.940 回答
1

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

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

scipt 无法运行。将脚本移动到:

C:\Scripts\Sample.ps1

没有空格,解决了这个问题。

于 2020-04-21T05:17:21.130 回答
0

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

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

在 Powershell 中:

Help about_execution_policies

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

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

于 2013-01-08T16:54:25.873 回答
0

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

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

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

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

Get-ExecutionPolicy
于 2013-11-05T16:58:23.407 回答
0

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

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

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

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

    • 我也曾经.ahk用快捷方式启动我的powershell,直接指向powershell时它不起作用。我不得不指出.bat
于 2019-10-27T17:00:31.537 回答