PowerShell 7 die Neuerungen, was erwartet den Umsteiger
PowerShell 7 Theme
PowerShell 7 die Neuerungen, was erwartet den Umsteiger

Überblick

Windows PowerShell (für Windows) und PowerShell Core (für Windows, MacOS und Linux) wurden in PowerShell 7 zusammengeführt und bilden deren Nachfolger.

PowerShell 7 basiert und ist kompatibel mit .NET Core 3.1 (LTS).

PowerShell 7 ist abwärtskompatibel und kann auch parallel zu Windows PowerShell produktiv genutzt werden.

PowerShell 7 ist auch für .NET-Entwickler attraktiv, da man in einer einzigen Skriptsprache plattformübergreifend .NET-Anwendungen schreiben kann.

Screenshot PowerShell 7 Console
PowerShell 7 Console

Die Neuerungen und Änderungen der PowerShell 7 beziehen sich auf folgende Bereiche:

  • Allgemeine und übergreifende Änderungen
  • Cmdlets
  • System-Variablen
  • Operatoren
  • PowerShell-Verhalten
  • Handling & Dokumentation

Was ist neu und lohnt der Umstieg?

Die aktuellste Version von PowerShell 7 können Sie auf GitHub beziehen:
PowerShell 7 Download.

Die offizielle Beschreibung der Änderung in PowerShell finden Sie hier:
What's New in PowerShell 7.0.

Den Verlauf der Veröffentlichung von PowerShell Modulen finden Sie hier:
Release-Verlauf von Modulen und Cmdlets.

Schnelleinstieg - PowerShell Tutorial für Einsteiger und Profis.

PowerShell 7 wird für folgende Betriebssysteme angeboten:

  • Windows 7, 8.1 und 10
  • Windows Server 2008 R2, 2012, 2012 R2, 2016 und 2019
  • macOS 10.13+
  • Red Hat Enterprise Linux (RHEL) / CentOS 7+
  • Fedora 29+
  • Debian 9+
  • Ubuntu 16.04+
  • openSUSE 15+
  • Alpine Linux 3.8+

Nach der Installation von PowerShell 7 finden Sie den neuen Kommandozeileninterpreter unter:
& 'C:\Program Files\PowerShell\7\PwSh.exe'

TIPP - Denken Sie auch daran, nach der Installation von PowerShell 7 Ihre Module und Hilfe-Dateien zu aktualisieren.

# TODO Module aktualisieren:
Update-Module -Name '*' -Scope 'AllUsers' -AcceptLicense -Force
Update-Module -Name '*' -Scope 'CurrentUser' -AcceptLicense -Force

# TODO Hilfe aktualisieren:
Update-Help -Name '*' -UICulture 'en-US' -Scope 'AllUsers' -Force

TIPP: Migration - PowerShell 7 funktioniert parallel mit Windows PowerShell, sodass Sie Editionen vor der Bereitstellung problemlos testen und vergleichen können. Was es trotzdem zu Beachten gibt finden Sie im Artikel: Migrieren von Windows PowerShell 5.1 zu PowerShell 7.

1. Experimentelle Funktionen

Die Unterstützung für experimentelle Funktionen in PowerShell 7 bietet einen Mechanismus, mit dem experimentelle Funktionen mit vorhandenen stabilen Funktionen koexistieren können (s. about_Experimental_Features).

# ? Funktionen die sich noch Experimentierstatus befinden ein- / ausschalten:
Get-ExperimentalFeature | Enable-ExperimentalFeature
Get-ExperimentalFeature | Disable-ExperimentalFeature

Get-ExperimentalFeature

Zum Beispiel Command-Vorschläge bei nicht gefunden Schlüsselwörter anzeigen (Command not found Suggestion):

# READ Get-Help -Name 'about_Experimental_Feature' -ShowWindow
Enable-ExperimentalFeature -Name 'PSCommandNotFoundSuggestion'

Jetzt schreiben Sie in der PowerShell-Console nur get und lassen sich anschließend mit CTRL+SPACE die Autovervollständigung anzeigen.

