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


2

Я справді близький на цьому. В основному, я хочу створити запис контекстного меню для файлів .ps1, які виконують сценарій як адміністратор, не виходячи з вікна консолі після запуску. Тож я можу створити ключ:

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

зі значеннями:

введіть тут опис зображення

і все це чудово і безглуздо, щоб створити запис. Однак, щоб насправді щось зробити , мені потрібно додати ще один ключ, командний ключ:

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

І в цьому ключі у мене є щось, що майже працює, але не зовсім. Отже, типовим значенням вищевказаного командного ключа є:

Powershell.exe -WindowStyle Hidden -Command "& {Start-Process PowerShell.exe -Verb RunAs -ArgumentList '-NoLogo -NoExit -File """%1"""'}"

Але є одна велика проблема з цим методом; коли сценарій закінчується, він повертає мене до каталогу "C: \ Windows \ system32" замість каталогу самого сценарію. Дивіться моє зображення нижче для уточнення:

введіть тут опис зображення Далі, коли я використовую запис контекстного меню, я створив сценарії, що містять рядки, такі як:

$settingsfiles = Get-ChildItem -Recurse $scanPath

Замість того, щоб він повторювався через усі локальні папки до сценарію, який я щойно запустив, він намагається повторити всі папки на "C: \ Windows \ system32!" Очевидно, що це небажано. Тож ось моє запитання:

Що мені потрібно змінити за замовчуванням командного ключа для того, щоб сценарій PowerShell діяв так, ніби він запускався з того самого каталогу, що і сценарій?


Ви нарешті встигли? Якщо так, чи можете ви поділитися кодом?
JinSnow

Відповіді:


1

Спробуйте використовувати ... Командлет "Місце розташування" або "Push-Location" або scritpblock ...

Сценарій $ split-Path: MyInvocation.MyCommand.Path

... у вашому останньому командуванні.

Або просто створіть новий ярлик, налаштований так, як ви хочете, і скористайтеся меню «Відправити» правою кнопкою миші, не потрібне злому реєстру.

Дивіться цю тему, що показує підхід SendTo для PowerShell.

Лімітні клавіші PowerShell, прийняті сценарієм паузи


Синтаксис - це та частина, яка мене відключає, проте за допомогою команди set-location. Як я можу включити це до запису реєстру, перебуваючи при цьому, передаючи файл у власну оболонку, щоб оригінальний сценарій запускався? Мені в основному потрібно одночасно використовувати -command та -file, але я не впевнений, що це працює. Чи можете ви навести приклад?
jippyjoe4

Гаразд, я зрозумів це після того, як занадто довго возився. Цитати мене вбивали. Це те, що повинно бути рядком: Powershell.exe -WindowStyle Hidden -Command "& {Start-Process powershell.exe -ArgumentList '-nologo -noexit -command" "& {set-location'" "" "% 1" "" '' -parent); & '' ""% 1 "" "" "}" "" -verb runAs} "
jippyjoe4

Радий, що все вийшло. Так, цитування може бути PTA. Тим не менш, швидкий C&P вашого рядка в ISE або VSCode, як і раніше, показує синтаксичні помилки. Ви знаєте, ця річ з кольоровим кодуванням кричить від редактора. Все з цього [% 1 "" "'' - прозорого); &" "" "% 1" "" ""} "" -вербальних runAs} "] показує неправильні кольори (фіолетовий проти малиново-червоний) бути в командному блоці. Отже, трохи дивно це працює як є. Але якщо це так, це все, що має значення. Мені доведеться пограти з цим, щоб точно сказати.
postanote
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.