PowerShell 6 fehlende Cmdlets

659
root

Warum sind Cmdlets Test-NetConnectionnicht mehr verfügbar? Es scheint, dass sich das gesamte NetTCPIPModul nicht in Version 6 befindet. Gibt es eine Liste der abgeschriebenen Cmdlets in Powershell Core?

Get-Module -n Microsoft.PowerShell.Management | select -exp ExportedCommands In Version 6 ist ungefähr die Hälfte von Version 5.

2
Ich bin mir nicht sicher, welches bestimmte Cmdlet Sie fragen, aber ja, V6 hat viel weniger Cmdlets als v5 und wird wahrscheinlich noch einige Zeit weniger haben. Sofern Sie nicht explizit * nix- oder plattformübergreifende Skripts schreiben, sollten Sie wahrscheinlich v5 verwenden. EBGreen vor 5 Jahren 0
PowerShell 6 ist die Multiplattform-Version von PowerShell. Das bedeutet, dass nur die portierten Cmdlets unterstützt werden. Windows-spezifische Cmdlets wurden unter diesen anderen Plattformen nicht portiert, da sie nicht verwendbar wären. Ramhound vor 5 Jahren 1
Weitere Informationen erhalten Sie unter http://stackoverflow.com/. Tripp Kinetics vor 5 Jahren 0
@TrippKinetics Nicht wahrscheinlich. Die Antwort ist, dass V6 weniger Cmdlets als Windows-spezifische Versionen aufweist. Zeitraum. EBGreen vor 5 Jahren 0
@Ramhound Beachten Sie, dass mindestens einige der `NetTCPIP`-Cmdlets _ nicht von Natur aus Windows-spezifisch sind. Wenn sie keine OS-Schnittstellen mit sehr niedrigem Niveau berühren, können sie zumindest theoretisch portiert werden. "Test-NetConnection" sollte eigentlich ziemlich einfach sein, es ist nur ein Port des alten "ping" -Befehls von BSD mit typischen MS-Unterschieden, nur um anders zu sein. Austin Hemmelgarn vor 5 Jahren 0
@AustinHemmelgarn - Der Kommentar war sehr verallgemeinert. [In diesem Fall ist das PowerShell-Modul `NetTCPIP` nur innerhalb von Windows vorhanden und wurde nicht auf PowerShell 6 portiert.] (Https://docs.microsoft.com/de-de/powershell/module/nettcpip/?view= win10-ps) Ramhound vor 5 Jahren 1
Ich möchte auch darauf hinweisen, dass Powershell V6 Open Source ist, wenn etwas fehlt, was Sie für nötig erachten, gehen Sie einfach zu github und beginnen Sie mit der Codierung. EBGreen vor 5 Jahren 0

1 Antwort auf die Frage

1
Ben N

Da PowerShell 6 plattformübergreifend ist, mussten Cmdlets, die sich auf native Funktionen stützten, neu geschrieben oder entfernt werden. Anscheinend hat sich Microsoft nie Test-NetConnectionfür andere Plattformen reimplementiert . Cmdlets, die nur Windows-Systeme verwalten (z. B. Speicherbereiche), mussten alle entfernt werden. Um eine Liste aller fehlenden Cmdlets zu erstellen, können Sie PowerShell verwenden!

Führen Sie dies zunächst in PowerShell 5 aus:

Get-Command | select Name, Source | Export-Csv .\cmds5.csv 

Führen Sie es dann erneut in PowerShell 6 mit einer anderen Ausgabedatei aus:

Get-Command | select Name, Source | Export-Csv .\cmds6.csv 

Anschließend können wir die Dateien mit einer der beiden PowerShell-Versionen auf Unterschiede analysieren:

$cmd5 = Import-Csv .\cmds5.csv $cmd6 = Import-Csv .\cmds6.csv $gone = $cmd5 | ? { $n = $_.Name; ($cmd6 | ? { $_.Name -eq $n }) -eq $null } $new = $cmd6 | ? { $n = $_.Name; ($cmd5 | ? { $_.Name -eq $n }) -eq $null } 

Ich habe dies in einer Windows 10 1703 x86-VM getestet, die ziemlich neue PowerShell-Umgebungen enthalten sollte. Ich habe v6.0.2 für PowerShell 6 verwendet, die letzte stabile Version. Von den 1493 Befehlen in PowerShell 5 wurden 1139 in PowerShell 6 entfernt. Ich habe sie alle in einem Kern zusammengefasst . Von den 425 Befehlen in PowerShell 6 sind 71 neu, von denen jedoch alle drei mit der gewünschten Statuskonfiguration zu tun haben. Diejenigen letzten drei sind Get-Uptime, Remove-Aliasund Remove-Service. Sie können alle neuen Befehle in dieser anderen Übersicht sehen .