TIPP - Experimentelle Funktionen können auch in eigene Module implementiert werden.

Allgemeine Änderungen in PowerShell 7

  • Beim starten des PowerShell-7-Host informiert dieser über das Vorhandensein von Updates:
Get-Help -Name "about_Update_Notifications" -ShowWindow

& PwSh.exe
  • Neue Module-Installationsorte:
$env:PSModulePath -split ";"
  • Windows-PowerShell-Module stehen durch den "Windows Compatibility Wrapper" auch in PowerShell 7 zur Verfügungen. Windows PowerShell 5.1 ist zusätzlich nötig. Wenn das Module-Manifest nicht angibt ob dass Modul mit Core kompatibel ist, wird das Modul in einen Windows PowerShell-Prozess geladen und mittels Remoting in die aktuell PowerShell 7-Sitzung gespiegelt:
# Beschreibt die Windows PowerShell-Kompatibilitätsfunktion für PowerShell 7:
Get-Help -Name "about_Windows_PowerShell_Compatibility" -ShowWindow

Get-Module -ListAvailable -SkipEditionCheck

Import-Module -Name "Microsoft.PowerShell.Archive" -UseWindowsPowerShell

Install-Module -Name "WindowsCompatibility" -Scope "CurrentUser" -AllowClobber -SkipPublisherCheck -Force

Get-Command -Module "WindowsCompatibility"

Get-WinModule -Name "*"

Import-WinModule -Name "Microsoft.PowerShell.LocalAccounts"

Get-LocalUser
  • Ein neues PS-Laufwerk um benutzerbezogene temporäre Dateien abzulegen:
Get-PSDrive -Name "Temp"
Get-ChildItem -Path "Temp:\"
  • Invoke-DscResource arbeit jetzt OS-übergreifende (experimental):
Get-ExperimentalFeature -Name "PSDesiredStateConfiguration.InvokeDscResource" | Enable-ExperimentalFeature

PowerShell Remoting-Zugriff über SSH.

Write-Progress fortschritts-Balken wird nun in Visual Studio Code angezeigt:

1..100 | ForEach-Object -Process { Write-Progress -Activity "Test-Fortschritt" -PercentComplete $_ ; Start-Sleep -Milliseconds 20 }

Neue und geänderte Cmdlets

Clear-RecycleBin - das neue Cmdlet leert den Papierkorb:

Clear-RecycleBin -Force

Get-Error - für die Fehler-Analyse/-Auswertung liefert das neue Cmdlet wichtige Informationen:

# * Fehler provozieren!
Get-Process -FileVersionInfo

# Der letzte Fehler:
Get-Error

# Die letzten 2 Fehler:
Get-Error -Newest 2

# oder so:
Get-Process -FileVersionInfo -ErrorAction "SilentlyContinue" -ErrorVariable "gpErrors"
$gpErrors | Get-Error

Out-GridView - ein neues Module (Microsoft.PowerShell.GraphicalTools, Version 0.2.0) für OS-Übergreifende GUI's (Out-GridView, Show-Command, Get-Help -ShowWindow):

Install-Module -Name "Microsoft.PowerShell.GraphicalTools" -Scope "CurrentUser" -AllowClobber -SkipPublisherCheck -AllowPrerelease -AcceptLicense -Force

Remove-Alias -Name "ogv" -Force

Import-Module -Name "Microsoft.PowerShell.GraphicalTools" -Force

Get-Command -Module "Microsoft.PowerShell.GraphicalTools"

Get-Process | Out-GridView
Show-Command -Name "Update-List" -NoCommonParameter -ErrorPopup
Get-Help -Name "Update-List" -ShowWindow

Test-Json - das neue Cmdlet bietet eine JSON-Schema-Validierung:

