PowerShell или командная строка? Что лучше?

PowerShell

Скорость и удобство командной строки известна многим пользователям Windows. Жаль, что далеко не все знают, как сделать ее более удобной для себя. Более того не всегда ее удобно вызывать, что делает ее использование менее комфортным. Сегодня мы рассмотрим некоторые возможности повышающие наше удобство как пользователя. Мы повысим скорость доступа к таким инструментам как PowerShell и уже упомянутая командная строка. Если вас не пугает то, что нам придётся лезть в реестр и что-то там менять, то эта статья для вас.

PowerShell

PowerShell

И так, вы наверное уже знаете, что многие задачи в Windows можно решить через командную строку или используя PowerShell. Разные пользователи предпочитают одно другому, но мы не будем делать предпочтений и настроим обе. Это гораздо эффективнее чем щёлкать мышью до бесконечности в настройках или в проводнике. Используя некоторые хитрости с реестром вы быстро и с лёгкостью решите возникшую перед вами проблему.

Если вы хотите решить задачи на своём компьютере без долгого мучения, вам стоит позаботиться о быстром доступе к командной строке или PowerShell. К счастью они оба крепятся на панель задач, разве что придётся немного попотеть, но это нам окупится. Для этого нужно выбрать в открытом окне контекстного меню пункт “Закрепить на панель задач”.

PowerShell использовать таким образом даже удобнее чем командную строку, хотя каждому своё. При клике на него правой кнопкой мыши появляется меню с дополнительными данными для запуска с правами администратора, например, таким, как PowerShell ISE (Integrated Scripting Environment). Это сопутствующий Script-Editor.

Для того чтобы запустить обе программы с полными правами нужно сделать следующие шаги. Нажать CTRL и Schift одновременно и нажать на значок панели задач. Следующим шагом будет запустить PowerShell (с правами администратора или без). Для этого нужно нажать Win+X или нажать на кнопочку пуск слева при помощи правой кнопки мыши. Тогда вылезет контекстное меню с кучей пунктов там, где обычно открывается меню от кнопки “пуск”.

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

Погружаемся глубже в тему, вернее в Windows.

Помимо всего прочего PowerShell можно запускать из проводника и отправлять в конкретную папку. Для этого нужно в папке в правой части на пустой белой половине нажать правую кнопку мыши и выбрать пункт “открыть PowerShell”. Иной возможности запустить командную строку с правами администратора у нас к сожалению нет.

Команды могут оказаться для вас сложными, но далее мы покажем, как с ними взаимодействовать. Пункты контекстного меню настраиваются по следующему пути: папка – проводник – реестр – записи. Таковых и нужных нам три штуки в подразделах в HKEY_ CLASSES_ROOT\Directory\shell. Если кликнуть правой кнопкой мыши на значок папки или на часть списка, ну, или в правой части пустого поля, то произойдёт одно и то же, так что не принципиально что вы выберите и сделаете главное, что вот результат этих действий нам и нужен. Контекстное меню в папке в свободной области управляется подразделом HKEY_CLASSES_ROOT\Directory\Background\Shell. Лезем глубже. В записях под HKEY_CLASSES_ROOT\Drive\shell есть команды контекстного меню дисков.

Итак, рассмотрим описание записей в HKEY_CLASSES_ROOT\Directory\shell поближе. В ранних версиях Windows можно было с помощью правой кнопки мыши + Shift открыть контекстное меню папки и выбрать пункт открыть “командную строку”. Эта функция была в Windows 10 1703 уже убрана, а жаль.

Посмотрите на ключ в Windows 10 с помощью редактора реестра где есть подраздел cmd с записями для командной строки. Интересно то что, Microsoft добавила сюда запись HideBasedOnVelocityId, точное значение которой нигде публично не задокументировано и не описано, но, позволяет проводнику подавить команду. Если просто попробовать удалить это значение или назначить ему значение 0, то без прав редактирования ничего не выйдет. Изменения в ней ни к чему не приводят.

По непонятным причинам Microsoft настроила ключ cmd (а также соседний ключ Powershell) так, чтобы их содержимое не могло быть изменено даже администраторами или системной учетной записью, но есть лазейка. Это может сделать только учетная запись “TrustedInstaller”. Нам нужно ее как-то получить, но вот не задача. Нет ни одного способа получить эту учетную запись с помощью “выполнить как” или аналогичных механизмов в использовании. Можно конечно изменить права ключа таким образом, чтобы администраторы могли что-то редактировать, но лучше этого не делать. Потому что это может вызвать проблемы при следующем обновлении Windows, хотя если вы заблокировали обновления, то можете попробовать, мы же рассмотрим иной вариант.

