PowerShell 7 und Windows PowerShell. Tobias Weltner

Читать онлайн.
Название 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:

      # 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