$schema = @'
{
  "definitions": {},
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "http://example.com/root.json",
  "type": "object",
  "title": "The Root Schema",
  "required": [
    "name",
    "age"
  ],
  "properties": {
    "name": {
      "$id": "#/properties/name",
      "type": "string",
      "title": "The Name Schema",
      "default": "",
      "examples": [
        "Ashley"
      ],
      "pattern": "^(.*)$"
    },
    "age": {
      "$id": "#/properties/age",
      "type": "integer",
      "title": "The Age Schema",
      "default": 0,
      "examples": [
        25
      ]
    }
  }
}
'@
"{'name': 'Ashley', 'age': '25'}" | Test-Json -Schema $schema

ForEach-Object - dieses Cmdlet wurde um eine parallele Verarbeitung erweitert:

Get-Help -Name "ForEach-Object" -ShowWindow

# ! Langsam !
1..8 | ForEach-Object -Process { "Verarbeite Schritt $_" | Write-Warning ; Start-Sleep -Seconds 1 }

# ? Schnell !
1..8 | ForEach-Object -Parallel { "Verarbeite Schritt $_" | Write-Warning ; Start-Sleep -Seconds 1 } -ThrottleLimit 4

PowerShell 7 unterstützt jetzt die Markdown-Auszeichnungssprache. Markdown ist eine vereinfachte Auszeichnungssprache. Ein Ziel von Markdown ist, dass schon die Ausgangsform ohne weitere Konvertierung leicht lesbar ist:

Get-Command -Noun 'Markdown', 'MarkdownOption' -Module 'Microsoft.PowerShell.Utility'

$md = @'
# Überschrift 1

## Überschrift 2

Markdown ist eine vereinfachte **Auszeichnungssprache**. Ein Ziel von Markdown ist, dass schon die *Ausgangsform* ohne weitere Konvertierung **leicht lesbar** ist.

- [ ] Aufgabe 1
- [X] Aufgabe 2
- [ ] Aufgabe 3
'@
$md | ConvertFrom-Markdown -AsVT100EncodedString | Select-Object -ExpandProperty 'VT100EncodedString'
$md | ConvertFrom-Markdown  | Select-Object -ExpandProperty 'Html'
$md | ConvertFrom-Markdown | Show-Markdown -UseBrowser
Get-MarkdownOption

Where-Object - das Cmdlet wurde um einen -Not Switch-Parameter erweitert:

Get-Service | Where-Object -Not -Property "DependentServices"
  • Format-Hex - für die hexadezimale Darstellung von unterschiedlichen Pipeline-Objekten wurde das Cmdlet verbessert:
123, "Hallo Würzburg!", (Get-Item "C:\Windows\win.ini") | Format-Hex -Encoding unicode
  • Select-String - dieses Cmdlet wurde verbessert, um die Fundstellen visuelle Hervorzuheben:
Get-ChildItem 'C:\Windows\Logs\DISM\dism.log' | Select-String 'Error' | Select-Object -First 10

Der Switch-Parameter -NoEmphasis deaktiviert die Hervorhebung.

Update-List - das neue Cmdlet aktualisiert Listen-Einträge (Add / Remove) von Listen-Objekt-Eigenschaften:

class OsDetails {
    [System.Collections.ArrayList]$ProcessItems
    OsDetails() {
        $this.ProcessItems = New-Object -TypeName "System.Collections.ArrayList"
    }
}

$osd = New-Object -TypeName "OsDetails"
$osd.ProcessItems.AddRange((Get-Process | Select-Object -First 3))
$osd.ProcessItems

$notepad = Start-Process "notepad" -PassThru

$osd | Update-List -Property "ProcessItems" -Add $notepad | Out-Null
$osd.ProcessItems

$osd | Update-List -Property "ProcessItems" -Remove $notepad | Out-Null
$osd.ProcessItems

PowerShell 7 Variablen

  • $ErrorView - Die neue Variable bestimmen die Standard-Fehlerausgabe-Menge:
Get-help -Name "ABOUT_PREFERENCE_VARIABLES" -ShowWindow

$ErrorView

# ? Umfassende Fehler-Ausgabe:
$ErrorView = [System.Management.Automation.ErrorView]::NormalView
Get-Item -Path "C:\GibtEsNicht" # * Fehler provozieren!

