Neuigkeiten in PowerShell Core 6.1What's New in PowerShell Core 6.1

Im Folgenden finden Sie eine Auswahl der wichtigsten Funktionen und Änderungen, die in PowerShell Core 6.1 eingeführt wurden.Below is a selection of some of the major new features and changes that have been introduced in PowerShell Core 6.1.

Außerdem wurden viele Fehler behoben und unzählige Verbesserungen vorgenommen, die PowerShell schneller und stabiler machen, aber vielleicht weniger aufregend klingen.There's also tons of "boring stuff" that make PowerShell faster and more stable (plus lots and lots of bug fixes)! Eine vollständige Liste der Änderungen finden Sie unter Changelog (Änderungsprotokoll) auf GitHub.For a full list of changes, check out our changelog on GitHub.

Ein großer Dank geht an alle Mitwirkende aus der Community, die dieses Release überhaupt möglich gemacht haben, und von denen weiter unten nur eine kleine Auswahl genannt wird.And while we call out some names below, thank you to all of the community contributors that made this release possible.

.NET Core 2.1.NET Core 2.1

PowerShell Core 6.1 wurde nach der Veröffentlichung im Mai zu .NET Core 2.1 verschoben, wodurch sich u.a. folgende Verbesserungen für PowerShell ergeben:PowerShell Core 6.1 moved to .NET Core 2.1 after it was released in May, resulting in a number of improvements to PowerShell, including:

Windows Compatibility Pack für .NET CoreWindows Compatibility Pack for .NET Core

Im Lieferumfang war unter Windows das Windows Compatibility Pack für .NET Core enthalten, das aus verschiedenen Assemblys besteht, mit denen .NET Core unter Windows einige entfernte APIs wieder hinzugefügt werden.On Windows, the .NET team shipped the Windows Compatibility Pack for .NET Core, a set of assemblies that add a number of removed APIs back to .NET Core on Windows.

Nun wurde das Windows Compatibility Pack dem Release von PowerShell Core 6.1 hinzugefügt, damit diese APIs für alle Module oder Skripts, die sie verwenden, auch verfügbar sind.We've added the Windows Compatibility Pack to PowerShell Core 6.1 release so that any modules or scripts that use these APIs can rely on them being available.

Durch das Windows Compatibility Pack kann PowerShell Core mehr als 1.900 Cmdlets verwenden, die im Windows Update vom 10. Oktober 2018 und in Windows Server 2019 enthalten sind.The Windows Compatibility Pack enables PowerShell Core to use more than 1900 cmdlets that ship with Windows 10 October 2018 Update and Windows Server 2019.

Unterstützung für AnwendungszulassungslistenSupport for Application allow lists

PowerShell Core 6.1 verfügt über dieselbe Unterstützung für Anwendungszulassungslisten von AppLocker und Device Guard wie Windows PowerShell 5.1.PowerShell Core 6.1 has parity with Windows PowerShell 5.1 supporting AppLocker and Device Guard application allow lists. Mit Anwendungszulassungslisten können Sie detailliert steuern, welche Binärdateien ausgeführt werden dürfen, wenn PowerShell im eingeschränkten Sprachmodus verwendet wird.Application allow lists allow granular control of what binaries are allowed to be executed used with PowerShell Constrained Language mode.

LeistungsverbesserungenPerformance improvements

PowerShell Core 6.0 enthielt bereits einige bedeutende Leistungsverbesserungen.PowerShell Core 6.0 made some significant performance improvements. PowerShell Core 6.1 erhöht nun die Geschwindigkeit bestimmter Vorgänge noch weiter.PowerShell Core 6.1 continues to improve the speed of certain operations.

So wurde beispielsweise die Geschwindigkeit von Group-Object um 66 % gesteigert:For example, Group-Object has been sped up by 66%:

Measure-Command { 1..100000 | % {Get-Random -Minimum 1 -Maximum 10000} | Group-Object }
MetrikMetric Windows PowerShell 5.1Windows PowerShell 5.1 PowerShell Core 6.0PowerShell Core 6.0 PowerShell Core 6.1PowerShell Core 6.1
Zeit (in Sek.)Time (sec) 25,17825.178 19,65319.653 6,6416.641
Beschleunigung (in %)Speed-up (%) N/A 21,9 %21.9% 66,2 %66.2%

Auf ähnliche Weise wurden auch Sortierszenarios wie etwa das folgende um mehr als 15 % verbessert:Similarly, sorting scenarios like this one have improved by more than 15%:

