Schnellstartbefehl „Komplex“ in PowerShell
Ist es möglich, "komplexe" PowerShell-Befehle in PowerShell mithilfe eines Alias auszuführen?
Um Ihnen ein Beispiel zu geben, möchte ich den Befehl Get-VpnConnection -name "VPNname"über einen (nicht reservierten) Ein-Wort-Befehl ersetzen, z. B. vpnüber einen Alias? Funktioniert leider set-Alias vpn "Get-VpnConnection -name VPNname"nicht und auch nicht set-Alias vpn Get-VpnConnection -name "VPNname"(beachten Sie die unterschiedliche Position des ersten Anführungszeichens).
Bisher besteht meine "Problemumgehung" darin, den Befehl als Skriptdatei im "Startverzeichnis" von PowerShells (in meinem Fall C:\Users\username) zu speichern und .\vpn.ps1über einen Alias auszuführen . Ich erstelle den Alias mit set-Alias vpn ".\script_vpncheck.ps1". Gibt es eine direkte Möglichkeit, dies zu tun (ohne eine Skriptdatei zu erstellen)?
Folgefrage: Falls dies nicht möglich ist, möchte ich die Aliase mithilfe einer Skriptdatei initialisieren, z. B. über .\script.ps1(Hinweis: Ich muss sie nicht dauerhaft speichern). Das funktioniert leider nicht. Die Datei scheint ausgeführt zu werden, aber die Aliase funktionieren nicht. Irgendeine Idee warum?
Antworten
Speichern Sie einfach den Alias im Profil
- Öffnen Sie das Profil in PowerShell, indem Sie es ausführen
notepad $PROFILE(oder verwenden Sie einen Ihrer Lieblingseditoren). - Geben Sie die Befehle ein, die Sie in diese Datei ausführen möchten, und speichern Sie sie (zum Beispiel
Set-Alias). - Starten Sie PowerShell neu oder erstellen Sie das neu aktualisierte Profil, indem Sie es ausführen
. $PROFILE
Das Profil ist genau wie .bashrcin Bash, das beim Starten der Shell ausgeführt wird. Neben Aliasen können Sie auch Funktionen für komplexere Dinge schreiben . Sie sind nach dem Start von PowerShell verfügbar
function vpn($url) { Get-VpnConnection -name $url }
Set-Alias -Name vpn -Value Get-VpnConnection
Sie können keinen Alias für Befehle mit Argumenten festlegen, daher müssen Sie in diesem Fall eine Funktion erstellen
Der Grund, warum Ihre ps1-Datei nicht funktioniert, ist, dass sie in der Subshell ausgeführt wird. Wenn die Subshell geschlossen wird, wird alles gelöscht, einschließlich der neuen Aliase. Sie müssen Quelle das Skript mit dem Punktquellenoperator .(ähnlich .in bash) es in dem aktuell Shell laufen
. .\script.ps1
Aber anstatt das jedes Mal zu beschaffen, wenn Sie den Alias wollen, tun Sie es einfach permanent im Profil wie oben
Aliase sollen keine Parameter annehmen. Aus dem about_aliasesHilfethema:
ALTERNATIVE NAMEN FÜR BEFEHLE MIT PARAMETERN
Sie können einem Cmdlet, Skript, einer Funktion oder einer ausführbaren Datei einen Alias zuweisen. Sie können einem Befehl und seinen Parametern keinen Alias zuweisen. Sie können beispielsweise dem Cmdlet Get-Eventlog einen Alias zuweisen, dem Befehl Get-Eventlog -LogName System jedoch keinen Alias zuweisen.
Sie können eine Funktion erstellen, die den Befehl enthält. Geben Sie zum Erstellen einer Funktion das Wort "Funktion" gefolgt von einem Namen für die Funktion ein. Geben Sie den Befehl ein und setzen Sie ihn in geschweifte Klammern ({}).
Mit dem folgenden Befehl wird beispielsweise die Syslog-Funktion erstellt. Diese Funktion repräsentiert den Befehl Get-Eventlog -LogName System:
function Get-SystemEventlog {Get-Eventlog -LogName System} Set-Alias -Name syslog -Value Get-SystemEventlogSie können jetzt "syslog" anstelle des Befehls eingeben. Außerdem können Sie Aliase für die neue Funktion erstellen.
Sie benötigen jedoch keine separate Skriptdatei. Sie können eine einfache Funktion definieren und mit dem folgenden Code zu Ihrem Profil hinzufügen:
'Function vpn { Get-VpnConnection -name VPNname }' | Add-Content $PROFILE
Der Befehl vpnist ab diesem Zeitpunkt in allen PowerShell- Sitzungen verfügbar .