# ? Fehler-Ausgabe enthält nur eine Kurzfassung (DEFAULT):
$ErrorView = [System.Management.Automation.ErrorView]::ConciseView
Get-Item -Path "C:\GibtEsNicht" # * Fehler provozieren!

# ? Fehler-Ausgabe enthält nur die Kategorie:
$ErrorView = [System.Management.Automation.ErrorView]::CategoryView
Get-Item -Path "C:\GibtEsNicht" # * Fehler provozieren!
  • $ErrorActionPreference - Wird der Variable bzw. dem Parameter -ErrorAction der neue Enum-Wert Break zugewiesen, hält die Ausführung an und es wird in den DEBUG-Modus gewechselt:
$ErrorActionPreference = [System.Management.Automation.ActionPreference]::Break
Get-Process -FileVersionInfo -ErrorAction "Break"

Neue und geänderte Operatoren

Die neuen Operatoren der PowerShell 7
Die neuen Operatoren der PowerShell 7

-split - dieser Operator wurde um die Möglichkeit erweitert, eine Anzahl an Elemente VON RECHTS zu erhalten:

# * ALT: Splittet nur 3 Elemente von Links:
"a b c d e" -split " ",  3

#   NEU: Splittet nur 3 Elemente von Rechts:
"a b c d e" -split " ", -3

a ? b : c - Ternary-Operator - ein dreiteiliger Inline-If-Operator wurde hinzugefügt:

# WENN                     ? DANN                                            : SONST
  ($PSCulture -ieq 'de-DE' ? 'Die PS-Sprache steht auf deutsch-Deutschland.' : "Die PS-Sprache steht auf $PSCulture.") | Write-Warning

&& und || - Pipeline chain operators - Diese Pipeline-Verkettung-Operatoren wurden hinzugefügt:

1/0.1 && "Ich werde ausgeführt wenn die vorherige Anweisung ERFOLGREICH war." | Write-Warning

1/0   || "Ich werde ausgeführt wenn die vorherige Anweisung ERFOLGLOS war."   | Write-Warning

Beschreibt die Verkettung von Pipelines mit && und || Operatoren:
Get-Help -Name "about_Pipeline_Chain_Operators" -ShowWindow

Ein tiefen Einblick in in die Pipeline-Verarbeitung vermittelt der Artikel:
PowerShell Pipeline Sinn & Nutzen.

?? - Null-coalescing operator - NULL-Sammel-Operator wurde hinzugefügt. In Abhängigkeit von einem NULL-Wert soll eine Fallunterscheidung statt finden, was bist dato wie folgt implementiert werden musste:

$a = $null # bzw. $a = 'Dies ist der Inhalt von $a'
if($null -ne $a) {
    $a | Write-Warning
}
else {
    '$a ist ohne Inhalt!' | Write-Warning
}

Dieses Konstrukt lässt sich nun vereinfacht wie folgt implementieren:

$a = $null # bzw. $a = 'Dies ist der Inhalt von $a'
# Sollte $a gleich NULL sein, wird anstelle dessen der String zurückgegeben:
$a ?? '$a ist ohne Inhalt!' | Write-Warning

Die NULL-Sammeloperatoren sind rechtsassoziativ d.h. $a ?? $b ?? $c wird wie folgt abgearbeitet:

$a = $null
$b = $null
$c = 3
$a ?? $b ?? $c

# identisch mit:
$a ?? ($b ?? $c)

??=, ?. - Null-conditional operators - dieser Operatoren wurden hinzugefügt. Sollte eine Variable $NULL enthalten, soll dieser einen Default-Wert zugewiesen werden, was bist dato wie folgt implementiert werden musste:

$a = $null # bzw. $a = 123
if($null -eq $a) {
    $a = 'Diesen String als Default-Wert setzen, wenn $a gleich NULL ist.'
}
$a | Write-Warning

Dieses Konstrukt lässt sich nun vereinfacht wie folgt implementieren:

Get-ExperimentalFeature -Name "PSNullConditionalOperators" | Enable-ExperimentalFeature

