Название | PowerShell 7 und Windows PowerShell |
---|---|
Автор произведения | Tobias Weltner |
Жанр | Математика |
Серия | |
Издательство | Математика |
Год выпуска | 0 |
isbn | 9783960104803 |
}
# Grüne Fehlermeldungen (kommentieren Sie die nächste Zeile ein,
# wenn Sie das wirklich wollen):
# $host.PrivateData.ErrorForegroundColor = 'Green'
# Funktion zum Herunterladen der Beispielskripte in diesem Buch:
Invoke-RestMethod -Uri https://tinyurl.com/codeAusBuch |
New-Item -Path function: -Name L -Force |
Out-Null
Listing 1.15: Ein Beispiel-Profilskript für PowerShell
Falls Sie allerdings mit Windows arbeiten und sowohl Windows PowerShell als auch PowerShell abwechselnd oder je nach Szenario nutzen, werden Sie schnell feststellen, dass diese beiden PowerShell-Varianten ihre Profilskripte an unterschiedlichen Orten speichern. Das ist keine Katastrophe, aber Sie müssten nun Ihre Anpassungen in zwei separaten Profilskripten pflegen, also Listing 1.14 jeweils einmal in Windows PowerShell und einmal in PowerShell ausführen und danach dafür sorgen, dass beide Dateien denselben Inhalt haben.
Theoretisch kann das sogar sinnvoll sein, denn vielleicht wollen Sie bei den beiden PowerShellVarianten unterschiedliche Starteinstellungen vorgeben. Die meisten Anwender allerdings haben das nicht vor. Hier wäre ein gemeinsames Profilskript eigentlich die bessere Wahl.
Und genau das funktioniert auch, jedenfalls sofern Sie Administratorrechte besitzen. Dann nämlich können Sie für das PowerShell-Profilskript einen sogenannten Hard Link verwenden, der wie eine normale Datei aussieht, in Wirklichkeit aber auf die Profildatei von Windows PowerShell verweist. Sobald eine der beiden Dateien geändert wird, ändert sich auch die andere – ganz von allein.
So eine Spiegelung richtet Listing 1.16 ein:
#requires -RunAsAdministrator
# Hard Links können nur als Administrator angelegt werden.
# Dieses Skript ist nur sinnvoll, wenn das Betriebssystem "Windows" ist:
if ($isWindows -eq $false)
{
Write-Warning "Spiegeln der Profile ist nur bei Windows möglich."
Write-Warning "Andere Betriebssysteme verfügen über kein Windows PowerShell"
return
}
# Sicherstellen, dass die Windows PowerShell-Profildatei existiert:
if ($PSVersionTable.PSEdition -eq 'Core')
{
# Pfad zum Windows PowerShell-Profilskript berechnen:
$winprofile = $profile.CurrentUserAllHosts -replace '\\PowerShell\\', '\WindowsPowerShell\'
$coreprofile = $profile
}
else
{
# Pfad steht bei Windows PowerShell schon in $profile:
$winprofile = $profile.CurrentUserAllHosts
$coreprofile = $profile -replace '\\WindowsPowerShell\\','\PowerShell\'
}
# Datei anlegen, wenn noch nicht vorhanden:
$exists = Test-Path -Path $winprofile
if ($exists -eq $false)
{
$null = New-Item -Path $winprofile -ItemType File -Force
Write-Warning "Profilskript für Windows PowerShell angelegt."
}
else
{
Write-Warning "Profilskript für Windows PowerShell war vorhanden."
}
# Testen, ob Profilskript für PowerShell existiert:
$exists = Test-Path -Path $coreprofile
if ($exists)
{
# Ist die Profildatei vielleicht bereits gespiegelt?
$datei = Get-Item -Path $coreprofile
if ($datei.LinkType -eq 'HardLink')
{
# Wir sind fertig.
Write-Warning 'Profildatei von Windows PowerShell wird bereits mitgenutzt (keine
Änderungen).'
# Profilskript im Editor öffnen:
Invoke-Item -Path $winprofile
Return
}
else
{
# Wenn PowerShell bereits eine eigene Profildatei verwendet, muss diese
# gelöscht werden, um stattdessen auf das Windows-Profil zu verweisen.
# Also nachfragen, ob der User das will:
Write-Warning 'Profilskript für PowerShell ist bereits als separate Datei vorhanden.'
Write-Warning 'Soll dieses Profil gelöscht und stattdessen das Profil der Windows
PowerShell verwendet werden?'
# Frage stellen und 20 Sekunden warten, danach "NEIN" wählen:
choice.exe /C JN /M "Drücken Sie J für Ja oder N für Nein" /T 20 /D N
# choice.exe liefert einen ErrorLevel in $LastExitCode zurück, der
# Zahlenwert entspricht der Auswahl (1=Ja, 2=Nein).
if ($LASTEXITCODE -eq 2) { return }
# Profildatei löschen.
Remove-Item -Path $coreprofile -Force
}
}
# Hard Link anlegen (erfordert Administratorrechte)
$null = New-Item -Path $coreprofile -ItemType HardLink -Value $winprofile
Write-Warning 'Profildatei von Windows PowerShell wird nun mitgenutzt.'
Write-Warning "Um die Spiegelung aufzuheben, einfach die $profile löschen und von Hand oder im Editor
neu angelegen."
# Profilskript im Editor öffnen:
Invoke-Item -Path $winprofile
Listing 1.16: Profile von PowerShell und Windows PowerShell gemeinsam nutzen
Zum Glück brauchen Sie diesen Code nicht (mehr) von Hand einzugeben. Gehen Sie lieber so vor:
Weil Listing 1.16 Administratorrechte erfordert, um Hard Links anlegen zu können, starten Sie zuerst eine PowerShell-Konsole mit vollen Administratorrechten (siehe Abbildung 1.2).
Richten Sie darin mit Listing 1.13 den Befehl L ein. In wenigen Minuten brauchen Sie das nicht mehr händisch zu tun, denn dann wird Ihr Profilskript automatisch dafür sorgen, dass in jeder PowerShell stets der praktische Befehl L zur Verfügung steht.
Laden