Powershell 脚本 Window 消失

Powershell Script Window Disappears

我的最终目标是创建一个 运行 是一个 powershell 脚本的键盘快捷键。我关注了这个人在做什么here。现在,当我 运行 来自 PowerShell 终端的脚本时,一切正常。但是,当我通过双击文件资源管理器(或键盘快捷键)从快捷方式 运行 时,会出现一个新的 window 并带有某种红色文本,但 window 之前消失了我有时间阅读任何东西。如果我能阅读消息,我确定我可以解决问题,但 window 消失得太快了。我的 .ps1 脚本和快捷方式已保存到桌面。

我发现这个 article 建议添加 -NoExit 开关,但这并不能解决我的问题。

我已尝试将执行策略更改为 BypassUnrestricted,但都没有效果。

我尝试修改我的脚本以在第一行代码处暂停,但没有达到那么远,所以我认为问题不在我的脚本中。

快捷方式的属性:

目标:%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -noexit -ExecutionPolicy Bypass -File C:\Users\%UserName%\Desktop\<script>.ps1

开始于:C:\Users\%UserName%\Desktop\

我需要知道为什么我的脚本不是 运行ning。

请让我知道我遗漏了哪些其他信息,并提前致谢。

尝试将 C:\Users\%UserName%\ 更改为 %userprofile%\。我不相信 %username% 以您尝试使用它的方式在快捷方式中工作。

您可以使用我 New-Shortcut 函数来创建您的快捷方式:

$myDesktop     = [Environment]::GetFolderPath("Desktop")
$myScriptPath  = Join-Path -Path $myDesktop -ChildPath 'YOUR PS1 SCRIPT FILE'

$shortcutProps = @{
    'ShortcutPath'     = Join-Path -Path $myDesktop -ChildPath 'Run PowerShell File.lnk'
    'TargetPath'       = '%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe'
    'Arguments'        = '-ExecutionPolicy Bypass', '-NoExit', '-NoLogo', ('-File "{0}"' -f $myScriptPath)
    'Description'      = "Run $myScriptPath"
    'WorkingDirectory' = $myDesktop
    'HotKey'           = 'Ctrl','Shift','F'
    'WindowStyle'      = 'Default'
}

New-Shortcut @shortcutProps

除了 -NoExit 开关之外,还有更多选项可以在代码具有 运行.
后让 window 保持打开状态 为此,请查看他写的 deadlydog's answer and the blog

您的症状表明 C:\Users\%UserName%\Desktop\<script>.ps1 引用了一个 不存在的 脚本文件 .

<script>.ps1 只是真实文件名的占位符。

注意:使用环境变量引用%UserName%本身不是问题; 任何环境变量都可以这样引用,在Target:字段(命令行)和Start in:字段(工作目录)中。
顺便说一句:考虑使用 %USERPROFILE%,或者更稳健地,%HOMEDRIVE%%HOMEPATH% 来引用当前用户的主目录[1].

请确保路径正确,然后重试。

如果您想解决基于环境变量的路径,临时修改您的命令行如下:

powershell.exe -noexit -ExecutionPolicy Bypass -c 'C:\Users\%UserName%\Desktop\<script>.ps1'

-File 被替换为 -c (-Command),路径周围使用了 单引号 ,这使得 PowerShell 将内容视为要打印的 文字字符串

以上只会打印展开的脚本路径。


至于根本原因

有争议的是,如果找不到传递给 -File 参数的脚本文件路径,PowerShell 总是 退出新进程 - 即使 -NoExit 也是现在。

同样的问题存在 - 但只存在于 Windows PowerShell,不存在于 PowerShell Core - 如果文件存在但 没有扩展名 .ps1.

我已报告此行为 on GitHub


[1]%USERPROFILE%%HOMEDRIVE%%HOMEPATH% 默认指向 相同的 目录(C:\Users\%USERNAME%), 但可以配置为指向 不同的 位置; %USERPROFILE% 则指向仅包含 OS 和应用程序配置数据 的目录,而 %HOMEDRIVE%%HOMEPATH% 指向用户 所在的目录桌面和文档 已存储。