$a = $null # bzw. $a = 123
$a ??= 'Diesen String als Default-Wert setzen, wenn $a gleich NULL ist.'
$a | Write-Warning

Oder so:

$t = Get-Process -Name "SvcHost" | Select-Object -First 1
$t.ToString() # Geht!

$t = Get-Process -Name "GibtEsNicht" | Select-Object -First 1
# * ALT: Problematisch, da eine Exception ausgelöst wird ($t = NULL)
$t.ToString()

# NEU: Lösung: Löst keinen Exception aus, wenn $t gleich NULL ist
${t}?.ToString()

Änderungen im Handling & Dokumentation

  • Anzeige von Methoden-Signaturen von COM-Objekten
$excel = New-Object -ComObject "Excel.Application"

# TODO Methode ohne Klammern d.h. unvollständig ausführen um so weitere Details zu erhalten:
$excel.Save
  • Autovervollständigung

Es gibt eine Autovervollständigung (CTRL + SPACE) für das Zuweisen von Aufzählungs-Werten (Enum) zu Variablen.

$ErrorActionPreference = 'Stop'
# ?                      ^ An dieser Stelle in der Console CTRL+SPACE drücken.

Migrieren von Windows PowerShell 5.1 zu PowerShell 7

PowerShell 7 wurde für Cloud-, lokale und Hybridumgebungen entwickelt und bietet Verbesserungen sowie neue Features:

  • Parallele Installation und Ausführung mit Windows PowerShell
  • Verbesserte Kompatibilität mit vorhandenen Windows PowerShell-Modulen
  • Neue Sprachfeatures wie ternäre Operatoren und ForEach-Object -Parallel
  • Verbesserte Leistung
  • SSH-basiertes Remoting
  • Plattformübergreifende Interoperabilität
  • Unterstützung für Docker-Container

Die folgenden Windows-Betriebssysteme unterstützen PowerShell 7:

  • Windows 8.1 und 10
  • Windows Server 2012, 2012 R2, 2016, und 2019

Installieren von PowerShell 7

PowerShell 7 Download finden Sie auf Github.

Zum Bereitstellen des MSI-Pakets sind Administratorberechtigungen erforderlich. Das ZIP-Paket kann von beliebigen Benutzern bereitgestellt werden. Das ZIP-Paket ist die einfachste Möglichkeit, PowerShell 7 zum Testen zu installieren, bevor eine vollständige Installation erfolgt.

Trennung von Installationspfad und Namen der ausführbaren Datei

PowerShell 7 wird in ein neues Verzeichnis installiert und ermöglicht die parallele Ausführung mit Windows PowerShell 5.1.

Installationsspeicherorte nach Version:

  • Windows PowerShell 5.1 $env:WINDIR\System32\WindowsPowerShell\v1.0
  • PowerShell Core 6.x $env:ProgramFiles\PowerShell\6
  • PowerShell 7 $env:ProgramFiles\PowerShell\7

Der neue Speicherort wird Ihrer Umgebungsvariablen PATH hinzugefügt, sodass Sie sowohl Windows PowerShell 5.1 als auch PowerShell 7 ausführen können.

ACHTUNG - Wenn Sie von PowerShell Core 6.x zu PowerShell 7 migrieren, wird PowerShell 6 entfernt und PATH ersetzt.

In Windows PowerShell heißt die ausführbare Datei powershell.exe. Ab Version 6 heißt die ausführbare Datei pwsh.exe.

Trennung von PSModulePath

Standardmäßig werden Module in Windows PowerShell und PowerShell 7 an verschiedenen Speicherorten gespeichert. PowerShell 7 kombiniert diese Speicherorte in der Umgebungsvariablen $Env:PSModulePath. Wenn Sie ein Modul über dessen Name importieren, prüft PowerShell den von $Env:PSModulePath angegebenen Speicherort. Dies ermöglicht PowerShell 7 das Laden von Core- und Desktop-Modulen.