Measure-Command { 1..100000 | % {Get-Random -Minimum 1 -Maximum 10000} | Sort-Object }
MetrikMetric Windows PowerShell 5.1Windows PowerShell 5.1 PowerShell Core 6.0PowerShell Core 6.0 PowerShell Core 6.1PowerShell Core 6.1
Zeit (in Sek.)Time (sec) 12,17012.170 8,4938.493 7,087.08
Beschleunigung (in %)Speed-up (%) N/A 30,2 %30.2% 16,6 %16.6%

Auch Import-Csv wurde nach Regression durch Windows PowerShell deutlich schneller.Import-Csv has also been sped up significantly after a regression from Windows PowerShell. Im folgenden Beispiel wird eine CSV-Testdatei mit 26.616 Zeilen und sechs Spalten verwendet:The following example uses a test CSV with 26,616 rows and six columns:

Measure-Command {$a = Import-Csv foo.csv}
MetrikMetric Windows PowerShell 5.1Windows PowerShell 5.1 PowerShell Core 6.0PowerShell Core 6.0 PowerShell Core 6.1PowerShell Core 6.1
Zeit (in Sek.)Time (sec) 0,4410.441 1,0691.069 0,2680.268
Beschleunigung (in %)Speed-up (%) N/A –142,4 %-142.4% 74,9 % (39,2 % im Vergleich zu WPS)74.9% (39.2% from WPS)

Letztendlich wurde die Konvertierung von JSON in PSObject um mehr als 50 % im Vergleich zu Windows PowerShell beschleunigt.Lastly, conversion from JSON into PSObject has been sped up by more than 50% since Windows PowerShell. Im folgenden Beispiel wird eine JSON-Testdatei mit einer Größe von etwa 2 MB verwendet:The following example uses a ~2MB test JSON file:

Measure-Command {Get-Content .\foo.json | ConvertFrom-Json}
MetrikMetric Windows PowerShell 5.1Windows PowerShell 5.1 PowerShell Core 6.0PowerShell Core 6.0 PowerShell Core 6.1PowerShell Core 6.1
Zeit (in Sek.)Time (sec) 0,2590.259 0,5770.577 0,1250.125
Beschleunigung (in %)Speed-up (%) N/A –122,8 %-122.8% 78,3 % (51,7 % im Vergleich zu WPS)78.3% (51.7% from WPS)

Überprüfen von system32 nach kompatiblen integrierten Modulen unter WindowsCheck system32 for compatible built-in modules on Windows

Im Update 1809 für Windows 10 und im Update für Windows Server 2019 wurden eine Reihe von integrierten PowerShell-Modulen aktualisiert, um sie als mit PowerShell Core kompatibel zu kennzeichnen.In the Windows 10 1809 update and Windows Server 2019, we updated a number of built-in PowerShell modules to mark them as compatible with PowerShell Core.

Beim Starten von PowerShell Core 6.1 wird automatisch $windir\System32 als Teil der PSModulePath-Umgebungsvariable mit einbezogen.When PowerShell Core 6.1 starts up, it will automatically include $windir\System32 as part of the PSModulePath environment variable. Allerdings werden Module nur dann Get-Module und Import-Module verfügbar gemacht, wenn CompatiblePSEdition als kompatibel mit Core gekennzeichnet ist.However, it only exposes modules to Get-Module and Import-Module if its CompatiblePSEdition is marked as compatible with Core.

Get-Module -ListAvailable

Hinweis

Je nach den installierten Rollen und Funktionen werden Ihnen möglicherweise unterschiedliche verfügbare Module angezeigt.You may see different available modules depending on what roles and features are installed.

...
    Directory: C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules

