我的最终目标是创建一个运行 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\
我需要知道为什么我的脚本没有运行。
请让我知道我遗漏的其他信息,并提前致谢。
您的症状暗示
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%
则指向存储用户的桌面和文档的目录。
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
开关之外,还有更多选项可以在代码运行后保持窗口打开。为此,请查看