2016-07-29 3 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

При запуске в качестве администратора из проводника вы должны предоставить абсолютный путь к скрипту.

Explorer.exe игнорирует стартовый каталог из ярлыка при запуске процесса как администратора. Вместо этого процессы на уровне администратора всегда запускаются с текущим каталогом в [Environment]::GetFolderPath('System') (обычно C:\Windows\System32)

Простым способом запуска в другом каталоге является изменение каталога в начале вашего скрипта. Следующая строка будет cd в каталог скрипт находится.

Set-Location $PsScriptRoot 

Если сценарий должен начаться в другой путь, то вы, возможно, придется написать функцию, чтобы определить, где этот путь находится на локальной машине (таких как enumerating USB drives)

+0

Спасибо за помощь Райан. Проблема заключается в том, что сценарий запуска и сценарий могут быть на USB-накопителе или на сетевом ресурсе. Поэтому место, где оно расположено, отличается. Может ли это быть учтено с помощью 'Set-Location'? И действительно, «Start in» остается пустым, поскольку мы не знаем этого заранее. – DarkLite1

+0

Обновлен ответ, чтобы быть немного проще. BTW, 'Set-Location' совпадает с' cd'. Последний - просто псевдоним для первого. –

Смежные вопросы