Запись в контекстном меню скрипта PowerShell для запуска скрипта от имени администратора без выхода

356
jippyjoe4

Я действительно близок к этому. По сути, я хочу создать пункт контекстного меню для файлов .ps1, которые запускают скрипт от имени администратора, не выходя из окна консоли после запуска. Итак, я могу создать ключ:

Computer\HKEY_CURRENT_USER\SOFTWARE\Classes\SystemFileAssociations\.ps1\shell\RunasAdministratorNoExit 

со значениями:

Запись в контекстном меню скрипта PowerShell для запуска скрипта от имени администратора без выхода

и это все хорошо и здорово, чтобы создать запись. Однако, чтобы заставить его что- то сделать, мне нужно добавить еще один ключ, командный ключ:

Computer\HKEY_CURRENT_USER\SOFTWARE\Classes\SystemFileAssociations\.ps1\shell\RunasAdministratorNoExit\command 

И в этом ключе у меня есть кое-что, что почти работает, но не совсем. Таким образом, значение по умолчанию вышеупомянутого командного ключа:

Powershell.exe -WindowStyle Hidden -Command "& " 

Но есть одна большая проблема с этим методом; когда сценарий завершается, он возвращает меня в каталог «C: \ Windows \ system32» вместо каталога самого сценария. Смотрите мое изображение ниже для уточнения:

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

$settingsfiles = Get-ChildItem -Recurse $scanPath 

Вместо того, чтобы повторяться через все папки, локальные для сценария, который я только что запустил, он пытается выполнить повторение через все папки в «C: \ Windows \ system32!» Очевидно, что это нежелательно. Итак, вот мой вопрос:

Что мне нужно изменить в значении по умолчанию командной клавиши, чтобы скрипт PowerShell работал так, как если бы он запускался из того же каталога, что и скрипт?

1

1 ответ на вопрос

1
postanote

Попробуйте использовать ... командлет Set-Location или Push-Location или блок scritpblock ...

Скрипт Split-Path $: MyInvocation.MyCommand.Path

... в вашей последней команде.

Или просто создайте новый ярлык, настроенный так, как вы хотите, и используйте контекстное меню SendTo, не требуя взлома.

Посмотрите эту ветку, демонстрирующую подход SendTo для PowerShell.

Предельные ключи PowerShell принимаются сценарием паузы

Синтаксис - это та часть, которая сбивает меня с толку командой set-location. Как бы я включил это в запись реестра, все еще передавая файл в powershell, чтобы запустить оригинальный скрипт? Мне в основном нужно использовать -command и -file одновременно, но я не уверен, что это работает. Можете привести пример? jippyjoe4 5 лет назад 0
Хорошо, я понял это после того, как возился слишком долго. Цитаты убивали меня. Вот какая строка должна быть: Powershell.exe -WindowStyle Hidden -Command "& "" '-verb runAs} " jippyjoe4 5 лет назад 0
Рад, что все получилось. Yeppers, цитирование может быть PTA. Тем не менее, быстрый C & P в вашей линии в ISE или VSCode, все еще показывает синтаксические ошибки. Вы знаете, вся эта цветовая кодировка кричит от редактора. Все, начиная с этого [% 1 "" "'-parent); &' '" ""% 1 "" "' '}" "-verb runAs}"], отображает неправильные цвета (фиолетовый против темно-красного) до быть в командном блоке. Итак, немного странно, что он работает как есть. Тем не менее, если это так, это все, что имеет значение. Мне придется поиграть с этим, чтобы сказать наверняка. postanote 5 лет назад 0

Похожие вопросы