Installationsumfang Windows PowerShell 5.1 PowerShell 7.0
PowerShell-Module $env:WINDIR\system32\WindowsPowerShell\v1.0\Modules $PSHOME\Modules
Vom Benutzer installierter Geltungsbereich AllUsers $env:ProgramFiles\WindowsPowerShell\Modules $env:ProgramFiles\PowerShell\Modules
Vom Benutzer installierter Geltungsbereich CurrentUser $HOME\Documents\WindowsPowerShell\Modules $HOME\Documents\PowerShell\Modules
# Siehe auch folgendes Ergebnis in Windows PowerShell 5.1 bzw. PowerShell 7
$Env:PSModulePath -split ';'

ACHTUNG - Beachten Sie, dass PowerShell 7 die Windows PowerShell-Pfade und die PowerShell 7-Pfade enthält, um das automatische Laden von Modulen zu ermöglichen.

Getrennte Profile

Ein PowerShell-Profil ist ein Skript, das beim Start von PowerShell ausgeführt wird. Dieses Skript passt Ihre Umgebung durch Hinzufügen von Befehlen, Aliasen, Funktionen, Variablen, Modulen und PowerShell-Laufwerken an. Das Profilskript stellt diese Anpassungen in jeder Sitzung zur Verfügung, ohne dass sie manuell neu erstellt werden müssen.

Der Pfad zum Speicherort des Profils hat sich in PowerShell 7 geändert.

  • In Windows PowerShell 5.1 lautet der Speicherort des Profils $HOME\Documents\WindowsPowerShell.
  • In PowerShell 7 lautet der Speicherort des Profils $HOME\Documents\PowerShell.
$profile | Select-Object -Property *Host* | Format-List

Kompatibilität von PowerShell 7 mit Windows PowerShell 5.1-Modulen

Die meisten Module, die Sie in Windows PowerShell 5.1 verwenden, funktionieren bereits mit PowerShell 7, einschließlich Azure PowerShell und Active Directory. Microsoft arbeiten weiterhin mit anderen Teams zusammen, um native PowerShell 7-Unterstützung für weitere Module wie Microsoft Graph, Office 365 und andere hinzuzufügen.

Die aktuelle Liste der unterstützten Module finden Sie unter Kompatibilität von PowerShell 7-Modulen.

Unter Windows besitzt das Cmdlet Import-Module einen neuen Schalter -UseWindowsPowerShell, um Benutzern mit inkompatiblen Modulen den Umstieg auf PowerShell 7 zu erleichtern. Weitere Informationen zu dieser Funktionalität finden Sie unter about_Windows_PowerShell_Compatibility.

PowerShell-Remoting (WS-Management)

Bis Windows PowerShell 5.1 wird für die Verbindungsaushandlung und den Datentransport das WSMAN-Protokoll (WS-Management) verwendet. WinRM (Windows Remote Management) verwendet das WSMAN-Protokoll. Wenn WinRM aktiviert wurde, verwendet PowerShell 7 für Remote-Verbindungen den vorhandenen Windows PowerShell 5.1-Endpunkt namens Microsoft.PowerShell. Um PowerShell 7 so zu aktualisieren, dass es seinen eigenen Endpunkt einbezieht, führen Sie das Cmdlet Enable-PSRemoting aus. Informationen zum Herstellen einer Verbindung mit bestimmten Endpunkten finden Sie unter WS-Management-Remoting in PowerShell Core.

PowerShell-Remoting (SSH-basiert)

SSH-basiertes Remoting wurde in PowerShell 6.x hinzugefügt, um andere Betriebssysteme zu unterstützen, die keine nativen Windows-Komponenten wie WinRM verwenden können. SSH-Remoting erstellt einen PowerShell-Hostprozess als SSH-Subsystem auf dem Zielcomputer. Einzelheiten und Beispiele zum Einrichten von SSH-basiertem Remoting finden Sie unter Windows und Linux finden Sie unter PowerShell-Remoting über SSH.
Hinweis

