2016-07-29 59 views
2

当创建一个Windows快捷方式启动一个PowerShell脚本以下工作正常双时,作为一个普通用户,并用鼠标右键单击Run as administrator点击:Windows快捷方式与相对路径PowerShell脚本

%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy "Bypass" -Command "&{& 'C:\Script.ps1'}" 

Example screenshot

但是,当路径是相对的并且不知道前面的情况时,以下情况在正常用户双击时可以正常工作,但不能右键单击Run as administrator

%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy "Bypass" -Command "&{& '.\Script.ps1'}" 

我的问题,我怎么能在两种情况下工作,当路径是相对的?我试过使用PSScriptRoot,但那也没用。

谢谢你的帮助。

+0

相对于什么?屏幕截图中的“开始”框为空。你是填满那个盒子,还是有一些其他的路径用于开始? –

+0

这是我对这个问题的解决方案:http://stackoverflow.com/a/35054677/368889 – Mica

回答

2

从资源管理器以管理员身份启动时,必须提供脚本的绝对路径。

当以admin身份启动进程时,Explorer.exe忽略快捷方式中的起始目录。相反,管理员级别的进程始终使用[Environment]::GetFolderPath('System')中的当前目录启动(通常为C:\Windows\System32

在不同目录中运行的简单方法是在脚本开始处更改目录。以下行将cd到目录的脚本是英寸

Set-Location $PsScriptRoot 

如果脚本需要在不同的路径来启动,那么您可能需要编写一个函数来发现其中这条道路是在本地机器上(如enumerating USB drives

+0

谢谢你的帮助瑞恩。问题是脚本启动器和脚本可能位于USB存储棒或某个网络共享位置。所以它所在的位置是不同的。这可以用Set-Location来解释吗?事实上,由于我们并不知道这一点,因此“入门”保持空白。 – DarkLite1

+0

更新了答案,使其更简单一些。顺便说一句,'Set-Location'与'cd'相同。后者只是前者的别名。 –