So erstellen Sie permanente PowerShell-Aliase

141

Ich möchte ein aliasvon einem erstellen cmdlet, das nicht abläuft, nachdem ich die aktuelle Sitzung von Powershell geschlossen habe. Nehmen wir an, ich habe diesen Alias:

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

Dadurch wird der GotoAlias perfekt erstellt , aber ich möchte ihn auch nach Abschluss der aktuellen Sitzung verwenden. Wie kann ich das erreichen?

Hinweis:

Das PowerShell-Hilfesystem schlägt vor, dass ich die von mir erstellten Aliase exportieren und beim nächsten Öffnen einer neuen Sitzung importieren kann. Das ist eigentlich nicht das, wonach ich suche. Gibt es eine direkte eindeutige Möglichkeit, nach mir einen Alias ​​zu haben? Erstellen Sie es durch verschiedene Sitzungen

AymenDaoudi
quelle
IMO, Sie sind viel besser dran, Skripte in den Pfad zu setzen. Auf diese Weise steht der Befehl sofort allen offenen Shells zur Verfügung. Wenn Sie ihn ändern, wird die Änderung auf alle nachfolgenden Verwendungen übertragen, ohne dass $ profile oder etwas anderes neu geladen werden muss.
Masterxilo

Antworten:

112

AKTUALISIERT - Jan 2017

Es ist möglich, profile.ps1jeden Powershell-Code, der bei jedem Start von Powershell ausgeführt werden soll , in einer Datei zu speichern . Es gibt mindestens 6 verschiedene Pfade, in denen der Code gespeichert werden kann, je nachdem, welcher Benutzer ihn ausführen muss. Wir können nur zwei davon betrachten: die Pfade "Alle Benutzer" und "Nur Ihr Benutzer".

Um Ihre Frage zu beantworten, müssen Sie nur eine profile.ps1Datei erstellen , die den Code enthält, den Sie ausführen möchten

New-Alias Goto Set-Location

und speichere es auf dem richtigen Weg:

  • "$Home\Documents" (C: \ Benutzer \ Ihr Name \ Dokumente): Nur Ihr Benutzer führt den Code aus.
  • $PsHome (C: \ Windows \ System32 \ WindowsPowerShell \ v1.0): Jeder Benutzer führt den Code aus.

Um die Änderungen zu übernehmen, schließen Sie alle offenen Powershell-Instanzen und starten Sie sie neu.

TIPPS

  • Wenn beide Pfade eine profile.ps1Datei enthalten, wird zuerst der gesamte Benutzer ausgeführt, dann die benutzerspezifischen.

  • Fügen Sie den Code immer in das benutzerspezifische Profil ein, wenn die Ausführung nicht auf jeden Benutzer ausgedehnt werden muss. Sie benötigen keine Administratorrechte, um die Datei zu Ihrem Benutzerbereich hinzuzufügen (andernfalls tun Sie dies), und Sie verschmutzen nicht den Bereich anderer Benutzer.

  • MERKEN! Der $PsHomePfad unterscheidet sich zwischen 32-Bit- und 64-Bit-Instanzen von Powershell. Sie müssen also beide Umgebungen berücksichtigen, wenn Sie den Profilcode immer ausführen möchten. Normalerweise sind die Pfade C:\Windows\System32\WindowsPowerShell\v1.0für die 64-Bit-Umgebung und C:\Windows\SysWow64\WindowsPowerShell\v1.0für die 32- Bit-Umgebung .