ModuleType Version    Name                                PSEdition ExportedCommands
---------- -------    ----                                --------- ----------------
Manifest   2.0.1.0    Appx                                Core,Desk {Add-AppxPackage, Get-AppxPackage, Get-AppxPacka...
Manifest   1.0.0.0    BitLocker                           Core,Desk {Unlock-BitLocker, Suspend-BitLocker, Resume-Bit...
Manifest   1.0.0.0    DnsClient                           Core,Desk {Resolve-DnsName, Clear-DnsClientCache, Get-DnsC...
Manifest   1.0.0.0    HgsDiagnostics                      Core,Desk {New-HgsTraceTarget, Get-HgsTrace, Get-HgsTraceF...
Binary     2.0.0.0    Hyper-V                             Core,Desk {Add-VMAssignableDevice, Add-VMDvdDrive, Add-VMF...
Binary     1.1        Hyper-V                             Core,Desk {Add-VMDvdDrive, Add-VMFibreChannelHba, Add-VMHa...
Manifest   2.0.0.0    NetAdapter                          Core,Desk {Disable-NetAdapter, Disable-NetAdapterBinding, ...
Manifest   1.0.0.0    NetEventPacketCapture               Core,Desk {New-NetEventSession, Remove-NetEventSession, Ge...
Manifest   2.0.0.0    NetLbfo                             Core,Desk {Add-NetLbfoTeamMember, Add-NetLbfoTeamNic, Get-...
Manifest   1.0.0.0    NetNat                              Core,Desk {Get-NetNat, Get-NetNatExternalAddress, Get-NetN...
Manifest   2.0.0.0    NetQos                              Core,Desk {Get-NetQosPolicy, Set-NetQosPolicy, Remove-NetQ...
Manifest   2.0.0.0    NetSecurity                         Core,Desk {Get-DAPolicyChange, New-NetIPsecAuthProposal, N...
Manifest   1.0.0.0    NetSwitchTeam                       Core,Desk {New-NetSwitchTeam, Remove-NetSwitchTeam, Get-Ne...
Manifest   1.0.0.0    NetWNV                              Core,Desk {Get-NetVirtualizationProviderAddress, Get-NetVi...
Manifest   2.0.0.0    TrustedPlatformModule               Core,Desk {Get-Tpm, Initialize-Tpm, Clear-Tpm, Unblock-Tpm...
...

Mit dem Switch-Parameter -SkipEditionCheck können Sie dieses Verhalten so überschreiben, dass alle Module angezeigt werden.You can override this behavior to show all modules using the -SkipEditionCheck switch parameter. Außerdem wurde der Tabellenausgabe eine PSEdition-Eigenschaft hinzugefügt.We've also added a PSEdition property to the table output.

Get-Module Net* -ListAvailable -SkipEditionCheck
    Directory: C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules

ModuleType Version    Name                        PSEdition ExportedCommands
---------- -------    ----                        --------- ----------------
Manifest   2.0.0.0    NetAdapter                  Core,Desk {Disable-NetAdapter, Disable-NetAdapterBinding, ...
Manifest   1.0.0.0    NetConnection               Core,Desk {Get-NetConnectionProfile, Set-NetConnectionProf...
Manifest   1.0.0.0    NetDiagnostics              Desk      Get-NetView
Manifest   1.0.0.0    NetEventPacketCapture       Core,Desk {New-NetEventSession, Remove-NetEventSession, Ge...
Manifest   2.0.0.0    NetLbfo                     Core,Desk {Add-NetLbfoTeamMember, Add-NetLbfoTeamNic, Get-...
Manifest   1.0.0.0    NetNat                      Core,Desk {Get-NetNat, Get-NetNatExternalAddress, Get-NetN...
Manifest   2.0.0.0    NetQos                      Core,Desk {Get-NetQosPolicy, Set-NetQosPolicy, Remove-NetQ...
Manifest   2.0.0.0    NetSecurity                 Core,Desk {Get-DAPolicyChange, New-NetIPsecAuthProposal, N...
Manifest   1.0.0.0    NetSwitchTeam               Core,Desk {New-NetSwitchTeam, Remove-NetSwitchTeam, Get-Ne...
Manifest   1.0.0.0    NetTCPIP                    Core,Desk {Get-NetIPAddress, Get-NetIPInterface, Get-NetIP...
Manifest   1.0.0.0    NetWNV                      Core,Desk {Get-NetVirtualizationProviderAddress, Get-NetVi...
Manifest   1.0.0.0    NetworkConnectivityStatus   Core,Desk {Get-DAConnectionStatus, Get-NCSIPolicyConfigura...
Manifest   1.0.0.0    NetworkSwitchManager        Core,Desk {Disable-NetworkSwitchEthernetPort, Enable-Netwo...
Manifest   1.0.0.0    NetworkTransition           Core,Desk {Add-NetIPHttpsCertBinding, Disable-NetDnsTransi...

Weitere Informationen zu diesem Verhalten finden Sie unter PowerShell RFC 0025.For more information about this behavior, check out PowerShell RFC0025.

Markdown-Cmdlets und -RenderingMarkdown cmdlets and rendering

Markdown ist eine Standardsprache zum Erstellen von lesbaren Nur-Text-Dokumenten mit grundlegender Formatierung, die in HTML gerendert werden kann.Markdown is a standard for creating readable plaintext documents with basic formatting that can be rendered into HTML.

PowerShell Core 6.1 wurden einige Cmdlets hinzugefügt, mit denen Sie Markdowndokumente in der Konsole konvertieren und rendern können, einschließlich:We've added some cmdlets in 6.1 that allow you to convert and render Markdown documents in the console, including:

  • ConvertFrom-Markdown
  • Get-MarkdownOption
  • Set-MarkdownOption
  • Show-Markdown

Mit Show-Markdown wird beispielsweise eine Markdowndatei in der Konsole gerendert:For example, Show-Markdown renders a Markdown file in the console:

Beispiel „Show-Markdown“

Weitere Informationen zur Funktionsweise dieser Cmdlets finden Sie unter dieser RFC.For more information about how these cmdlets work, check out this RFC.

Experimentelle FeatureflagsExperimental feature flags

Unterstützung für experimentelle Features wurde aktiviert.We enabled support for Experimental Features. Auf diese Weise können PowerShell-Entwickler neue Funktionen bereitstellen und Feedback erhalten, bevor der Entwurf abgeschlossen ist.This allows PowerShell developers to deliver new features and get feedback before the design is complete. Auf diese Weise vermeiden wir, dass wir bei der Weiterentwicklung des Entwurfs Breaking Changes vornehmen.This way we avoid making breaking changes as the design evolves.

Verwenden Sie Get-ExperimentalFeature, um eine Liste der verfügbaren experimentellen Features abzurufen.Use Get-ExperimentalFeature to get a list of available experimental features. Sie können diese Features mit Enable-ExperimentalFeature und Disable-ExperimentalFeature aktivieren oder deaktivieren.You can enable or disable these features with Enable-ExperimentalFeature and Disable-ExperimentalFeature.

Weitere Informationen zu dieser Funktion finden Sie unter PowerShell RFC 0029.You can learn more about this feature in PowerShell RFC0029.

Verbesserungen an Web-CmdletsWeb cmdlet improvements

Durch die Mithilfe von @markekraus konnte eine ganze Reihe von Verbesserungen an den Web-Cmdlets Invoke-WebRequestThanks to @markekraus, a whole slew of improvements have been made to our web cmdlets: Invoke-WebRequest und Invoke-RestMethod vorgenommen werden.and Invoke-RestMethod.

  • PR #6109: Standardcodierung für application-json-Antworten auf UTF-8 festgelegt.PR #6109 - default encoding set to UTF-8 for application-json responses
  • PR #6018 - -SkipHeaderValidation-Parameter zum Zulassen von Content-Type-Headern, die nicht mit den Standards kompatibel sind.PR #6018 - -SkipHeaderValidation parameter to allow Content-Type headers that aren't standards-compliant
  • PR #5972 - Form-Parameter zur Unterstützung von vereinfachter multipart/form-data-Unterstützung.PR #5972 - Form parameter to support simplified multipart/form-data support
  • PR #6338: Kompatible Verarbeitung von Beziehungsschlüsseln ohne Beachtung der Groß-/Kleinschreibung.PR #6338 - Compliant, case-insensitive handling of relation keys
  • PR #6447: Hinzufügen des -Resume-Parameters zu Web-Cmdlets.PR #6447 - Add -Resume parameter for web cmdlets

Remoting-VerbesserungenRemoting improvements

PowerShell Direct für Container verwendet zunächst PowerShell CorePowerShell Direct for Containers tries to use PowerShell Core first

PowerShell Direct ist eine Funktion von PowerShell und Hyper-V, mit der Sie ohne Netzwerkverbindung oder einem anderen Remoteverwaltungsdienst eine Verbindung zu einem virtuellen Hyper-V-Computer oder Container herstellen können.PowerShell Direct is a feature of PowerShell and Hyper-V that allows you to connect to a Hyper-V VM or Container without network connectivity or other remote management services.

Bisher wurde die Verbindung von PowerShell Direct mithilfe der integrierten Windows PowerShell-Instanz im Container hergestellt.In the past, PowerShell Direct connected using the built-in Windows PowerShell instance on the Container. Nun versucht PowerShell Direct zunächst, verfügbare pwsh.exe-Dateien der PATH-Umgebungsvariable dafür zu verwenden.Now, PowerShell Direct first attempts to connect using any available pwsh.exe on the PATH environment variable. Ist pwsh.exe nicht verfügbar, greift PowerShell Direct wieder auf powershell.exe zurück.If pwsh.exe isn't available, PowerShell Direct falls back to use powershell.exe.

Enable-PSRemoting erstellt jetzt separate Remotingendpunkte für VorschauversionenEnable-PSRemoting now creates separate remoting endpoints for preview versions

Enable-PSRemoting erstellt jetzt zwei Konfigurationen für Remotesitzungen:Enable-PSRemoting now creates two remoting session configurations:

  • Eine für die Hauptversion von PowerShell,One for the major version of PowerShell. Beispiel: PowerShell.6.For example, PowerShell.6. Auf diesen Endpunkt kann nach geringfügigen Aktualisierungen als systemweite Sitzungskonfiguration von PowerShell 6 zurückgegriffen werden.This endpoint that can be relied upon across minor version updates as the "system-wide" PowerShell 6 session configuration
  • Eine versionsspezifische Sitzungskonfiguration, z.B. PowerShell.6.1.0.One version-specific session configuration, for example: PowerShell.6.1.0

Dieses Verhalten ist hilfreich, wenn Sie mehrere Versionen von PowerShell 6 auf einem Computer installiert und zugänglich haben möchten.This behavior is useful if you want to have multiple PowerShell 6 versions installed and accessible on the same machine.

Darüber hinaus verfügen Vorschauversionen von PowerShell nun über eigene Remotesitzungskonfigurationen, wenn Sie das Enable-PSRemoting-Cmdlet ausgeführt haben:Additionally, preview versions of PowerShell now get their own remoting session configurations after running the Enable-PSRemoting cmdlet:

C:\WINDOWS\system32> Enable-PSRemoting

Die Ausgabe sieht möglicherweise anders aus, wenn Sie nicht zuvor WinRM eingerichtet haben.Your output may be different if you haven't set up WinRM before.

WinRM is already set up to receive requests on this computer.
WinRM is already set up for remote management on this computer.

In diesem Fall werden möglicherweise separate PowerShell-Sitzungskonfigurationen für die Vorschau und stabile Builds von PowerShell 6 sowie für jede einzelne Version angezeigt.Then you can see separate PowerShell session configurations for the preview and stable builds of PowerShell 6, and for each specific version.

Get-PSSessionConfiguration
Name          : PowerShell.6.2-preview.1
PSVersion     : 6.2
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

Name          : PowerShell.6-preview
PSVersion     : 6.2
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

Name          : powershell.6
PSVersion     : 6.1
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

Name          : powershell.6.1.0
PSVersion     : 6.1
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

Für SSH unterstützte user@host:port-Syntaxuser@host:port syntax supported for SSH

SSH-Clients unterstützen in der Regel eine Verbindungszeichenfolge im Format user@host:port.SSH clients typically support a connection string in the format user@host:port. Durch das Hinzufügen von SSH als Protokoll für PowerShell-Remoting ist nun Unterstützung für dieses Format der Verbindungszeichenfolge enthalten:With the addition of SSH as a protocol for PowerShell Remoting, we've added support for this format of connection string:

Enter-PSSession -HostName fooUser@ssh.contoso.com:2222

MSI-Option zum Hinzufügen eines Explorer-Shell-Kontextmenüs unter WindowsMSI option to add explorer shell context menu on Windows

Durch die Mithilfe von @bergmeister ist es nun möglich, ein Kontextmenü unter Windows zu aktivieren.Thanks to @bergmeister, now you can enable a context menu on Windows. Sie können Ihre systemweite Installation von PowerShell 6.1 jetzt aus einem beliebigen Ordner im Windows-Explorer öffnen:Now you can open your system-wide installation of PowerShell 6.1 from any folder in the Windows Explorer:

Shell-Kontextmenü für PowerShell 6

Nützliche FunktionenGoodies

„Als Administrator ausführen“ in der Sprungliste der Windows-Verknüpfungen"Run as Administrator" in the Windows shortcut jump list

Durch die Mithilfe von @bergmeister enthält die Sprungliste der Verknüpfungen von PowerShell Core jetzt die Option „Als Administrator ausführen“:Thanks to @bergmeister, the PowerShell Core shortcut's jump list now includes "Run as Administrator":

„Als Administrator ausführen“ in der Sprungliste von PowerShell 6

Zurück zum vorherigen Verzeichnis mit cd -cd - returns to previous directory

C:\Windows\System32> cd C:\
C:\> cd -
C:\Windows\System32>

Oder unter Linux:Or on Linux:

PS /etc> cd /usr/bin
PS /usr/bin> cd -
PS /etc>

cd und cd -- wechseln auch zu $HOME.Also, cd and cd -- change to $HOME.

Test-Connection

Durch die Mithilfe von @iSazonov konnte das Test-Connection-Cmdlet auf PowerShell Core portiert werden.Thanks to @iSazonov, the Test-Connection cmdlet has been ported to PowerShell Core.

Update-Help als Nicht-AdministratorUpdate-Help as non-admin

Aufgrund der großen Nachfrage muss nun Update-Help nicht mehr als Administrator ausgeführt werden.By popular demand, Update-Help no longer needs to be run as an administrator. Über Update-Help wird die Hilfe jetzt standardmäßig in einen benutzerdefinierten Ordner gespeichert.Update-Help now defaults to saving help to a user-scoped folder.

Neue Methoden/Eigenschaften für PSCustomObjectNew methods/properties on PSCustomObject

Durch die Mithilfe von @iSazonov konnten PSCustomObject neue Methoden und Eigenschaften hinzugefügt werden.Thanks to @iSazonov, we've added new methods and properties to PSCustomObject. PSCustomObject enthält nun eine Count/Length-Eigenschaften wie andere Objekte.PSCustomObject now includes a Count/Length property like other objects.

$PSCustomObject = [pscustomobject]@{foo = 1}

$PSCustomObject.Length
1
$PSCustomObject.Count
1

Diese Vorgehensweise umfasst auch ForEach- und Where-Methoden, mit denen Sie nach PSCustomObject-Elementen ausführen und filtern können:This work also includes ForEach and Where methods that allow you to operate and filter on PSCustomObject items:

$PSCustomObject.ForEach({$_.foo + 1})
2
$PSCustomObject.Where({$_.foo -gt 0})
foo
---
  1

Where-Object -Not

Durch die Mithilfe von @SimonWahlin konnte Where-Object der -Not-Parameter hinzugefügt werden.Thanks to @SimonWahlin, we've added the -Not parameter to Where-Object. Jetzt können Sie ein Objekt in der Pipeline nach dem Nichtvorhandensein einer Eigenschaft oder eines leeren oder NULL-Eigenschaftswerts filtern.Now you can filter an object at the pipeline for the non-existence of a property, or a null/empty property value.

Dieser Befehl gibt z.B. alle Dienste zurück, die über keine definierten abhängigen Dienste verfügen:For example, this command returns all services that don't have any dependent services defined:

Get-Service | Where-Object -Not DependentServices

Erstellen eines BOM-freien UTF-8-Dokuments mit New-ModuleManifestNew-ModuleManifest creates a BOM-less UTF-8 document

Durch den Umstieg auf BOM-freies UTF-8 in PowerShell 6.0 wurde das New-ModuleManifest-Cmdlet aktualisiert, und es erstellt nun BOM-freie UTF-8-Dokumente anstatt UTF-16-Dokumente.Given our move to BOM-less UTF-8 in PowerShell 6.0, we've updated the New-ModuleManifest cmdlet to create a BOM-less UTF-8 document instead of a UTF-16 one.

Konvertierungen von PSMethod in einen DelegatenConversions from PSMethod to Delegate

Durch die Mithilfe von @powercode wird jetzt die Konvertierung von PSMethod in einen Delegaten unterstützt.Thanks to @powercode, we now support the conversion of a PSMethod into a delegate. Dadurch kann nun beispielsweise PSMethod [M]::DoubleStrLen als Delegatwert an [M]::AggregateString übergeben werden:This allows you to do things like passing PSMethod [M]::DoubleStrLen as a delegate value into [M]::AggregateString:

class M {
    static [int] DoubleStrLen([string] $value) { return 2 * $value.Length }

    static [long] AggregateString([string[]] $values, [func[string, int]] $selector) {
        [long] $res = 0
        foreach($s in $values){
            $res += $selector.Invoke($s)
        }
        return $res
    }
}

[M]::AggregateString((gci).Name, [M]::DoubleStrLen)

Weitere Informationen zu dieser Änderung finden Sie unter PR #5287.For more info on this change, check out PR #5287.

Standardabweichung in Measure-ObjectStandard deviation in Measure-Object

Durch die Mithilfe von @CloudyDino wurde Measure-Object eine StandardDeviation-Eigenschaft hinzugefügt:Thanks to @CloudyDino, we've added a StandardDeviation property to Measure-Object:

Get-Process | Measure-Object -Property CPU -AllStats
Count             : 308
Average           : 31.3720576298701
Sum               : 9662.59375
Maximum           : 4416.046875
Minimum           :
StandardDeviation : 264.389544720926
Property          : CPU

GetPfxCertificate -Password

Durch die Mithilfe von @maybe-hello-world verfügt Get-PfxCertificate jetzt über den Password-Parameter, der eine SecureString erfordert.Thanks to @maybe-hello-world, Get-PfxCertificate now has the Password parameter, which takes a SecureString. Dadurch kann er ohne Benutzereingriff verwendet werden:This allows you to use it non-interactively:

$certFile = '\\server\share\pwd-protected.pfx'
$certPass = Read-Host -AsSecureString -Prompt 'Enter the password for certificate: '

$certThumbPrint = (Get-PfxCertificate -FilePath $certFile -Password $certPass ).ThumbPrint

Entfernen der more-FunktionRemoval of the more function

Bisher enthielt PowerShell unter Windows eine Funktion mit dem Namen more, die more.com mit einschloss.In the past, PowerShell shipped a function on Windows called more that wrapped more.com. Diese Funktion wurde nun entfernt.That function has now been removed.

Zudem wurde die help-Funktion so geändert, dass unter Windows more.com verwendet wird bzw. auf anderen Plattformen der unter $env:PAGER angegebene Standardpager des Systems.Also, the help function changed to use more.com on Windows, or the system's default pager specified by $env:PAGER on non-Windows platforms.

Zurückleiten der Benutzer zum aktuellen Arbeitsverzeichnis im Laufwerk mit cd DriveName:cd DriveName: now returns users to the current working directory in that drive

Bisher wurden Benutzer zum Standardspeicherort für das Laufwerk geleitet, wenn sie mit Set-Location oder cd zu einem PowerShell-Laufwerk (PSDrive) zurückkehren wollten.Previously, using Set-Location or cd to return to a PSDrive sent users to the default location for that drive.

Durch die Mithilfe von @mcbobke werden Benutzer jetzt zum letzten bekannten aktuellen Arbeitsverzeichnis für die jeweilige Sitzung geleitet.Thanks to @mcbobke, users are now sent to the last known current working directory for that session.

Typbezeichner für Windows PowerShellWindows PowerShell type accelerators

Windows PowerShell enthält nun die folgenden Typbezeichner für ein einfacheres Arbeiten mit den jeweiligen Typen:In Windows PowerShell, we included the following type accelerators to make it easier to work with their respective types:

  • [adsi]: System.DirectoryServices.DirectoryEntry[adsi]: System.DirectoryServices.DirectoryEntry
  • [adsisearcher]: System.DirectoryServices.DirectorySearcher[adsisearcher]: System.DirectoryServices.DirectorySearcher
  • [wmi]: System.Management.ManagementObject[wmi]: System.Management.ManagementObject
  • [wmiclass]: System.Management.ManagementClass[wmiclass]: System.Management.ManagementClass
  • [wmisearcher]: System.Management.ManagementObjectSearcher[wmisearcher]: System.Management.ManagementObjectSearcher

In PowerShell 6 waren diese Typbezeichner noch nicht enthalten und wurden nun in PowerShell 6.1 unter Windows hinzugefügt.These type accelerators were not included in PowerShell 6, but have been added to PowerShell 6.1 running on Windows.

Mit diesen Typen können auf einfache Weise AD- und WMI-Objekte erstellt werden.These types are useful in easily constructing AD and WMI objects.

Sie können beispielsweise mithilfe von LDAP eine Abfrage ausführen:For example, you can query using LDAP:

[adsi]'LDAP://CN=FooUse,OU=People,DC=contoso,DC=com'

Im folgenden Beispiel wird ein CIM-Objekt „Win32_OperatingSystem“ erstellt:Following example creates a Win32_OperatingSystem CIM object:

[wmi]"Win32_OperatingSystem=@"
SystemDirectory : C:\WINDOWS\system32
Organization    : Contoso IT
BuildNumber     : 18234
RegisteredUser  : Contoso Corp.
SerialNumber    : 12345-67890-ABCDE-F0123
Version         : 10.0.18234

In diesem Beispiel wird ein ManagementClass-Objekt für die Klasse „Win32_OperatingSystem“ zurückgegeben:This example returns a ManagementClass object for Win32_OperatingSystem class.

[wmiclass]"Win32_OperatingSystem"
   NameSpace: ROOT\cimv2

Name                                Methods              Properties
----                                -------              ----------
Win32_OperatingSystem               {Reboot, Shutdown... {BootDevice, BuildNumber, BuildType, Caption...}

-lp-Alias für alle -LiteralPath-Parameter-lp alias for all -LiteralPath parameters

Durch die Mithilfe von @kvprasoon gibt es nun einen Parameteralias -lp für alle integrierten PowerShell-Cmdlets mit einem -LiteralPath-Parameter.Thanks to @kvprasoon, we now have a parameter alias -lp for all the built-in PowerShell cmdlets that have a -LiteralPath parameter.

Aktuelle ÄnderungenBreaking Changes

MSI-basierte Installationspfade unter WindowsMSI-based installation paths on Windows

Unter Windows wird das MSI-Paket nun im folgenden Pfad installiert:On Windows, the MSI package now installs to the following path:

  • $env:ProgramFiles\PowerShell\6\ für die stabile Installation von 6.x$env:ProgramFiles\PowerShell\6\ for the stable installation of 6.x
  • $env:ProgramFiles\PowerShell\6-preview\ für die Installation der Vorschau von 6.x$env:ProgramFiles\PowerShell\6-preview\ for the preview installation of 6.x

Mit dieser Änderung wird sichergestellt, dass PowerShell Core durch Microsoft Update aktualisiert/gewartet werden kann.This change ensures that PowerShell Core can be updated/serviced by Microsoft Update.

Weitere Informationen finden Sie unter PowerShell RFC 0026.For more information, check out PowerShell RFC0026.

Deaktivieren von Telemetrie nur mit einer UmgebungsvariableTelemetry can only be disabled with an environment variable

PowerShell Core sendet beim Starten grundlegende Telemetriedaten an Microsoft.PowerShell Core sends basic telemetry data to Microsoft when it is launched. Diese enthalten den Namen und die Version des Betriebssystems sowie die Version von PowerShell.The data includes the OS name, OS version, and PowerShell version. Dadurch wird erkennbar, in welchen Umgebungen PowerShell verwendet wird und welche neuen Funktionen und Problembehebungen Vorrang haben sollten.This data allows us to better understand the environments where PowerShell is used and enables us to prioritize new features and fixes.

Wenn Sie diese Telemetriedaten nicht senden möchten, legen Sie die Umgebungsvariable POWERSHELL_TELEMETRY_OPTOUT auf true, yes oder 1 fest.To opt-out of this telemetry, set the environment variable POWERSHELL_TELEMETRY_OPTOUT to true, yes, or 1. Die Datei DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY wird zum Deaktivieren der Telemetrie nicht mehr unterstützt.We no longer support deletion of the file DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY to disable telemetry.

Standardauthentifizierung über HTTP in PowerShell-Remoting auf Unix-Plattformen nicht zulässigDisallowed Basic Auth over HTTP in PowerShell Remoting on Unix platforms

PowerShell-Remoting auf Unix-Plattformen erfordert nun die Verwendung von NTLM/Negotiate oder HTTPS, um unverschlüsselten Datenverkehr zu verhindern.To prevent the use of unencrypted traffic, PowerShell Remoting on Unix platforms now requires usage of NTLM/Negotiate or HTTPS.

Weitere Informationen zu diesen Änderungen finden Sie unter Issue #6779.For more information on these changes, check out Issue #6779.

VisualBasic als unterstützte Sprache in Add-Type entferntRemoved VisualBasic as a supported language in Add-Type

Bisher konnte Visual Basic-Code mit dem Add-Type-Cmdlet kompiliert werden.In the past, you could compile Visual Basic code using the Add-Type cmdlet. Visual Basic wurde jedoch nur selten mit Add-Type verwendet.Visual Basic was rarely used with Add-Type. Daher wurde diese Funktion nun entfernt, um die Größe von PowerShell zu reduzieren.We removed this feature to reduce the size of PowerShell.

Verwendung von CommandTypes.Workflow und WorkflowInfoCleaned bereinigtCleaned up uses of CommandTypes.Workflow and WorkflowInfoCleaned

Weitere Informationen zu diesen Änderungen finden Sie unter PR #6708.For more information on these changes, check out PR #6708.

Group-Object sortiert jetzt die GruppenGroup-Object now sorts the groups

Im Rahmen der Leistungsverbesserung gibt Group-Object jetzt eine sortierte Auflistung der Gruppen zurück.As part of the performance improvement, Group-Object now returns a sorted listing of the groups. Obwohl Sie sich auf die Reihenfolge nicht verlassen sollten, könnte diese Änderung zu einer Teilung führen, wenn Sie die erste Gruppe anzeigen möchten.Although you should not rely on the order, you could be broken by this change if you wanted the first group. Wir haben entschieden, dass diese Leistungsverbesserung die Änderung wert wäre, weil sich die Abhängigkeit vom früheren Verhalten nur geringfügig auswirkt.We decided that this performance improvement was worth the change since the impact of being dependent on previous behavior is low.

Weitere Informationen zu dieser Änderung finden Sie unter Problem #7409.For more information on this change, see Issue #7409.