TIPP - Der PowerShell-Katalog (PSGallery) enthält ein Modul und ein Cmdlet, mit dem SSH-basiertes Remoting automatisch konfiguriert werden kann. Installieren Sie das Modul Microsoft.PowerShell.RemotingTools aus der PowerShell Gallery und führen im Anschluß das Cmdlet Enable-SSH aus.

Die Cmdlets New-PSSession, Enter-PSSession und Invoke-Command weisen neue Parametersätze zur Unterstützung von SSH-Verbindungen auf.

Enter-PSSession -HostName p.lustig@ServerDC01

Sie können die SSH-Schlüsselauthentifizierung auch mithilfe einer privaten Schlüsseldatei und des Parameters KeyFilePath einrichten. Weitere Informationen finden Sie unter OpenSSH-Schlüsselverwaltung.

Unterstützung von Gruppenrichtlinien

PowerShell enthält Gruppenrichtlinieneinstellungen, um einheitliche Optionswerte für Server in einer Unternehmensumgebung festzulegen:

  • Konfiguration der Konsolensitzung - Legt einen Konfigurationsendpunkt fest, an dem PowerShell ausgeführt wird.
  • Modulprotokollierung aktivieren Legt die Eigenschaft LogPipelineExecutionDetails von Modulen fest.
  • Protokollierung von PowerShell-Skriptblöcken - Aktiviert die ausführliche Protokollierung aller PowerShell-Skripts.
  • Skriptausführung aktivieren - Legt die PowerShell-Ausführungsrichtlinie fest.
  • PowerShell-Aufzeichnung aktivieren - ermöglicht die Erfassung der Ein- und Ausgabe von PowerShell-Befehlen in textbasierten Transkripten.
  • Standardquellpfad für "Update-Help" festlegen - Legt die Quelle für die aktualisierbare Hilfe auf ein Verzeichnis und nicht auf das Internet fest.

Weitere Informationen finden Sie unter about_Group_Policy_Settings.

PowerShell 7 bietet Gruppenrichtlinienvorlagen und in $PSHOME ein Installationsskript. Gruppenrichtlinientools verwenden administrative Vorlagendateien (.admx, .adml), um Richtlinieneinstellungen auf der Benutzeroberfläche aufzufüllen. Dies ermöglicht Administratoren die Verwaltung registrierungsbasierter Richtlinieneinstellungen. Das Skript InstallPSCorePolicyDefinitions.ps1 installiert administrative PowerShell Core-Vorlagen auf dem lokalen Computer:

Get-ChildItem -Path $PSHOME -Filter *Core*Policy*

Getrennte Ereignisprotokolle

Windows PowerShell und PowerShell 7 protokollieren Ereignisse in getrennten Ereignisprotokollen. Verwenden Sie den folgenden Befehl, um eine Liste der PowerShell-Protokolle abzurufen.

Get-WinEvent -ListLog *PowerShell*

Weitere Informationen finden Sie unter about_Logging_Windows.

Verbesserte Bearbeitungsumgebung in Visual Studio Code

Visual Studio Code (VS Code) mit der PowerShell-Erweiterung ist die unterstützte Skriptumgebung für PowerShell 7. Die Windows PowerShell Integrated Scripting Environment (ISE) unterstützt nur Windows PowerShell.

Die aktualisierte PowerShell-Erweiterung umfasst Folgendes:

  • Neuen ISE-Kompatibilitätsmodus
  • PSReadLine in der integrierten Konsole, einschließlich Syntax-Hervorhebung, mehrzeilige Bearbeitung und Rückwärtssuche
  • Stabilitäts- und Leistungsverbesserungen
  • Neue CodeLens-Integration
  • Verbesserte automatische Pfadvervollständigung

Um den Umstieg auf Visual Studio Code zu erleichtern, verwenden Sie in der Befehlspalette (F1) die Funktion PowerShell: ISE-Modus aktivieren. Über diese Option wird auf ein Layout im ISE-Stil umgestellt. Das Layout im ISE-Stil bietet Ihnen alle neuen Features und Funktionen von PowerShell in einer vertrauten Benutzerumgebung.