Naigel
quelle
9
Kein Fehler, es hat einfach nicht funktioniert. Ich bin mir nicht sicher, ob dies ein Berechtigungsproblem ist. Ich habe es tatsächlich zum Laufen gebracht (ich sollte es früher kommentieren). Ich musste den Ordner erstellen \Users\{ME}\Documents\WindowsPowerShellund dann keinen Microsoft.PowerShell_profile.ps1der anderen Pfade hinzufügen, was für mich funktioniert.
2
Laut verlinktem Artikel beschränken die Verwendung "$HOME\Documents\WindowsPowerShell"und Benennung Microsoft.PowerShell_profile.ps1den Bereich auf Nicht-ISE und auf den aktuellen Host, sollten jedoch keine Frage der Berechtigungen sein (gleich von "$Home\Documents\profile.ps1" should apply). Vielleicht ist es nicht wirklich so, ich werde es versuchen, danke für die Information
Naigel
2
Hallo @Naigel, ich muss diesen Ansatz verwenden, damit es funktioniert: superuser.com/questions/516700/…. Die endgültige Lösung für mich war also, die Datei für das Profil zu erstellen: New-Item -path $profile -type file -forcedie den Ordner und die Datei erstellt hatDocuments\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Eagle
56
Der beste Weg, um den Speicherort des Profils zu ermitteln, besteht darin, "echo $ profile" in Ihrem Powershell-Fenster auszuführen.
Rahul Jha
2
Denken Sie daran, eine Sicherungskopie Ihrer profile.ps1-Datei zu erstellen, da Windows Creators Update die Datei an ihrem Standardspeicherort zu löschen scheint !!
Gooleem
109

Es ist keine gute Idee, $env:WINDIRsolche Dinge direkt zu Ihren Powershell-Ordnern hinzuzufügen.
Der empfohlene Weg ist, es Ihrem persönlichen Profil hinzuzufügen:

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

Fügen Sie nun Ihren Alias ​​zur Microsoft.PowerShell_profile.ps1-Datei hinzu, die jetzt geöffnet wird:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

Speichern Sie es dann und aktualisieren Sie die aktuelle Sitzung mit:

. $profile

Hinweis: Nur für den Fall, wenn Sie Berechtigungsprobleme wie erhalten

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

Versuchen Sie den folgenden Befehl und aktualisieren Sie die Sitzung erneut.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Chase Florell
quelle
1
Toller Kommentar. Sehr klar, obwohl meine Powershell keine Berührung hat.
JustinB
9
Um die Ausführung meines Profilskripts zu ermöglichen, musste ich einen zusätzlichen Schritt ausführen. Führen Sie Powershell als Administrator aus und führen Sie es aus Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. Die -ScopeOption macht es ein bisschen sicherer.
Zombat
2
Dies ist eine großartige Methode! Bitte beachten Sie, dass die Funktion selbst auch in der Shell verfügbar ist, sodass Sie den Set-Alias-Teil nicht wirklich benötigen. Rufen Sie einfach die Funktion auf MyAlias. Um Argumente weiterzugeben, verwenden Sie @ArgszBfunction gs { git status @Args }
Automatico
3
@Automatico Ich mag es, explizit zu sein, Set-Aliasweil ich meine Methoden unter Verwendung der entsprechenden PS-Konventionen mit den entsprechenden Verben benennen möchte . Aber ja, wenn Sie nicht wählerisch sind, können Sie Ihre Methode einfach benennen, was auch immer Sie aufrufen möchten.
Chase Florell
1
@zombat Genau damit hatte ich stundenlang zu kämpfen. Danke, ich bin jetzt fertig.
Jawad Mansoor
28

2018, Windows 10

Sie können mithilfe eines einfachen PowerShell-Skripts eine Verknüpfung zu einer beliebigen Datei oder einem Verzeichnis herstellen.

Schreiben eines Dateiverknüpfungsskripts

Öffnen Sie Windows PowerShell ISE. Schreiben Sie im Skriptbereich:

New-Alias ${shortcutName} ${fullFileLocation}

Gehen Sie dann zum Befehlszeilenbereich. Suchen Sie Ihre PowerShell-Benutzerprofiladresse mit echo $profile. Speichern Sie das Skript unter dieser Adresse.

Geben Sie hier die Bildbeschreibung ein

Das Skript in der PowerShell-Profiladresse wird jedes Mal ausgeführt, wenn Sie Powershell öffnen. Die Verknüpfung sollte mit jedem neuen PowerShell-Fenster funktionieren.

Schreiben eines Verzeichnisverknüpfungsskripts

Es erfordert eine weitere Zeile in unserem Skript.

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

Der Rest ist genau das gleiche.

Geben Sie hier die Bildbeschreibung ein

