Як створити постійні псевдоніми PowerShell


141

Я хочу створити alias файл cmdlet, який не закінчується після закриття поточної сесії Powershell, скажімо, у мене є цей псевдонім:

C:\Users\Aymen> New-Alias Goto Set-Location

Це чудово створює Gotoпсевдонім, але я хочу його використовувати навіть після закриття поточного сеансу, як я можу цього досягти.

Примітка:

Система довідки PowerShell пропонує мені експортувати створені псевдоніми та імпортувати їх наступного разу, коли я відкриваю нову сесію. Насправді це не зовсім те, що я шукаю. Чи існує прямий чіткий спосіб зберегти псевдонім після того, як я створюйте його через різні сеанси


IMO, вам набагато краще вводити сценарії в PATH. Таким чином, команда буде доступна миттєво для всіх ваших відкритих оболонок, і якщо ви її зміните, зміна пошириться на всі наступні використання, не потребуючи перезавантаження $ профілю чи чогось іншого.
masterxilo

Відповіді:


112

ОНОВЛЕНО - січень 2017 року

Можна зберегти у profile.ps1файлі будь-який код оболонки повноважень, який повинен виконуватися щоразу, коли запускається shellhell. Існує щонайменше 6 різних шляхів, де зберігати код залежно від того, який користувач повинен його виконати. Ми можемо розглянути лише 2 з них: шляхи "всіх користувачів" та "лише ваш користувач".

Отже, щоб відповісти на ваше запитання, вам потрібно створити лише profile.ps1файл, який містить код, який ви хочете виконати, тобто

New-Alias Goto Set-Location

і збережіть його у правильному шляху:

  • "$Home\Documents" (C: \ Users \ yourname \ Documents): код виконує лише ваш користувач.
  • $PsHome (C: \ Windows \ System32 \ WindowsPowerShell \ v1.0): кожен користувач виконує код.

Щоб застосувати зміни, закрийте всі відкриті екземпляри повноважень та перезавантажте їх.

ПОРАДИ

  • Якщо обидва шляхи містять profile.ps1файл, то спочатку виконується весь користувач, а потім - конкретний користувач.

  • Завжди кладіть код у профіль користувача, якщо немає необхідності поширювати його виконання на кожного користувача. Вам не потрібні права адміністратора, щоб додати файл у свій користувальницький простір (в іншому випадку), і ви не забруднити простір інших користувачів.

  • ПАМ’ЯТАЙТЕ! $PsHomeШлях відрізняється від 32 - бітних і 64 - бітових примірників PowerShell, так що ви повинні враховувати і навколишнє середовище , якщо ви хочете завжди , щоб виконати код профілю. Зазвичай контури призначені C:\Windows\System32\WindowsPowerShell\v1.0для 64-бітового середовища та C:\Windows\SysWow64\WindowsPowerShell\v1.0для 32- бітного .


9
жодна помилка просто не спрацювала, я не впевнений, чи це проблема з дозволом. Я насправді змусив його працювати (я повинен коментувати раніше). Мені довелося створити папку, \Users\{ME}\Documents\WindowsPowerShellа потім додати Microsoft.PowerShell_profile.ps1не інші програми, які працюють для мене.

2
Згідно з пов’язаною статтею використання "$HOME\Documents\WindowsPowerShell"та іменування Microsoft.PowerShell_profile.ps1обмежують сферу застосування не-ISE та поточного хоста, але це не повинно бути питанням дозволів (однакових "$Home\Documents\profile.ps1" should apply). Можливо, це не зовсім так, я спробую, дякую за інформацію
Найджел

2
Привіт @Naigel, я повинен використовувати цей підхід, щоб він працював: superuser.com/questions/516700/…, тож остаточним рішенням для мене було створення файлу для профілю: New-Item -path $profile -type file -forceякий створив папку та файлDocuments\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Eagle

57
Найкращим способом отримати місцезнаходження профілю може бути запуск "echo $ profile" у вашому вікні повноважень.
Rahul Jha

2
Не забудьте зробити резервну копію файлу profile.ps1, оскільки оновлення Windows Creators, здається, очистить файл у його стандартному місці !!
gooleem

109

$env:WINDIRНедоцільно додавати таку річ безпосередньо у свої папки.
Рекомендований спосіб - додати його до особистого профілю:

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

Примітка. На всякий випадок, якщо ви отримаєте дозвіл на зразок

CategoryInfo: SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId: UnauthorizedAccess

Спробуйте наведену нижче команду та знову оновіть сеанс.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

1
Чудовий коментар. Дуже зрозуміло, хоча до моєї оболонки немає дотику.
JustinB

9
Щоб дозволити виконання сценарію мого профілю, мені довелося зробити ще один додатковий крок. Запустіть Powershell як адміністратор та виконайте виконання Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. Цей -Scopeваріант робить його трохи більш безпечним.
зомбат

