Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Проблема с относительным путём при запуске ярлыка на .ps1 от Админа (http://forum.oszone.net/showthread.php?t=356195)

Carrio 20-03-2025 19:54 3036661

Проблема с относительным путём при запуске ярлыка на .ps1 от Админа
 
Если нужно запускать файл скрипта PowerShell с помощью ярлыка на него в том же каталоге, то ярлык этот выглядит примерно так:
Код:

powershell.exe -ExecutionPolicy Bypass -NoExit -NoLogo -File ".\script.ps1"
где запись .\ говорит о том, что файл скрипта находится в одном каталоге с ярлыком и путь является относительным (т.е. каталог у них может быть какой угодно).

Проблема заключается в том, что всё это работает только при запуске от текущего пользователя. Если попробовать запустить данный ярлык от имени Администратора, то трюк с относительным путём уже не сработает и скрипт просто не запустится, т.к. в качестве пути будет использоваться не каталог запуска, а %SystemRoot%\System32.

Так как же должен выглядеть ярлык, чтобы в качестве текущего (относительного) пути использовался именно каталог запуска, вне зависимости от кого он запускается?

DJ Mogarych 20-03-2025 22:52 3036664

Можно попробовать
Код:

$PSScriptRoot\script.ps1
https://learn.microsoft.com/ru-ru/po...5#psscriptroot

или
Код:

$PWD.path\script.ps1
https://learn.microsoft.com/ru-ru/po...rshell-7.5#pwd

YuS_2 21-03-2025 10:53 3036676

Цитата:

Цитата DJ Mogarych
Можно попробовать »

Это внутри скриптов будет работать, а до запуска скрипта, переменной не существует.

Цитата:

Цитата DJ Mogarych
или »

а это текущий каталог, аналог в cmd %cd%
тоже не поможет...

Цитата:

Цитата Carrio
Так как же должен выглядеть ярлык, чтобы в качестве текущего (относительного) пути использовался именно каталог запуска, вне зависимости от кого он запускается? »

Если очень требуется именно такой вариант запуска, то использовать лучше не ярлык, а батник...
run.bat:
Код:

@echo off
pushd %~dp0
powershell.exe -ExecutionPolicy Bypass -NoExit -NoLogo -File ".\script.ps1"
popd

либо указывать не относительный путь к скрипту, а абсолютный...

DJ Mogarych 21-03-2025 19:43 3036679

Можно попробовать вот так, поиск в профиле пользователя нужного файла и его запуск прямо из ярлыка:

Код:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -c "powershell (dir "C:\Users\Vasya\*\script.ps1" -recurse).fullname"

Carrio 21-03-2025 20:23 3036682

Цитата:

Цитата YuS_2
Если очень требуется именно такой вариант запуска, то использовать лучше не ярлык, а батник... »

Да, я тоже дошёл до этого решения. Пытался сначала запихнуть этот код в ярлык, но потом осознал, что %~dp0 там работать не будет. В общем, через батник тоже нормально, даже более универсально. Всё-равно, чтобы кликом мыши запустить скрипт PowerShell из файла понадобится 2 элемента (хоть с ярлыком, хоть с батником), как ни крути.

Цитата:

Цитата DJ Mogarych
Можно попробовать вот так, поиск в профиле пользователя нужного файла и его запуск прямо из ярлыка: »

Так можно и до поиска по всем дискам дойти, скрипт то может быть в любом месте :)

DJ Mogarych 22-03-2025 09:16 3036689

Цитата:

Цитата Carrio
Так можно и до поиска по всем дискам дойти »

Да, но здесь нормального решения и не будет. Самое нормальное решение - это использовать абсолютные пути.
Цитата:

Цитата Carrio
чтобы кликом мыши запустить скрипт PowerShell из файла понадобится 2 элемента »

Можно ПКМ -> Выполнить с помощью Powershell.

YuS_2 22-03-2025 10:21 3036690

Цитата:

Цитата Carrio
Всё-равно, чтобы кликом мыши запустить скрипт PowerShell из файла понадобится 2 элемента (хоть с ярлыком, хоть с батником), как ни крути. »

Необязательно. Можно внести ассоциации файлов и будет запуск скриптов кликом мыши... но это нерекомендуемое действие из соображений безопасности...

Carrio 22-03-2025 11:53 3036694

Цитата:

Цитата DJ Mogarych
Можно ПКМ -> Выполнить с помощью Powershell. »

Это всё-равно не удобно.
Тогда как с батником вообще красота: скрипт и батник в одном каком угодно каталоге, а уже ярлык на этот батник можно разместить хоть на панели задач и запускать всего ОДНИМ кликом мыши.

Цитата:

Цитата YuS_2
Необязательно. Можно внести ассоциации файлов и будет запуск скриптов кликом мыши... »

Там, вроде, есть проблемы с пробелами в пути до скрипта.
Плюс надо дать постоянное разрешение системе на запуск таких файлов, что небезопасно.

YuS_2 22-03-2025 13:04 3036696

Цитата:

Цитата Carrio
Там, вроде, есть проблемы с пробелами в пути до скрипта. »

Микрософт, такой микрософт :)

Цитата:

Цитата Carrio
что небезопасно. »

естественно, это снижение безопасности о чем и написал... но js и vbs, например, являются исполняемыми скриптами, по умолчанию, батники - тоже сценарии... и ничего, о безопасности никто не парится.

Carrio 22-03-2025 16:15 3036704

Цитата:

Цитата YuS_2
естественно, это снижение безопасности о чем и написал... но js и vbs, например, являются исполняемыми скриптами, по умолчанию, батники - тоже сценарии... и ничего, о безопасности никто не парится »

M$, такой M$ :)

Uragan66 23-03-2025 15:14 3036715

Цитата:

Цитата YuS_2
Если очень требуется именно такой вариант запуска, то использовать лучше не ярлык, а батник... »

При необходимости запуская таким батником:
Код:

@echo off

set "ps=" & for %%X in (powerShell.exe) do set "ps=%%~$PATH:X"
if not defined ps set "ps=%systemRoot%\system32\windowsPowerShell\v1.0\powerShell.exe"

For /F "UseBackQ delims=" %%a in (`"cmd /c "
  "%ps%" -ExecutionPolicy ByPass -NoProfile -command .\script.ps1
""`) do (
  echo %%a
)

Но, как по мне, то проще скомпилировать исполняемый exe и запускать его с любой папки.

Carrio 25-03-2025 21:54 3036792

Uragan66
Вот, кстати, про возможность создания экзешника совсем забыл. Тоже вариант, спасибо.

Carrio 26-03-2025 19:37 3036813

Вспомнил, почему забыл про EXE. Антивирус может их блокировать. Причем сейчас ему пофиг, а через месяц может уже и нет. Не очень надёжно, в общем.


Время: 00:03.

Время: 00:03.
© OSzone.net 2001-