Aktivieren Sie PowerShell-Skripts

Standardmäßig sind PowerShell-Skripts blockiert. Um sie zu aktivieren, öffnen Sie Einstellungen -> Update & Sicherheit -> Für Entwickler. Wählen Sie den Entwicklermodus (möglicherweise muss neu gestartet werden). Auswählen des Entwicklermodus Windows 10.

Scrollen Sie zum Abschnitt PowerShell, aktivieren Sie die Option "Ausführungsrichtlinie ändern ..." und wenden Sie sie an.

Aktivieren von PowerShell-Skripten

Ben Carp
quelle
2
echo $profileist ein großartiger Tipp, um den richtigen Speicherort für die Datei zu finden. Vielen Dank für die umfassende Antwort
Pedro Martins Timóteo da Costa
19

Einfach. Beispielsweise...

Öffnen Sie ein Windows PowerShell-Fenster und geben Sie Folgendes ein:

notepad $profile

Erstellen Sie dann eine Funktion wie:

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

Geben Sie dies dann unter dem Funktionsnamen ein:

Set-Alias google goSomewhereThenOpenGoogleThenDeleteSomething

Jetzt können Sie das Wort "google" in Windows PowerShell eingeben und den Code in Ihrer Funktion ausführen lassen!

Sterling Bourne
quelle
$ profile scheint in Windows 10 keine Standardumgebungsvariable zu sein. Worauf soll es zeigen?
Worte für den
@wordsforthewise - Die automatische Variable $ PROFILE speichert die Pfade zu den PowerShell-Profilen, die in der aktuellen Sitzung verfügbar sind. Es ist in Windows PowerShell enthalten.
Sterling Bourne
1
Dies war keine der einfachsten Lösungen.
Phill
Ich musste "PowerShell-Skripte aktivieren" (in einer anderen Antwort) aktivieren, damit dies funktioniert. Ernsthaft super einfach!
Rocky Kev
10

Nur um dieser Liste möglicher Standorte hinzuzufügen ...

Das hat bei mir nicht funktioniert: \Users\{ME}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Dies tat jedoch: \Users\{ME}\OneDrive\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Wenn Sie kein Profil haben oder ein Profil einrichten möchten, führen Sie den folgenden Befehl aus. Es erstellt den erforderlichen Ordner / die erforderlichen Dateien und teilt Ihnen sogar mit, wo es sich befindet! New-Item -path $profile -type file -force

golden_grahams
quelle
5

Geben Sie den folgenden Befehl ein, um die Datei profile1.psl zu erstellen:

neues Element $ PROFILE.CurrentUserAllHosts -ItemType-Datei -Force

Um auf die Datei zuzugreifen, geben Sie den nächsten Befehl ein:

ise $ PROFILE.CurrentUserAllHosts

Hinweis: Wenn Sie dies noch nicht getan haben, werden Sie feststellen, dass Sie das Skript aufgrund Ihrer Ausführungsrichtlinie, die Sie in "Uneingeschränkt von Eingeschränkt" (Standard) ändern müssen, nicht ausführen können.

Schließen Sie dazu das Skript und geben Sie den folgenden Befehl ein:

Set-ExecutionPolicy -Scope CurrentUser

dann:

RemoteSigned

dann nochmal diesen Befehl:

ise $ PROFILE.CurrentUserAllHosts

Geben Sie dann schließlich Ihre Aliase in das Skript ein, speichern Sie sie und sie sollten jedes Mal ausgeführt werden, wenn Sie Powershell ausführen, auch nach dem Neustart Ihres Computers.

Michael Sanders
quelle
3
Sie wollen wahrscheinlich : Set-ExecutionPolicy RemoteSigned. Empfehlen Sie nicht weiter Unrestricted. Quelle: itprotoday.com/management-mobility/…
PhilT
2

Das ist ein bisschen schick ... aber es funktioniert:

Schritt 1: Erstellen Sie ein Powershell-Profil:

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

Schritt 2: dann in tools ~ / Documents / tools / profile.ps1:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

Schritt 3:

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

Bill Moore
quelle