PowerShell脚本会引发错误,但会快速读取

时间:2017-09-06 22:29:05

标签: powershell

当我开始新的一天时,我写了一个非常简单的PS脚本来编写打开程序。

def g(L, n, k, A, B):
    if len(A) == k:
        return [[tuple(A), tuple([L[i] for i in xrange(0, n + 1)] + B)]]

    elif len(B) == k:
        return [[tuple([L[i] for i in xrange(0, n + 1)] + A), tuple(B)]]

    return g(L, n - 1, k, A, [L[n]] + B[0:]) + g(L, n - 1, k, [L[n]] + A[0:], B)

def f(L):
    assert(len(L) > 3 and len(L) % 2 == 0)
    return g(L, len(L) - 2, len(L) / 2, [], [L[-1]])

for i in f(['x00','x01','x02','x03','x10','x11','x12','x13']):
    print(i)

问题是如果我从我的桌面运行它会失败。 PS窗口打开闪烁红色文本并再次关闭比我可以告诉发生的事情更快。我已经在其他帖子中看到了这个说法,要添加-noexit开关,或者在最后添加一个Start-Sleep,或者Read-Host -Prompt"按任意键继续",但没有一个那些工作。该错误显然是在脚本启动之前发生的。我已将PS和PS(ISE)设置为在管理员打开的任何时候运行,运行该脚本不会提示管理员,因此它不会作为管理员打开,这就是我所做的事情。 ;猜测错了。

我没有在属性中看到任何选项,可以将其设置为以管理员身份运行,也可以在右键菜单中运行。右键单击并打开PS具有相同的结果。打开PS并运行脚本可以正常工作。

想法?

哦,我在Windows 10 x64上,如果重要的话。

4 个答案:

答案 0 :(得分:0)

您没有指定运行脚本的方式,但退出原因的原因是您最后退出的原因。删除它,您将能够看到错误。

答案 1 :(得分:0)

选项1:将其添加到代码顶部以将错误转换为终止错误。出错的原因可能是因为错误是非终止的,因此它会输出错误,然后到达Exit并关闭窗口。

$ErrorPreference = "Stop"

选项2:删除Exit,我建议您从一开始就删除Clear。在这种情况下,最好在Powershell ISE中运行此脚本(我认为对于版本4+)。

选项3:直接启动PS文件。也许最后添加Read-Host 'Press any key to continue'会很有用。如果错误来自启动脚本(也就是脚本之外),那么这应该可以防止该错误。找到.ps1文件并选择“使用Powershell运行”

答案 2 :(得分:0)

终于弄明白了。

以前我已经厌倦了点击PS1文件来运行它们并在记事本中打开它们。所以我将默认程序更改为PowerShell。一旦我将其更改回记事本,我现在可以右键单击该文件并选择Run with Powershell,它运行得很好。

答案 3 :(得分:0)

我遇到了同样的问题,我的解决方法是确保脚本路径中没有“空格”。从控制台运行良好,但双击或右键单击执行将失败。 C:\My Path\myScript.ps1 会失败 C:\My_Path\myScript.ps1 会运行正常。