HINWEIS - Microsoft geplant nicht die ISE mit neuen Features zu aktualisieren. Die ISE ist jetzt in den neuesten Versionen von Windows 10 und Windows Server ein vom Benutzer deinstallierbares Feature. Es ist nicht geplant, die ISE dauerhaft zu entfernen. Das PowerShell-Team und seine Partner konzentrieren sich auf die Verbesserung der Skripterstellung in der PowerShell-Erweiterung für Visual Studio Code.

Nachschlage-Lektüren

  • Wichtige neue about_*-Seiten lesen:
# PSReadLine bietet eine verbesserte Bearbeitungsfunktion für Befehlszeilen in der PowerShell-Konsole.
Get-Help -Name "about_PSReadLine" -ShowWindow

# Multiplikatorsuffixe für Ganzzahl und Real
Get-Help -Name "about_Numeric_Literals" -ShowWindow

# Konfigurationsdateien für PowerShell, die Registrierungs-Konfiguration ersetzen.
Get-Help -Name "about_PowerShell_Config" -ShowWindow

# Erläutert die Verwendung des PwSh-Befehlszeilentools.
Get-Help -Name "about_PwSh" -ShowWindow

# Beschreibt die in PowerShell gesammelte Telemetrie und das Deaktivieren.
Get-Help -Name "about_Telemetry" -ShowWindow
  • Für Einsteiger:
# Listet die Cmdlets auf, die für die Verwendung mit PowerShell-Anbietern vorgesehen sind.
Get-Help -Name "about_Core_Commands" -ShowWindow

# Beschreibt die Schlüsselwörter in der PowerShell-Skriptsprache.
Get-Help -Name "about_Language_Keywords" -ShowWindow

# Beschreibt das Bearbeiten von Befehlen an der PowerShell-Eingabeaufforderung.
Get-Help -Name "about_Line_Editing" -ShowWindow

# Listet die PowerShell-Operatoren in der Rangfolge auf.
Get-Help -Name "about_Operator_Precedence" -ShowWindow

# Beschreibt, wie PowerShell Befehle analysiert.
Get-Help -Name "about_Parsing" -ShowWindow

# Beschreibt die vollständigen und relativen Pfadnamenformate in PowerShell.
Get-Help -Name "about_Path_Syntax" -ShowWindow

# Beschreibt Regeln für die Verwendung von einfachen und doppelten Anführungszeichen in PowerShell.
Get-Help -Name "about_Quoting_Rules" -ShowWindow

# Listet die reservierten Wörter auf, die nicht als Bezeichner verwendet werden können.
Get-Help -Name "about_Reserved_Words" -ShowWindow
  • Thema OOP:
# Beschreibt das Schlüsselwort Hidden, mit dem Klassenmitglieder vor den Standardergebnissen für Get-Member ausgeblendet werden.
Get-Help -Name "about_Hidden" -ShowWindow
  • Thema Unit-Testing-Framework (Pester):
# Pester ist ein Test-Framework für Windows PowerShell.
Get-Help -Name "about_Pester" -ShowWindow

# Bietet Assertion Convenience-Methoden zum Vergleichen von Objekten und zum Auslösen von Testfehlern, wenn die Testerwartungen fehlschlagen.
Get-Help -Name "about_Should" -ShowWindow

# Beschreibt die Befehle BeforeEach und AfterEach, mit denen eine Reihe von Befehlen ausgeführt wird, die Sie vor oder nach jedem It-Block angeben.
Get-Help -Name "about_BeforeEach_AfterEach" -ShowWindow

# Pester bietet eine Reihe von Mock-Funktionen, mit denen sich Abhängigkeiten leicht vortäuschen und das Verhalten überprüfen lassen.
Get-Help -Name "about_Mocking" -ShowWindow

# Ein PSDrive für Datei-Aktivitäten, das auf den Umfang eines einzelnen Beschreibungs- oder Kontextblocks beschränkt ist.
Get-Help -Name "about_TestDrive" -ShowWindow

Bitte bewerten Sie diesen Artikel


Dieser Beitrag hat einen Kommentar

Kommentare sind geschlossen.