Вот и тот самый вариант, который мы рассмотрим подробнее. Для этого вам нужно знать, что на самом деле нет ключа у реестра HKEY_CLASSES_ROOT. Он просто ярлык для HKEY_LOCAL_MACHINE \ Software\Classes и HKEY_CURRENT_USER \ Software\Classes. При противоречивых записях в обоих путях приоритет получает последний.

Ключ HKEY_CURRENT_USER и все его подразделы принадлежат не только логически, но и юридически зарегистрированной учетной записи пользователя и вы можете внести изменения в ней, как вам нужно для ваших целей. Таким образом, чтобы восстановить команду командной строки, отключенную Microsoft, вы можете создать в реестре путь к ключу HKEY_CURRENT_USER\Software\ Classes\Directory\shell\cmd, если он еще не существует, и там есть запись DWORD с именем HideBasedOn, она то нам и нужна. Создадим VelocityId со значением 0. То же самое относится и к вышеупомянутым вариантам. Под ct.de/yvma можно найти .reg – файл для загрузки, который вы можете дважды щелкнуть в вашем реестре и сделать записи. Кроме того, он содержит копии соответствующих записей из HKEY_LOCAL_MACHINE\Software\ Classes и помещает их в HKEY_CURRENT_USER\ Software \ Classes, чтобы защитить их от любых изменений, которые Microsoft может по своей прихоти внести в более поздних версиях Windows. Кроме того, файл по-прежнему пропускает команды контекстного меню, описанные здесь. Если после обновления Windows возникнут непредвиденные проблемы с контекстным меню или вообще с чем нибудь ещё, вы можете импортировать reg – файл и возможно, экспортировать ключ HKEY_CURRENT_USER\Software\ Classes\Directory из своего реестра и удалить его, чтобы восстановить исходное состояние.

Полные права, которые нам так нужны.

Делаем следующее. Пункт меню для открытия командной строки с правами администратора в определенной папке можно создать используя содержимое ключа …\shell\cmd и соседний ключ …\shell\RunAs копируется. Просто измените значение ключа (по умолчанию), например на „открыть командную строку здесь (администратор) “– это имя команды, которое отображается в контекстном меню. При этом не нужно изменять команду для выполнения.

Вызов выполняется с полными правами админа с именем ключа RunAs. Если вы предпочитаете PowerShell то, вместо этого вы можете скопировать содержимое из …\shell\Powershell после …\shell\RunAs и настроить как описано выше. Но нереально получить сразу и для командной строки и PowerShell права администратора как бы мы не пытались.

Таким образом, ключ RunAs может быть только один раз нами использованным. Наш .reg-файл уже использован, следовательно, для PowerShell нужно идти иным путём: генерим новый ключ …\shell\Hella Power admin. В качестве выполняемой команды он вводит вызов PowerShell и в опции командной строки-command дает ему команду, которая запускает еще один PowerShell с помощью команд Start – Process. Этот вызов использует опцию-Verb RunAs, которая гарантирует, что PowerShell будет открыт с правами администратора.

Кроме того, через ArgumentList вызов Start-Process получает инструкцию для переключения в выбранную папку через Set – ocation. Имя папки может содержать пробелы и, следовательно, должно быть заключено в кавычки. Тем не менее, цена импорта.reg-файла – это каждый новый запуск PowerShell, а также вызов процесса запуска с несколькими кавычками.

Каждая из этих операций уничтожает другие N-направляющие символы, которые не маскируются с Escape-символом в соответствии с используемой схемой. В результате, в качестве параметра для папки для управления в .reg-файл вставляем этот “винегрет” из символов \\\””\\\”%V`\\\”‘\\\”, хотя делать это, не самая лучшая затея. Все изменения будут внесены в ключ HKEY_CURRENT_ USER и, таким образом, должны быть защищены от возможных будущих творческих и прочих изменений Microsoft в правах пользователя реестра, это нам поможет не потерять свои труды. Даже если Microsoft когда-нибудь сможет полностью стереть записи в командной строке, то файл восстановит их, потому что он содержит все необходимое, то есть копию текущих записей из HKEY_LOCAL_MACHINE\Software\Classes, которые по сути и защищают наши интересы от Microsoft в реестре. Это текстовый файл, который вы сможете по необходимости легко настроить перед импортом.

Таким образом, оба заявленных в начале инструмента доступны нам значительно быстрее чем раньше и можно с удовольствием пользоваться. Вот так у нас теперь нет необходимости долго их вызывать щёлкая мышью.