我在执行powershell脚本时遇到了一些奇怪的行为。
- 当我使用伊势运行我的脚本时,它工作得很好。
- 当我打开Powershell.exe并运行我的脚本时,它工作得很好。
- 当我打开cmd并使用
powershell.exe -noexit ./myscript.ps1
启动脚本时,myscript工作正常。
但是当我双击myscript时,powershell打开了几毫秒,我看到它显示了一些错误(红色字体),powershell窗口关闭。我无法追踪导致这个问题的错误,因为powershell窗口关闭得太快了。我甚至在我的hole脚本周围尝试了一个大的try-catch块,捕获任何[Exception]
并将其写入日志文件。但是:不生成日志文件(不调用catch)。
如何跟踪该问题?是什么引起了这个麻烦呢?请注意,我的执行策略设置为无限制。
7条答案
按热度按时间sxpgvts31#
在尝试此建议之前,请调用以下命令以查看您的当前设置(如果您希望稍后恢复它们):
然后调用这个(注意,你将改变你的脚本是如何调用“从资源管理器”由这个):
然后双击脚本,它不应该退出,
-NoExit
就可以了。查看错误消息并解决问题。但是现在你所有的脚本调用“从资源管理器”保持他们的控制台打开。然后,您可以从上述命令中删除-NoExit
并再次运行它或恢复原始设置。在PSv 2中调用脚本的一个好方法是here。在PS v3 -submitted issue中被破解。
mcdcgff02#
默认情况下,出于安全原因,当您双击.ps1文件时,操作为:编辑文件,而不是运行文件。
执行脚本:右键单击它并选择使用powershell运行
2hh7jdfx3#
我也无法通过双击运行脚本,尽管手动运行它没有问题。我发现问题出在路上。当我从包含空格的路径运行脚本时,例如:
C:\Users\john doe\Documents\Sample.ps1
脚本无法运行。将脚本移动到:
C:\Scripts\Sample.ps1
它没有空格,解决了这个问题。
eh57zj3b4#
这很可能是本地执行策略的问题。
默认情况下,PowerShell配置为不运行未签名的脚本(即使是本地脚本)。如果你没有签署你的脚本,那么在Windows中更改默认的双击“操作”将不会有任何效果- PowerShell将打开,读取执行策略,检查脚本的签名,如果没有发现,将中止并显示错误。
在PowerShell中:
Help about_execution_policies
提供了所有血淋淋的细节,以及允许未签名脚本运行的方法(在合理范围内-您可能不想运行远程脚本,只想运行您保存到系统中的脚本)。
编辑:我看到在你的问题的末尾,你已经设置了执行策略为“无限制”,这应该允许脚本运行。但是,这对于遇到执行策略问题的其他人来说可能是有用的信息。
mwg9r5ms5#
如果您要捕获错误,您很可能会看到以下内容
无法加载文件。该文件未进行数字签名。该脚本将不会在系统上执行。有关详细信息,请参阅“获取有关_signing的帮助”。
因为你可以从你自己启动的shell运行它,而不是用鼠标右键点击“用PowerShell运行”,我敢打赌你有x64系统。手动启动配置了执行策略的一个PowerShell版本,而右键单击则启动了另一个PowerShell版本。
尝试启动x64和x86版本,并检查每个版本中的安全策略
8xiog9wr6#
我的情况与问题中描述的完全相同:我的脚本在任何地方都可以工作,除了双击。* 当我双击一个powershell窗口会打开,但然后它会在一秒钟左右后关闭。我的执行策略也设置为不受限制。
我尝试了选择的关于
FType Microsoft.PowerShellScript.1
的答案,但它没有改变任何东西。我找到的唯一解决方案是一个解决方案:创建一个启动powershell的bat文件。
1.创建一个文件,复制并修改路径:
powershell.exe -File "C:\Users\user\script\myscript.ps1"
1.保存为
.bat
.ahk
启动powershell,用快捷方式直接指向powershell时它不起作用。我不得不指向.bat
y0u0uwnf7#
在Ronen的带领下,我写了一个快速的C#控制台应用程序来修复PowerShell中的错误,如果完整路径中的任何地方都有空格,则无法在Explorer中双击启动。使用下面的代码编译控制台应用程序后,将exe放在C:\ProgramFiles中的某个位置,然后右键单击资源管理器中的任何powershell脚本,选择打开方式,选择另一个应用程序,更多应用程序,滚动到底部,在此PC上查找另一个应用程序,然后找到刚刚创建的控制台应用程序exe。现在,任何时候双击带有此扩展名的脚本,它都应该工作。对每种要双击运行的powershell脚本扩展类型执行。下地狱吧微软