PowerShell: Profile
Wer häufig mit der PowerShell arbeitet, benötigt manchmal Funktionen, die nicht standardmäßig enthalten sind. Man schreibt diese sich dann selber und hätte sie eben gerne immer verfügbar, ohne sie erst raussuchen zu müssen. Hier kann man die „PowerShell Profile“ verwenden, um die Umgebung von Windows PowerShell oder Windows PowerShell ISE zu konfigurieren, und sie mit den Variablen, Aliasen, Funktionen sowie Farb- und Schriftartvoreinstellungen für die eigenen Bedürfnisse vorzubereiten.
Es gibt hierfür auch zwei Artikel auf Microsoft:
– Allgemeines über Profile
– So wird’s gemacht: Verwenden von Profilen in Windows PowerShell (ISE)
Ich will hier kurz die wichtigsten Dinge zusammenfassen.
Man kann für diese vier Anwendungsfälle Profile festlegen:
Profiltyp | Profilpfad | Dateipfad |
---|---|---|
Aktueller Benutzer, PowerShell ISE | $PROFILE.CurrentUserCurrentHost oder $PROFILE | $Home\[My ]Documents\PowerShell\ Microsoft.PowerShell_profile.ps1 |
Alle Benutzer, PowerShell ISE | $PROFILE.AllUsersCurrentHost | $PsHome\Microsoft.PowerShell_profile.ps1 |
Aktueller Benutzer, alle Hosts | $PROFILE.CurrentUserAllHosts | $Home\[My ]Documents\PowerShell\Profile.ps1 |
Alle Benutzer, alle Hosts | $PROFILE.AllUsersAllHosts | $PsHome\Profile.ps1 |
Zudem gibt es Anwendungen, die eigene Profile verwenden können, wie bspw. Visual Studio.
Description | Path |
---|---|
All users, Current Host | $PsHome\Microsoft.VSCode_profile.ps1 |
Current user, Current Host | $Home\[My ]Documents\WindowsPowerShell\ Microsoft.VSCode_profile.ps1 |
Vorab kann man auch prüfen, welche Profilvariablen verfügbar sind:
$PROFILE | Get-Member -Type NoteProperty
Man kann ganz einfach prüfen, ob schon ein Profil erzeugt wurde – hier im Beispiel für „Alle Computer, Alle Benutzer“:
Test-Path -Path $PROFILE.AllUsersAllHosts
Sowie bei einem negativen Ergebnis, dieses dann direkt erstellen lassen:
if (!(Test-Path -Path <profile-name> )) {New-Item -ItemType File -Path <profile-name> -Force}
Hierbei muss <profile-name> natürlich durch den Profilnamen (siehe Tabelle oben) ersetzt werden.
Wichtig: Für das Anlegen oder Ändern der „Alle Benutzer“-Profile muss die PowerShell als Administrator gestartet sein.
Im weiteren Verlauf möchte ich für meinen eigenen Benutzer ein Profil anlegen. D.h. ich prüfe zuerst mit obigen Befehl, ob schon eines existiert und lasse es anlegen. Danach bearbeite ich die noch leere Profil-Datei im Editor.
Ich habe mir im Vorfeld ein paar nützliche Dinge rausgesucht und will diese nun verwenden:
$Host.UI.RawUI.WindowTitle="Welcome to PowerShell! | $([char]0x00A9) ronny.bottcher.info"
if($Host.UI.RawUI.WindowTitle -like "administrator") { $Host.UI.RawUI.ForegroundColor = "Red" }
new-item alias:np -value C:\Windows\System32\notepad.exe
new-item alias:npp -value "C:\Program Files (x86)\Notepad++\notepad++.exe"
Function CheckHost{
$IPorName=Read-Host "IP Address or Name of Remote Host?"
$up="$IPorName is up"
$down="$IPorName is down"
$words=New-Object -ComObject SAPI.SpVoice
If (Test-Connection $IPorName -Quiet -Count 1)
{Write-Host "Host is down"
$null=$words.Speak($up)}
else
{Write-Host "Host is down"
$null=$words.Speak($down)}
}
Function PortScanner{
$computer=Read-Host "Computername | IP Address?"
$port=Read-Host "Port Numbers? Separate them by comma"
$port.split(',') | Foreach-Object -Process {If (($a=Test-NetConnection $computer -Port $_ -WarningAction SilentlyContinue).tcpTestSucceeded -eq $true) {Write-Host $a.Computername $a.RemotePort -ForegroundColor Green -Separator " ==> "} else {Write-Host $a.Computername $a.RemotePort -Separator " ==> " -ForegroundColor Red}}
}
cls
Write-Host "Welcome to" (Invoke-Expression hostname) -ForegroundColor Green
Write-Host "You are logged in as " (Invoke-Expression whoami)
Write-Host "Today:" (Get-Date)
Set-Location c:\
New-Alias Time Get-Date -Force
Write-Host "Microsoft PowerShell ( Version"($PSVersionTable.PSVersion.Major)") is awaiting your commands…"
Write-Host "If you are a system administrator and haven't heard of PowerShell yet, you are behind the game!" -ForegroundColor Red
Anschließend die Datei speichern, das aktuelle PowerShell-Fenster schließen und eine neue PowerShell-Console öffnen. Sollte dann diese Meldung kommen, muss das Ausführen von Skripten noch aktiviert werden.
Also schauen wir doch einfach mal hier nach „about_Execution_Policies“ (https:/go.microsoft.com/fwlink/?LinkID=135170)
Und setzen die Richtlinie für den aktuellen Benutzer auf „ByPass“:
Set-ExecutionPolicy -ExecutionPolicy ByPass -Scope CurrentUser
Und schon klappt’s mit dem Profil: