То, чего мне всегда не хватало в Windows Vista и во всех её потомках - возможности открыть командую строку с правами Администратора там, где мне нужно. Я из тех параноиков, что не отключают UAC, и мне чертовски досадно, когда очередная команда, которую я набрал в консоли, внезапно отказывается работать без повышения привилегий.
Три месяца назад я решил изменить ситуацию. Нет, я не выключил Контроль учётных записей (я всегда считал подобные действия откровенной глупостью). Я открыл студию и написал с десяток строчек на до-диезе.
Проект получил имя ELE. Восьмикилобайтный экзешник стал для меня панацеей в вопросе эскалации привилегий командной строки.
Повышение привилегий открытого окна командной строки
Первая и основная задача, которую мне хотелось решить при помощи ELE - открытие окна cmd.exe из cmd.exe. Иными словами, я хотел открыть точно такое же окно, как то, которое было открыто сейчас, с тем же путём, и с историей команд.
К моему сожалению, эту задачку мне удалось решить лишь частично. Открыть окно команд от имени администратора в нужной папке - не проблема. Проблемой оказалось получение истории введенных пользователем команд. cmd.exe хранит их в своей памяти, они живут ровно сеанс работы окна команд, и как их считать из памяти, я не знаю.
Тем не менее, результатом я был доволен. Набрав в командной строке ele, я мгновенно получал запущенное с правами администратора окно команд, открытое в той же папке, что и предыдущее.
Открытие окна команд с правами администратора из файловых менеджеров
Особенность ELE - открывать окно команд с правами администратора в текущей папке - может сослужить вам добрую службу и сэкономить время и нервы, если интегрировать её в ваш любимый файловый менеджер. Я покажу вам это на примере Проводника, Total Commander и Far.
Открытие окна команд с правами администратора из Проводника
Достаточно интегрировать ELE в контекстное меню папки и фона папки (пустого, свободного от файлов пространства окна Проводника), и вы откроете командую строку от имени администратора в любой локации жесткого диска.
Твик реестра мог бы выглядеть так:
[code]Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\ele\command]
@="ele.exe"
[HKEY_CLASSES_ROOT\LibraryFolder\background\shell]
[HKEY_CLASSES_ROOT\LibraryFolder\background\shell\ele]
[HKEY_CLASSES_ROOT\LibraryFolder\background\shell\ele\command]
@="ele.exe"
[HKEY_CLASSES_ROOT\Directory\shell\ele\command]
@="cmd /c cd /d \"%1\" & ele /x"[/code]
Ну и, соответственно, результат:
В один клик мышью.
Открытие окна команд с правами администратора из Total Commander
Просто перетащите ele.exe на тулбар этого файлового менеджера, и отредактируйте полученную кнопку, удалив путь запуска. Это необходимо, чтобы при запуске ele в качестве рабочей папки использовался путь в активной панели Total Commander.
Нажав на эту кнопку, вы откроете текущую папку в командной строке с правами администратора.
Открытие окна команд с правами администратора из Far
Один из способов сделать подобный трюк в этом популярном файловом менеджере - добавить ELE в пользовательское меню. Для это надо нажать [k]F2[/k], и затем нажать [k]INS[/k]. В качестве команды следует ввести ele.exe.
Я повесил на ELE хоткей E, таким образом, чтобы открыть окно командной строки от имени администратора в текущей папке, мне достаточно нажать [k]F2[/k] - [k]e[/k].
Ключи командной строки ELE
Их немного.
[code]ele /?[/code]
Краткая справка по использованию
[code]ele /x[/code]
При указании опции /x ELE закрывает окно командной строки, из которого она была вызвана. Т.е. на экране остается только одно окно cmd.exe - то, что открыто с правами администратора.
Этот ключ появился по просьбе Вадима Стеркина, с которым я поделился идеей создания утилиты. Вадим проявил интерес к утилите и провёл активное её тестирование, в ходе которого и предложил добавить /x, дескать, бывает удобно что-то скопировать из "обычного" окна в высокопривигелированное. Скажу честно, у меня такой ситуации ни разу не было, и в своей повседневной деятельности я использую экзешник, который автоматически закрывает предыдущее окно, без дополнительных ключей. (Закрытие процесса-родителя, к слову, реализовано по аналогии с примером Саймона Мориера)
[code]ele программа [параметры][/code]
Запустить программу от имени администратора. Например, Блокнот от имени администратора:
[code]ele notepad.exe d:\text1.txt[/code]
ELE - одна из немногих утилит, за создание которой мне не стыдно. Она действительно полезная, и способна сэкономить немного вашего времени и нервов.
Вы можете скачать ELE с моего Skydrive или с форума.
💡Узнавайте о новых статьях быстрее. Подпишитесь на наши каналы в Telegram и Twitter.
Утилита, правда, полезная, я ей пользуюсь 🙂 Есть пара моментов касательно интеграции в контекстное меню (КМ).
1. В твике ты используешь интеграцию в КМ фона папки, это надо подчеркнуть. Но надо бы еще добавлять и в КМ папки, ибо это ускоряет работу. Простейший пример — папка Scripts в области переходов. С другой стороны, не всегда удается сходу вызвать КМ фона папки, т.к. мешают находящиеся в ней объекты.
2. Можно облагородить имя пункта КМ, задать значок и т.д. #/10640/#cm_options
Идея с КМ библиотек понравилась — не пользовался, надо добавить себе 🙂
Спасибо на добром слове
1. В твике я использую неспроста фон папки. Объясняю.
— У тебя на экране открыт диск C: и папка есть папка C:\Scripts.
-Ты интегрировал ELE в контекстное меню папки. Щелкаешь по Scripts ПКМ и запускаешь ELE. У тебя откроется не Scripts, а C:, ибо утилита открывает текущую папку в командной строке, а текущая у тебя C:.
2. Ты сомневаешься в том, что я знаю как облагородить контекстное меню? Я не ставил задачу написать в этой статье, как настроить контекстное меню Проводника, и твик приведен в качестве простейшего примера.
1. Можно доработать, наверное. Ведь родная фича работает так cmd.exe /s /k pushd «%V»
2. Нет, не сомневаюсь. Но читатели могут не знать.
1. Можно доработать ELE. Можно твик доработать, добавив в него cd:
[code]cmd /c cd /d d:\soft & ele /x[/code]
В этом нет проблемы.
2. Читатели могут много чего не знать. Пытаться объять необъятное — прескверное занятие, я предпочитаю держаться в рамках освещаемой в статье темы.
1. Лучше твик дорабатывать, по-моему.
2. Гм… ссылка моя не для тебя, а для твоих читателей. Дополнительная инфа по теме, чего тут непонятного-то? 🙂
P.S. И выключил бы ты эти дебильные смайлики 😉
1. Доработаю
2. Вот уж не думал, что произвел впечатление, что мне что-то непонятно. Отнюдь.
>P.S. Да плевать на них. Я их не использую.
Твик доработал. Теперь все 3 читателя этого блога должны быть довольны.
Утилита замечательная. Спасибо.
Ну это зря… Прекрасный сайт.
@ostap , заметьте, вы в комментариях — третий. Я, по-моему, ничуть не ошибся.
Сергей, в NirCMD не пробовал поюзать?
Пробовал. Даже юзаю. До перезапуска сайта тут была статья, как раз описывающая то, как я делал что-то подобное с использованием NirCMD. Я ничего не имею против этой утилиты, и подобную задачу можно решить и ей, написав специально обученный командный файл. Вот только предыдущее окно командной строки она закрыть не сможет.
без «в» :-[
Уважаемый тс, у вас много интересных статей по командной строке windows (после нескольких месяцев работы в коммандной строке linux — мне тоже стало интересно).
Но вот у меня возник к вам вопрос, как к профи. Быть может вам уже задавали его, но я не в курсе, а мне очень интересно: Зачем использовать динозавр CMD когда есть Powеr Shell?
ps Надеюсь уведомление об ответе придет на email.
Хм. Не знаю как и ответить. Я исторически работаю с CMD с тех времен, когда Power Shell ещё не было. К тому же с Power Shell к своему стыду я до сих пор не знаком. Вот и продолжаю пользоваться архаичной классикой.
Кроме того, в Висте, в которой мне приходится работать больше всего времени, Power Shell вообще не установлена.
Я ровным счётом не имею ничего против Power Shell, и его отсутствие в моем ассортименте инструментов — в первую очередь минус мне.
Минус не Вам, а Майкрософту и разработчикам PowerShell — за «его отсутствие» долгое время, за его тормознутость, и излишнюю заумность. Брали бы пример с консольных утилит Unix….
Увы, Ваш ele не работает с subst дисками (смонтированные с помощью subst.exe).
Попробуйте модифицировать Вашу полезную программу, что бы она учитывала сей вариант.
Я попробую, спасибо за наводку. Я не пробовал её использовать с subst дисками.
Можно ли как то сделать ожидание завершения вызова ELE ?
Например подряд нужно вызвать два батника:
ele uninstall.bat
ele install.bat
и чтобы второй не запускался до завершения первого?