Powershell 脚本 Window 消失
Powershell Script Window Disappears
我的最终目标是创建一个 运行 是一个 powershell 脚本的键盘快捷键。我关注了这个人在做什么here。现在,当我 运行 来自 PowerShell 终端的脚本时,一切正常。但是,当我通过双击文件资源管理器(或键盘快捷键)从快捷方式 运行 时,会出现一个新的 window 并带有某种红色文本,但 window 之前消失了我有时间阅读任何东西。如果我能阅读消息,我确定我可以解决问题,但 window 消失得太快了。我的 .ps1 脚本和快捷方式已保存到桌面。
我发现这个 article 建议添加 -NoExit
开关,但这并不能解决我的问题。
我已尝试将执行策略更改为 Bypass
和 Unrestricted
,但都没有效果。
我尝试修改我的脚本以在第一行代码处暂停,但没有达到那么远,所以我认为问题不在我的脚本中。
快捷方式的属性:
目标:%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%
指向用户 所在的目录桌面和文档 已存储。
我的最终目标是创建一个 运行 是一个 powershell 脚本的键盘快捷键。我关注了这个人在做什么here。现在,当我 运行 来自 PowerShell 终端的脚本时,一切正常。但是,当我通过双击文件资源管理器(或键盘快捷键)从快捷方式 运行 时,会出现一个新的 window 并带有某种红色文本,但 window 之前消失了我有时间阅读任何东西。如果我能阅读消息,我确定我可以解决问题,但 window 消失得太快了。我的 .ps1 脚本和快捷方式已保存到桌面。
我发现这个 article 建议添加 -NoExit
开关,但这并不能解决我的问题。
我已尝试将执行策略更改为 Bypass
和 Unrestricted
,但都没有效果。
我尝试修改我的脚本以在第一行代码处暂停,但没有达到那么远,所以我认为问题不在我的脚本中。
快捷方式的属性:
目标:%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%
指向用户 所在的目录桌面和文档 已存储。