Как создать постоянные псевдонимы PowerShell
Я хочу создать alias
из cmdlet
это не истекает после того, как я закрываю текущую сессию Powershell, допустим, у меня есть этот псевдоним:
C:\Users\Aymen> New-Alias Goto Set-Location
Это прекрасно создает Goto
псевдоним, но я хочу использовать его даже после закрытия текущего сеанса, как я могу этого достичь.
Замечания:
Справочная система PowerShell предлагает мне экспортировать созданные мной псевдонимы и импортировать их в следующий раз, когда я открою новый сеанс, на самом деле это не совсем то, что я ищу, есть ли прямой и ясный способ сохранить псевдоним после того, как я создать его через разные сессии
12 ответов
ОБНОВЛЕНО - январь 2017
Можно хранить в profile.ps1
подайте любой код powershell, который будет выполняться каждый раз при запуске powershell. Существует как минимум 6 разных путей хранения кода в зависимости от того, какой пользователь должен его выполнить. Мы можем рассмотреть только 2 из них: пути "все пользователи" и "только ваш пользователь".
Таким образом, чтобы ответить на ваш вопрос, вам нужно только создать profile.ps1
файл, содержащий код, который вы хотите выполнить, то есть
New-Alias Goto Set-Location
и сохраните его на правильном пути:
"$Home\Documents"
(C: \ Users \ ваше имя \Documents): только ваш пользователь будет выполнять код.$PsHome
(C: \ Windows \ System32 \ WindowsPowerShell \ v1.0): каждый пользователь будет выполнять код.
Чтобы применить изменения, закройте все открытые экземпляры PowerShell и перезапустите их.
ЧАЕВЫЕ
Если оба пути содержат
profile.ps1
Сначала исполняется файл "все пользователи", а затем пользователи.Всегда помещайте код в пользовательский профиль, если нет необходимости расширять его выполнение для каждого пользователя. Вам не нужны права администратора для добавления файла в пользовательское пространство (в противном случае вы делаете это), и вы не загрязняете пространство других пользователей.
ПОМНИТЕ!
$PsHome
путь отличается между 32-битными и 64-битными экземплярами powershell, поэтому вы должны рассмотреть обе среды, если вы хотите всегда выполнять код профиля. Обычно путиC:\Windows\System32\WindowsPowerShell\v1.0
для 64-битной среды иC:\Windows\SysWow64\WindowsPowerShell\v1.0
для 32-битного.
Не стоит добавлять подобные вещи прямо в ваш $env:WINDIR
папки PowerShell.
Рекомендуется добавить его в свой личный профиль:
cd $env:USERPROFILE\Documents
md WindowsPowerShell -ErrorAction SilentlyContinue
cd WindowsPowerShell
New-Item Microsoft.PowerShell_profile.ps1 -ItemType "file" -ErrorAction SilentlyContinue
powershell_ise.exe .\Microsoft.PowerShell_profile.ps1
Теперь добавьте свой псевдоним в файл Microsoft.PowerShell_profile.ps1, который теперь открыт:
function Do-ActualThing {
# do actual thing
}
Set-Alias MyAlias Do-ActualThing
Затем сохраните его и обновите текущий сеанс:
. $profile
Просто. Например...
Откройте окно Windows PowerShell и введите:
notepad $profile
Затем создайте функцию, такую как:
function goSomewhereThenOpenGoogleThenDeleteSomething {
cd C:\Users\
Start-Process -FilePath "http://www.google.com"
rm fileName.txt
}
Затем введите это под именем функции:
Set-Alias google goSomewhereThenOpenGoogleThenDeleteSomething
Теперь вы можете ввести слово "google" в Windows PowerShell и заставить его выполнять код в вашей функции!
2018, Windows 10
Вы можете связать любой файл или каталог с помощью простого скрипта PowerShell.
Написание сценария ярлыка файла
Откройте Windows PowerShell ISE. В панели скриптов напишите:
New-Alias ${shortcutName} ${fullFileLocation}
Затем перейдите на панель командной строки. Найдите свой профиль пользователя PowerShell с помощью echo $profile
, Сохраните скрипт в этом адресе.
Сценарий в адресе профиля PowerShell будет запускаться каждый раз, когда вы открываете PowerShell. Ярлык должен работать с каждым новым окном PowerShell.
Написание сценария быстрого доступа к каталогу
Это требует другой строки в нашем скрипте.
function ${nameOfFunction} {set-location ${directory_location}}
New-Alias ${shortcut} ${nameOfFunction}
В остальном точно так же.
Включить скрипты PowerShell
По умолчанию скрипты PowerShell заблокированы. Чтобы включить их, откройте настройки -> Обновление и безопасность -> Для разработчиков. Выберите режим разработчика (может потребоваться перезагрузка). ,
Прокрутите вниз до раздела PowerShell, установите флажок "Изменить политику выполнения..." и примените.
Я обнаружил, что могу запустить эту команду:
notepad $((Split-Path $profile -Parent) + "\profile.ps1")
и он открывает мой профиль PowerShell по умолчанию (по крайней мере, при использовании Терминала для Windows). Я нашел это здесь.
Затем добавьте псевдоним. Например, вот мой псевдоним
jn
за
jupyter notebook
(Ненавижу печатать громоздкие
jupyter notebook
каждый раз):
Set-Alias -Name jn -Value C:\Users\words\Anaconda3\Scripts\jupyter-notebook.exe
Просто чтобы добавить в этот список возможных мест...
Это не сработало для меня:\Users\{ME}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Однако это сделало:\Users\{ME}\OneDrive\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Если у вас нет профиля или вы хотите его настроить, выполните следующую команду, он создаст необходимую папку / файлы и даже скажет вам, где он живет!
New-Item -path $profile -type file -force
Чтобы создать файл profile1.psl, введите следующую команду:
новый элемент $PROFILE.CurrentUserAllHosts -ItemType file -Force
чтобы получить доступ к файлу, введите следующую команду:
ise $ PROFILE.CurrentUserAllHosts
обратите внимание, что если вы не сделали этого раньше, вы увидите, что не сможете запустить сценарий из-за своей политики выполнения, которую нужно изменить на Неограниченный с Ограниченный (по умолчанию).
чтобы сделать это, закройте скрипт и затем введите эту команду:
Set-ExecutionPolicy -Scope CurrentUser
затем:
RemoteSigned
тогда эта команда снова:
ise $ PROFILE.CurrentUserAllHosts
затем, наконец, введите псевдонимы в сценарии, сохраните их, и они должны запускаться каждый раз, когда вы запускаете powershell, даже после перезагрузки компьютера.
Это немного необычно... но это работает:
Шаг 1: Создайте профиль Powershell:
FILE: install_profile.ps1
# THIS SCRIPT BLOWS AWAY YOUR DEFAULT POWERSHELL PROFILE SCRIPT
# AND INSTALLS A POINTER TO A GLOBAL POWERSHELL PROFILE
$ErrorActionPreference = "Stop"
function print ([string]$msg)
{
Write-Host -ForegroundColor Green $msg
}
print ""
# User's Powershell Profile
$psdir = "$env:USERPROFILE\Documents\WindowsPowerShell"
$psfile = $psdir + "\Microsoft.PowerShell_profile.ps1"
print "Creating Directory: $psdir"
md $psdir -ErrorAction SilentlyContinue | out-null
# this is your auto-generated powershell profile to be installed
$content = @(
"",
". ~/Documents/tools/profile.ps1",
""
)
print "Creating File: $psfile"
[System.IO.File]::WriteAllLines($psfile, $content)
print ""
# Make sure Powershell profile is readable
Set-ExecutionPolicy -Scope CurrentUser Unrestricted
Шаг 2: затем в инструменты ~/Documents/tools/profile.ps1:
function Do-ActualThing {
# do actual thing
}
Set-Alias MyAlias Do-ActualThing
Шаг 3:
$ Set-ExecutionPolicy -Scope CurrentUser Неограниченный $ . ./install_profile.ps1
Это дело личного вкуса, но я предпочитаю хранить свои псевдонимы вместе в отдельном файле и вызывать
Import-Alias
в профиле.
$profileDir = Split-Path $PROFILE -Parent
$profileFile = Join-Path $profileDir profile.ps1
$aliasFile = Join-Path $profileDir aliases.csv
New-Alias -Name npp -Value "C:\Program Files\Notepad++\notepad++.exe" -Description "Notepad++"
Export-Alias -Name npp -Path $aliasFile -Append
ise $profileFile
Потом в ИСЕ вставь эту строку в свой profile.ps1
Import-Alias -Path (Join-Path $PSScriptRoot aliases.csv)
Все, что люди сказали выше, прекрасно, но не забывайте не слишком усложнять ваш файл Profile.ps1. Например, вы можете сделать это в вашем файле Profile.ps1:
#all you already have in your profile.ps1 file
#then call a file to initialize your aliases
#It could look like this.
C:\Users\{ME}\Documents\WindowsPowerShell\setAliases.ps1
Это запустит файл выше, который должен выглядеть примерно так:
#Set aliases:
function global:YourAliasFunction {
#What you want your alias to do.
}
Set-Alias YourAlias YourAliasFunction -Scope "Global"
Не забудьте "-scope "Global"", иначе этот псевдоним будет работать только в этом файле.
Кроме того, не забывайте "глобальный" перед именем вашей функции по той же причине.
И последнее: поскольку существует около миллиона функций, и вы не можете знать их все, вы должны попытаться начать свои псевдонимы и функции с того, что указывает на то, что они ваши. Это позволяет избежать нежелательного копирования имени существующей функции. Например, вы могли бы сделать это, всегда добавляя что-то особенное в начале своего псевдонима (например, ваши инициалы или подчеркивание _). Это будет выглядеть так:
Set-Alias ME_YourAlias ME_YourAliasFunction -Scope "Global"
или же
Set-Alias _YourAlias _YourAliasFunction -Scope "Global"
Затем при следующем запуске YourAlias выполнит функцию YourAlias.
Удачи
Предлагаю простейшее решение:
- Откройте пауэршелл
- Написать в профиль для всех пользователей:
notepad $PsHome\Profile.ps1
:
функция Перейти() {
#название функции - псевдоним, набор команд - тело
Set-Location
} 3. Сохраните и выйдите из блокнота. 4. Установите разрешения powershell:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
5. Перезапустите powershell и напишитеgoto