2
Це чудовий метод! Зверніть увагу, що сама функція також стає доступною в оболонці, тому частина Set-Alias ​​вам дійсно не потрібна. Просто викличте функцію MyAlias. Також, щоб передати аргументи, використовуйте @Args, наприклад,function gs { git status @Args }
Automatico

3
@Automatico Мені подобається чітко говорити про те, Set-Aliasщо я люблю називати свої методи, використовуючи відповідні конвенції PS з відповідними дієсловами. Але так, якщо ви не прискіпливі, ви можете просто назвати свій метод, що б ви хотіли покликатись.
Чейз Флорелл

1
@zombat Це я точно боровся годинами. Дякую, я закінчила зараз.
jawad mansoor

28

2018, Windows 10

Ви можете зв’язати будь-який файл або каталог за допомогою простого сценарію PowerShell.

Написання сценарію швидкого доступу до файлу

Відкрийте Windows PowerShell ISE. На панелі сценаріїв напишіть:

New-Alias ${shortcutName} ${fullFileLocation}

Потім перейдіть до області командного рядка. Знайдіть адресу свого профілю PowerShell за допомогою echo $profile. Збережіть сценарій за цією адресою.

введіть тут опис зображення

Сценарій в адресі профілю PowerShell запускатиметься кожного разу, коли ви відкриваєте shellhell. Ярлик повинен працювати з кожним новим вікном PowerShell.

Написання сценарію швидкого доступу до каталогу

Для цього потрібен інший рядок у нашому сценарії.

function ${nameOfFunction} {set-location ${directory_location}}
New-Alias ${shortcut} ${nameOfFunction} 

Решта точно така ж.

введіть тут опис зображення

Увімкніть сценарії PowerShell

За замовчуванням сценарії PowerShell заблоковані. Щоб увімкнути їх, відкрийте налаштування -> Оновлення та безпека -> Для розробників. Виберіть Режим розробника (може знадобитися перезапуск). Вибір режиму розробника Windows 10.

Прокрутіть униз до розділу PowerShell, поставте галочку "Змінити політику виконання ..." та застосуйте.

Увімкнення сценаріїв PowerShell


2
echo $profile- це чудова порада, яка допоможе знайти правильне місце для додавання файлу. Дякую за вичерпну відповідь
Педро Мартінс Тімотео да Коста

19

Простий. Наприклад...

Відкрийте вікно 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 і дозволити йому виконувати код у межах вашої функції!


$ профіль не здається змінною середовища за замовчуванням у Windows 10. На що він повинен вказувати?
словаззаду

@wordsforthewise - Автоматична змінна $ PROFILE зберігає шляхи до профілів PowerShell, доступних у поточному сеансі. Він включений у Windows PowerShell.
Стерлінг Борн

1
Цей бар був не найпростішим рішенням.
Філ

Мені довелося ввімкнути "Увімкнути сценарії PowerShell" (в іншій відповіді), щоб це працювало. Серйозно супер просто!
Rocky Kev

10

Просто додати до цього списку можливих місць…

Це не спрацювало для мене: \Users\{ME}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Однак це зробило: \Users\{ME}\OneDrive\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Якщо у вас немає профілю або ви хочете його встановити, запустіть наступну команду, вона створить необхідну папку / файли і навіть підкаже, де він живе! New-Item -path $profile -type file -force


5

щоб створити файл profile1.psl, введіть таку команду:

новий елемент $ PROFILE.CurrentUserAllHosts -файл -ItemType -Force

для доступу до файлу введіть наступну команду:

ise $ PROFILE.CurrentUserAllHosts

зауважте, якщо ви цього не робили раніше, ви побачите, що не зможете запустити скрипт через політику виконання, яку потрібно змінити на Неограниченное з Обмеженого (за замовчуванням).

для цього закрийте скрипт і введіть цю команду:

Set-ExecutionPolicy -Scope CurrentUser

тоді:

RemoteSigned

потім знову ця команда:

ise $ PROFILE.CurrentUserAllHosts

потім нарешті введіть псевдоніми у сценарій, збережіть його, і вони повинні працювати кожного разу, коли ви запускаєте PowerShell навіть після перезавантаження комп'ютера.


3
Ви , ймовірно , хочете: Set-ExecutionPolicy RemoteSigned. Не рекомендуйте Unrestricted. Джерело: itprotoday.com/management-mobility/…
PhilT

2

Це трохи фантазії ... але це працює:

Крок 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: потім в інструментах ~ / Документи / інструменти / профіль.ps1:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

Крок 3:

$ Set-ExecutionPolicy -Scope CurrentUser Необмежений $. ./install_profile.ps1

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.