PowerShell из командного файла с использованием относительного пути - PullRequest
0 голосов
/ 17 марта 2020

У меня есть командный файл, который запускает сценарий PowerShell с повышенными привилегиями и игнорирует политику выполнения:

PowerShell -NoProfile -ExecutionPolicy Unrestricted -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Unrestricted -File ""C:\Users\Bob\Desktop\New folder\Server.ps1""' -Verb RunAs}";

Это работает Да! Я хочу иметь возможность использовать относительные пути для пути к файлу.

PowerShell -NoProfile -ExecutionPolicy Unrestricted -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Unrestricted -File "".\Server.ps1""' -Verb RunAs}";

По какой-то причине это не получается. Что я делаю неправильно?

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Если ваш скрипт PowerShell отсутствует в том месте, на которое указывает cmd, вы получите ошибку при поиске относительного пути в этом каталоге. Если сценарий PS находится в том же месте, что и пакетный сценарий, вы можете запустить сценарий PS из пакета следующим образом:

Powershell "%~dp0Server.ps1"

Если расположение PowerShell и пакетного сценария являются вариантами, сначала необходимо изменить каталог в пакете перед вызовом сценария PowerShell следующим образом:

cd /d "C:\Users\Bob\Desktop\New Folder\"
Powershell -NoProfile .\Server.ps1
0 голосов
/ 18 марта 2020
PowerShell -NoProfile -ExecutionPolicy Unrestricted -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Unrestricted -Command "Set-Location \"%~dp0\"; \".\Server.ps1\"' -Verb RunAs}"

-Verb RunAs заставляет новый процесс Powershell сменить каталог на системный каталог. Вы можете использовать set-location, чтобы изменить его в каталог скриптов пакетного файла, используя %~dp0.

Аргумент -WorkingDirectory, кажется, игнорируется, когда используется -Verb RunAs, поэтому кажется устаревшим для этой задачи.

Вы можете просмотреть этот пример, чтобы увидеть, что текущий или изменяющийся каталог до того, как процесс Powershell не повлияет на новый процесс Powershell с повышенными правами:

cd /d "%~dp0"
PowerShell -NoProfile -ExecutionPolicy Unrestricted -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Unrestricted -Command \"Get-Location; Start-Sleep 10\"' -Verb RunAs}"

, который выводит:

Path
----
C:\Windows\system32

, поэтому вам может потребоваться изменить каталог в процессе Powershell с повышенными правами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...