当创建Windows快捷方式来启动PowerShell
脚本时,当作为普通用户双击并右键单击Run as administrator
时,以下内容可以正常工作:
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy "Bypass" -Command "&{& 'C:\Script.ps1'}"
然而,当路径是相对的并且不预先知道时,以下内容在作为常规用户双击时可以正常工作,但右键单击Run as administrator
则不行:
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy "Bypass" -Command "&{& '.\Script.ps1'}"
我的问题是,当路径是相对路径时,如何在两种情况下都能工作?我尝试使用PSScriptRoot
,但也不起作用。
谢谢你的帮助。
3条答案
按热度按时间pcww981p1#
当以管理员身份从资源管理器启动时,必须提供脚本的绝对路径。
当以admin身份启动进程时,Explorer.exe会忽略快捷方式中的起始目录。相反,Admin级别的进程始终使用
[Environment]::GetFolderPath('System')
(通常为C:\Windows\System32
)中的当前目录启动。在不同的目录中运行的简单方法是在脚本的开头更改目录。下面的行将
cd
转换到脚本所在的目录。如果脚本需要在不同的路径中启动,那么您可能必须编写一个函数来发现该路径在本地机器上的位置(例如enumerating USB drives)。
3zwjbxry2#
您可以将当前解决方案用于非管理员提升的快捷方式,然后在内部自动提升脚本:
6uxekuva3#
我找到的唯一解决方案是:
1.使用以下两行创建CMD脚本:
1.创建此CMD的快捷方式并编辑属性以管理员身份执行
现在,您可以使用快捷方式以管理员身份使用相对路径执行PowerShell脚本。
如果你改变了cmd文件的位置,或者如果你重命名了包含你的脚本的文件夹,windows似乎并不关心它(快捷方式的属性被更新)。