Powershell 脚本窗口消失

问题描述 投票:0回答:3

我的最终目标是创建一个运行 powershell 脚本的键盘快捷键。我关注了这个人在here所做的事情。现在,当我从 PowerShell 终端运行脚本时,一切正常。但是,当我通过双击文件资源管理器(或键盘快捷键)从快捷方式运行它时,会出现一个新窗口,其中包含某种红色文本,但在我有时间阅读任何内容之前该窗口就消失了。我确信如果我能阅读该消息,我就可以解决该问题,但窗口消失得太快了。我的 .ps1 脚本和快捷方式已保存到桌面。

我发现这篇文章建议添加

-NoExit
开关,但这并不能解决我的问题。

我尝试将执行策略更改为

Bypass
Unrestricted
,但都没有效果。

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

快捷方式的属性:

目标:

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

开始于:

C:\Users\%UserName%\Desktop\

我需要知道为什么我的脚本没有运行。

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

powershell shortcut
3个回答
2
投票

您的症状暗示

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

我已在 GitHub 问题 #10471 中报告了此行为


[1]%USERPROFILE%

%HOMEDRIVE%%HOMEPATH%
默认指向
same目录(C:\Users\%USERNAME%
),但可以配置为指向
不同位置;然后,%USERPROFILE%
指向仅包含
操作系统和应用程序配置数据的目录,而%HOMEDRIVE%%HOMEPATH%
则指向存储用户的
桌面和文档的目录。


0
投票
尝试将

C:\Users\%UserName%\

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


0
投票
您可以使用我

发布在这里

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

 开关之外,还有更多选项可以在代码运行后保持窗口打开。
为此,请查看
deadlydog 的回答他写的博客

© www.soinside.com 2019 - 2024. All rights reserved.