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:

ProfiltypProfilpfadDateipfad
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.

DescriptionPath
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:

Permanentlink zu diesem Beitrag: https://ronny-boettcher.de/technik/windows/powershell-profile

Schreibe einen Kommentar

Deine Email-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.