Jak tworzyć trwałe aliasy programu PowerShell

141

Chcę utworzyć aliastematyce cmdlet, które nie wygasają po zamknę bieżącej sesji PowerShell, powiedzmy, że mam ten alias:

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

To doskonale tworzy Gotoalias, ale chcę go używać nawet po zamknięciu bieżącej sesji, jak mogę to osiągnąć.

Uwaga:

System pomocy programu PowerShell sugeruje, że mogę wyeksportować utworzone przeze mnie aliasy i zaimportować je następnym razem, gdy otworzę nową sesję, właściwie to nie jest to, czego szukam, czy istnieje bezpośredni, jasny sposób na utrzymanie aliasu po stworzyć go poprzez różne sesje

AymenDaoudi
źródło
IMO, znacznie lepiej jest umieszczać skrypty w PATH. W ten sposób polecenie będzie dostępne natychmiast dla wszystkich twoich otwartych powłok, a jeśli je zmienisz, zmiana zostanie przeniesiona na wszystkie kolejne zastosowania bez konieczności ponownego ładowania $ profile lub czegoś takiego.
masterxilo

Odpowiedzi:

112

AKTUALIZACJA - styczeń 2017 r

W profile.ps1pliku można przechowywać dowolny kod programu PowerShell, który ma być wykonywany przy każdym uruchomieniu programu PowerShell. Istnieje co najmniej 6 różnych ścieżek do przechowywania kodu, w zależności od tego, który użytkownik musi go wykonać. Możemy wziąć pod uwagę tylko 2 z nich: ścieżki „wszyscy użytkownicy” i „tylko Twój użytkownik”.

Aby odpowiedzieć na twoje pytanie, musisz tylko utworzyć profile.ps1plik zawierający kod, który chcesz, aby został wykonany

New-Alias Goto Set-Location

i zapisz go we właściwej ścieżce:

  • "$Home\Documents" (C: \ Users \ yourname \ Documents): tylko twój użytkownik wykona kod.
  • $PsHome (C: \ Windows \ System32 \ WindowsPowerShell \ v1.0): każdy użytkownik wykona kod.

Aby zastosować zmiany, zamknij wszystkie otwarte wystąpienia programu PowerShell i uruchom je ponownie.

WSKAZÓWKI

  • Jeśli obie ścieżki zawierają profile.ps1plik, najpierw wykonywana jest ścieżka dla wszystkich użytkowników, a następnie określana dla użytkowników.

  • Zawsze umieszczaj kod w profilu użytkownika, jeśli nie ma potrzeby rozszerzania jego wykonywania na każdego użytkownika. Nie potrzebujesz uprawnień administratora, aby dodać plik do przestrzeni użytkownika (w przeciwnym razie to zrobisz) i nie zanieczyszczasz przestrzeni innych użytkowników.

  • ZAPAMIĘTAJ! $PsHomeŚcieżka różni się między 32- i 64-bitowych instancji PowerShell, więc trzeba wziąć pod uwagę zarówno środowisko, jeśli chcesz zawsze wykonać kod profilu. Zwykle ścieżki są C:\Windows\System32\WindowsPowerShell\v1.0przeznaczone dla środowiska 64- C:\Windows\SysWow64\WindowsPowerShell\v1.0bitowego i 32-bitowego.

Naigel
źródło
9
bez błędu, po prostu nie zadziałało, nie jestem pewien, czy jest to problem z uprawnieniami. Naprawdę sprawiłem, że zadziałało (powinienem skomentować wcześniej). Musiałem utworzyć folder, \Users\{ME}\Documents\WindowsPowerShella następnie dodać, że Microsoft.PowerShell_profile.ps1żadna z pozostałych ścieżek nie działa dla mnie.
2
Zgodnie z połączonym artykułem używanie "$HOME\Documents\WindowsPowerShell"i nazewnictwo Microsoft.PowerShell_profile.ps1ogranicza zakres do nie-ISE i do bieżącego hosta, ale nie powinno to być kwestią uprawnień (to samo "$Home\Documents\profile.ps1" should apply). Może tak nie jest, spróbuję, dziękuję za informację
Naigel
2
Cześć @Naigel, muszę użyć tego podejścia, aby to zadziałało: superuser.com/questions/516700/ ... więc ostatecznym rozwiązaniem dla mnie było utworzenie pliku dla profilu: New-Item -path $profile -type file -forcektóry utworzył folder i plikDocuments\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Eagle
57
Najlepszym sposobem na uzyskanie lokalizacji profilu może być uruchomienie „echo $ profile” w oknie PowerShell.
Rahul Jha,
2
Pamiętaj, aby wykonać kopię zapasową pliku profile.ps1, ponieważ Windows Creators Update wydaje się czyścić plik w jego domyślnej lokalizacji !!
gooleem
109

Nie jest dobrym pomysłem dodawanie tego rodzaju rzeczy bezpośrednio do $env:WINDIRfolderów PowerShell.
Zalecanym sposobem jest dodanie go do swojego profilu osobistego:

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

Teraz dodaj swój alias do pliku Microsoft.PowerShell_profile.ps1, który jest teraz otwarty:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

Następnie zapisz go i odśwież bieżącą sesję za pomocą:

. $profile

Uwaga: na wszelki wypadek, jeśli masz problem z pozwoleniem, taki jak

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

Wypróbuj poniższe polecenie i ponownie odśwież sesję.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Ścigaj Florell
źródło
1
Świetny komentarz. Bardzo wyraźne, chociaż moja PowerShell nie ma dotyku.
JustinB
9
Aby umożliwić wykonanie skryptu profilu, musiałem wykonać jeden dodatkowy krok. Uruchom program PowerShell jako administrator i wykonaj Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. Ta -Scopeopcja sprawia, że ​​jest nieco bezpieczniejszy.
zombat
2
To świetna metoda! Proszę nie zwracać uwagi na to, że sama funkcja jest również dostępna w powłoce, więc tak naprawdę nie potrzebujesz części Set-Alias. Po prostu wywołaj funkcję MyAlias. Aby przekazać argumenty, użyj @Argsnp.function gs { git status @Args }
Automatico
3
@Automatico Lubię mówić wprost o tym, Set-Aliasponieważ lubię nazywać moje metody przy użyciu odpowiednich konwencji PS z odpowiednimi czasownikami. Ale tak, jeśli nie jesteś wybredny, możesz po prostu nazwać swoją metodę, cokolwiek zamierzasz wywołać.
Chase Florell
1
@zombat Właśnie z tym walczyłem godzinami. Dziękuję, skończyłem.
jawad mansoor
28

2018, Windows 10

Możesz utworzyć link do dowolnego pliku lub katalogu za pomocą prostego skryptu PowerShell.

Pisanie skryptu skrótu do pliku

Otwórz Windows PowerShell ISE. W okienku skryptu napisz:

New-Alias ${shortcutName} ${fullFileLocation}

Następnie przejdź do okienka wiersza poleceń. Znajdź swój adres profilu użytkownika programu PowerShell za pomocąecho $profile . Zapisz skrypt pod tym adresem.

wprowadź opis obrazu tutaj

Skrypt w adresie profilu programu PowerShell będzie uruchamiany za każdym razem, gdy otworzysz program PowerShell. Skrót powinien działać z każdym nowym oknem programu PowerShell.

Pisanie skryptu skrótu do katalogu

Wymaga innej linii w naszym skrypcie.

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

Reszta jest dokładnie taka sama.

wprowadź opis obrazu tutaj

Włącz skrypty PowerShell

Domyślnie skrypty PowerShell są blokowane. Aby je włączyć, otwórz ustawienia -> Aktualizacja i zabezpieczenia -> Dla programistów. Wybierz tryb programisty (może wymagać ponownego uruchomienia). Wybór trybu programisty Windows 10.

Przewiń w dół do sekcji PowerShell, zaznacz opcję „Zmień zasady wykonywania ...” i zastosuj.

Włączanie skryptów PowerShell

Ben Carp
źródło
2
echo $profileto świetna wskazówka, która pomaga znaleźć właściwą lokalizację do dodania pliku. Dziękuję za wyczerpującą odpowiedź
Pedro Martins Timóteo da Costa
19

Prosty. Na przykład...

Otwórz okno programu Windows PowerShell i wpisz:

notepad $profile

Następnie utwórz funkcję, taką jak:

function goSomewhereThenOpenGoogleThenDeleteSomething {
    cd C:\Users\
    Start-Process -FilePath "http://www.google.com"
    rm fileName.txt
}

Następnie wpisz to pod nazwą funkcji:

Set-Alias google goSomewhereThenOpenGoogleThenDeleteSomething

Teraz możesz wpisać słowo „google” w programie Windows PowerShell i zlecić wykonanie kodu w ramach Twojej funkcji!

Sterling Bourne
źródło
$ profile nie wydaje się być domyślną zmienną środowiskową w systemie Windows 10. Na co ma wskazywać?
słowa z
@wordsforthewise - zmienna automatyczna $ PROFILE przechowuje ścieżki do profili programu PowerShell, które są dostępne w bieżącej sesji. Jest zawarty w programie Windows PowerShell.
Sterling Bourne
1
Nie było to żadne najprostsze rozwiązanie.
Phill
Musiałem włączyć opcję „Włącz skrypty PowerShell” (w innej odpowiedzi), aby to zadziałało. Poważnie, super proste!
Rocky Kev
10

Wystarczy dodać do tej listy możliwych lokalizacji ...

To nie zadziałało dla mnie: \Users\{ME}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Jednak tak się stało: \Users\{ME}\OneDrive\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Jeśli nie masz profilu lub chcesz go założyć, uruchom następujące polecenie, stworzy ono niezbędny folder / pliki, a nawet powie Ci, gdzie on mieszka! New-Item -path $profile -type file -force

golden_grahams
źródło
5

aby utworzyć plik profile1.psl, wpisz następujące polecenie:

nowa pozycja $ PROFILE.CurrentUserAllHosts -ItemType plik -Force

aby uzyskać dostęp do pliku, wpisz następną komendę:

ise $ PROFILE.CurrentUserAllHosts

Uwaga jeśli nie zrobiłeś tego wcześniej, zobaczysz, że nie będziesz mógł uruchomić skryptu z powodu swojej polityki wykonywania, którą musisz zmienić na Unrestricted from Restricted (domyślna).

aby to zrobić zamknij skrypt, a następnie wpisz polecenie:

Set-ExecutionPolicy -Scope CurrentUser

następnie:

RemoteSigned

to ponownie to polecenie:

ise $ PROFILE.CurrentUserAllHosts

następnie w końcu wpisz swoje aliasy w skrypcie, zapisz go i powinny być uruchamiane za każdym razem, gdy uruchomisz PowerShell, nawet po ponownym uruchomieniu komputera.

Michael Sanders
źródło
3
Prawdopodobnie chcesz: Set-ExecutionPolicy RemoteSigned. Nie polecaj Unrestricted. Źródło: itprotoday.com/management-mobility/…
PhilT,
2

To jest trochę fantazyjne ... ale działa:

Krok 1: Utwórz profil 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

Krok 2: następnie w tools ~ / Documents / tools / profile.ps1:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

Krok 3:

$ Set-ExecutionPolicy -Scope CurrentUser Unrestricted $. ./install_profile.ps1

Bill Moore
źródło