Как создать постоянные псевдонимы 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 заблокированы. Чтобы включить их, откройте настройки -> Обновление и безопасность -> Для разработчиков. Выберите режим разработчика (может потребоваться перезагрузка). Выбор режима разработчика Windows 10,

Прокрутите вниз до раздела 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.

Удачи

Предлагаю простейшее решение:

  1. Откройте пауэршелл
  2. Написать в профиль для всех пользователей:notepad $PsHome\Profile.ps1:

функция Перейти() {

#название функции - псевдоним, набор команд - тело

Set-Location

} 3. Сохраните и выйдите из блокнота. 4. Установите разрешения powershell:Set-ExecutionPolicy -ExecutionPolicy RemoteSigned5. Перезапустите powershell и напишитеgoto

      echo "Set-Alias ll dir" >> $profile
. $profile

Другие вопросы по тегам