Думайте не только о букве: навигация по дискам с помощью PowerShell

Опубликовано: 15 Марта, 2023
Думайте не только о букве: навигация по дискам с помощью PowerShell

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

Операционная система Windows всегда выполняла некоторые сопоставления дисков по умолчанию. Диск C:, например, обычно является основным жестким диском машины. Однако в большинстве случаев C: не будет единственным диском, который видит PowerShell. Если вы введете командлет Get-PSDrive, вы увидите текущие сопоставления дисков PowerShell, как показано на рисунке ниже.

Глядя на приведенный выше снимок экрана, вы можете видеть, что PowerShell перечисляет некоторые традиционные сопоставления дисков файловой системы, но есть и несколько других вещей, которые также перечислены, включая сертификат и реестр. Итак, как вы можете получить доступ к этим местам?

Как вы, наверное, знаете, PowerShell позволяет переключаться между дисками файловой системы, просто вводя букву диска, за которой следует двоеточие. Например, вы должны ввести C:, чтобы переключиться на диск C:. Эта функциональность осталась со времен DOS. Однако Microsoft не разрешает использовать этот же метод для навигации по другим типам дисков. Например, вы не можете ввести HKLM:, чтобы перейти к части реестра HKEY_LOCAL_MACHINE.

Навигация по дискам с помощью PowerShell: странно, но полезно

Я буду первым, кто признает, что методы, используемые для навигации по реестру и другим дискам через PowerShell, немного странные. Навигация по реестру основана на команде CD. CD — еще одна старая команда DOS. Когда-то CD был сокращением от Change Directory. Если, например, вы сейчас находитесь в корне C: и хотите перейти к C:Temp, вы должны ввести CD Temp.

Особенность команды CD заключается в том, что для ее использования обычно требовалось, чтобы вы уже находились на том диске, на котором находился желаемый пункт назначения. Если, например, вы находились в корне C: и хотели переключиться на D:Data, вы не могли просто ввести CD Data, потому что папка Data находилась на другом диске. Тем не менее именно так Microsoft обеспечивает навигацию по реестру через PowerShell. Вы можете перемещаться по реестру с помощью команды CD без предварительного переключения в реестр, используя что-то вроде HKLM: если вы хотите перейти к HKEY_LOCAL_MACHINE, просто введите CD HKLM:

Как только вы доберетесь до HKLM, вы можете использовать другие стандартные команды DOS или PowerShell для навигации по реестру точно так же, как вы перемещаетесь по файловой системе. Например, во времена DOS команда DIR использовалась для вывода списка файлов в текущей папке. В PowerShell для того же самого используется командлет Get-ChildItem. Обе эти команды можно использовать для просмотра содержимого реестра. Однако стоит отметить, что PowerShell выдаст ошибку, если есть разделы реестра, к которым у него нет доступа. Пример этого вы можете увидеть на рисунке ниже.

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

Cd hklm: компакт-диск с программным обеспечением компакт-диск Microsoft

Недостатком использования этого метода является то, что если вам нужно добраться до места глубоко в реестре, процесс может быть утомительным. В качестве альтернативы вы можете использовать командлеты PowerShell Location, чтобы ускорить процесс навигации. Чтобы показать вам, что я имею в виду, давайте вернемся к предыдущему примеру, в котором нам нужно получить доступ к HKLMSoftwareMicrosoft. Вместо того, чтобы использовать серию команд CD, мы могли бы сделать что-то вроде этого:

Set-Location hklm:SoftwareMicrosoft

Вы можете увидеть пример как метода CD, так и метода Set location на следующем рисунке.

Итак, давайте предположим, что я нахожусь в HKLM:SoftwareMicrosoft и хочу попасть в HKLM:SoftwareMicrosoftActiveSync. Честно говоря, проще всего было бы набрать CD ActiveSync. Это, безусловно, жизнеспособный вариант. Однако, если вы хотите придерживаться использования команд Location, вы можете вместо этого использовать команду, подобную этой:

Push-Location.ActiveSync

Если вы посмотрите на скриншот ниже, вы увидите, что я сначала использовал команду CD для доступа к папке ActiveSync. Затем я использовал CD.., чтобы вернуться на уровень ниже в иерархии и вернуться в HKLM:SoftwareMicrosoft. Оттуда я использовал командлет Push-Location для доступа к контейнеру ActiveSync.

Навигация по любому диску PowerShell

На протяжении всей этой статьи я использовал реестр Windows, чтобы продемонстрировать способность PowerShell перемещаться по нетрадиционным дискам. Однако, как я упоминал ранее, реестр — не единственный тип диска, доступный через PowerShell. Вы можете использовать аналогичные методы для навигации по любому типу диска PowerShell. Например, если вы хотите получить доступ к хранилищу сертификатов Windows, вы можете сделать это, набрав CD Cert:

Также важно помнить, что файловая система, реестр и хранилище сертификатов — не единственные ресурсы, которые PowerShell предоставляет в виде дисков. Если вы посмотрите на первый снимок экрана, вы увидите, что Windows также рассматривает псевдонимы, переменные среды, функции, WSMan и переменные как диски. Определенно стоит потратить некоторое время на изучение этих дисков. Вы можете быть удивлены тем, что вы можете найти.