Як створити постійні псевдоніми 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.