Читать книгу PowerShell 7 und Windows PowerShell - Tobias Weltner - Страница 102

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

PowerShell 7 und Windows PowerShell

Подняться наверх