В PowerShell есть замечательный функционал под наименованием Alias (псевдоним или алиас), по сути своей псевдоним является коротким аналогом названия командлета что позволяет выполнять две важнейшие задачи:
- Наследование от предков – для поддержки работоспособности и синтаксиса старых команд copy, dir и пр..
- Комфорт при работе – дает возможность сокращать написание команд и задавать новые псевдонимы. В ряде случаев это бывает удобно.
Чувствую что неубедил….
Давайте посмотрим как это работает. Для начала введите последовательно команды:
Get-ChildItem c:\
Dir c:\
ls c:\
Результат во всех трех случаях одинаковый. Это означает что все введенные команды несмотря на разные названия имеют один и тот же функционал т.е. по сути dir и ls это ссылки на командлет Get-ChildItem
Разрешение имен псевдонимов
Перед тем как идти дальше давайте ознакомимся с тем что у нас вшито в стандартный функционал. Введите команду для получения списка псевдонимов Get-Alias или ls Alias:. Результат будет одинаковый.
Введенная команда выдаст вам все определенные в системе псевдонимы. Что бы не копаться в длинном списке псевдонимов вводим последовательно команды:
Get-Alias ls
Get-Alias dir
Те же результаты вы получите при просмотре значений псевдонимов можно воспользоваться служебным диском Alias:
$alias:Dir
Get-ChildItem
$alias:ls
Get-ChildItem
Как видите они указывают на один и тот же командлет Get-ChildItem.
Дополнительным методом выяснения списка псевдонимов, связанных с командлетом Get-ChildItem, будет запрос свойства Definition.
get-item -path alias: | where-object {$_.Definition -eq "Get-Childitem"}
Поначалу я не мог отвыкнуть от того что в powershell команда sc является псевдонимомSet-Content и долгое время дергался когда стандартная sc.exe запущенная из powershell завершалась непонятно чем
Создание собственных псевдонимов
Любой пользователь может создавать нужные ему псевдонимы. Это может понадобится для ускорения запуска или сокращению длинных повторяющихся команд.
Для этого нужно воспользоваться командой которая создает или изменяет существующий псевдоним в текущем сеансе Windows PowerShell.
Set-Alias имя_псевдонима значение
Set-Alias -name имя_псевдонима -value значение
Или воспользоваться его “коллегой” командой New-Alias которая только создает новый псевдоним.
new-alias -name имя_псевдонима -value значение -description "описание псевдонима" -option ReadOnly
Дальнейшее его изменение производится командой Set-Alias.
Для полного комплекта приведу значения для параметра -option
- None – значение по умолчанию его указывать не требуется.
- ReadOnly – псевдоним не может быть изменен, изменение доступно только при использовании параметра -Force.
- Constant – псевдоним не может быть изменен, даже при использовании -Force.
- Private – псевдоним доступен только в пределах области, заданной в -Scope (определение области видимости, по умолчанию Local). Во всех остальных областях он недоступен.
Как сценарий можно предположить что вам необходимо запустить notepad.exe для редактирования скрипта script_01.ps1 находящегося в текущей папке
- Создаем новый псевдоним командой
Set-Alias edit notepad.exe
- Вводим команду
edit .\script_01.ps1
Внимание: В случае если вы изменяете существующий псевдоним созданный с опциейReadOnly то вам необходимо воспользоваться ключом -Force.
В результате открывается окно Notepad-а с нужным вам скриптом (он идет как параметр запуска редактора).
Кстати, для редактирования скриптов можно использовать встроенный алиас ise который при вызове откроет powershell_ise.exe.
Посмотреть созданную ассоциацию связанную с псевдонимом можно методом описанным выше:
Get-Alias edit
$alias:edit
Если команд несколько то они оборачиваются функцией. Например, один из псевдонимов которые я использую состоит из нескольких команд объединенных в функцию:
function get-hubserver {
get-exchangeserver | where {$_.ishubtransportserver -eq "true"}
}
Set-Alias get-hub get-hubserver
Удаление псевдонимов
Как ни странно это говорить но псевдонимы являются вполне осязаемыми для удаления объектами. Спасибо разработчикам Powershell за унификацию методов…
Что дальше?
Методика простая и действенная, но вынужден слегка огорчить тем что определения превдонимов при закрытии консоли не сохраняются и требуется их как то “подтягивать” при каждом старте консоли.
Вариантов которые можно предложить всего три:
- Ввод вручную: Устанавливать руками с помощью команды Set-Alias. Не наш метод…
-
При загрузке профиля: Существует возможность поместить команды Set-Alias … в профиль powershell. Профиль – это файл с расширением .ps1, скрипт, выполняемый оболочкой при ее запуске. Этот файл не создается автоматически, только вручную силами пользователя. Подробнее об этом механизме я напишу позже.
Для того что бы создать профиль для текущего пользователя необходимо выполнить ряд команд.
Создаем файл профиля.
New-Item $profile -ItemType File -Force
Открываем его на редактирование в блокноте.
notepad.exe $profile
Вписываем строку и сохраняем файл.
Set-Alias edit powershell_ise.exe
-
Импорт и Экспорт: Экспортирует в файл существующие псевдонимы.
Несмотря на название методика очень простая, но практических сценариев использования ее я пока что не вижу, разве только что поместить команду импорта в файл профиля powershell.Экспортировать существующие псевдонимы можно командой результатом работы которой будет файл со всеми существующими определениями псевдонимов.
Export-Alias C:\Backup\Aliases.txt
Обратный импорт выполняется командой.
Import-Alias C:\Backup\Aliases.txt -Force
источник
Нашли ошибку в тексте? Выделите фрагмент текста и отправьте нажатием Ctrl + Enter