Różnice między programem Windows PowerShell 5.1 i programem PowerShell 7.x

Windows PowerShell 5.1 jest oparta na .NET Framework w wersji 4.5. Wraz z wydaniem programu PowerShell 6.0 program PowerShell stał się projektem open source utworzonym na platformie .NET Core 2.0. Przejście z .NET Framework do platformy .NET Core pozwoliło programowi PowerShell stać się rozwiązaniem międzyplatformowym. Program PowerShell działa w systemach Windows, macOS i Linux.

Istnieje kilka różnic w języku programu PowerShell między Windows PowerShell a programem PowerShell. Najbardziej istotne różnice są w dostępności i zachowaniu poleceń cmdlet programu PowerShell między platformami Windows i nie Windows oraz zmianami, które wynikają z różnic między .NET Framework a platformą .NET Core.

W tym artykule opisano istotne różnice i zmiany powodujące niezgodność między Windows PowerShell a bieżącą wersją programu PowerShell. To podsumowanie nie zawiera nowych funkcji ani poleceń cmdlet, które zostały dodane. W tym artykule omówiono również zmiany między wersjami. Celem tego artykułu jest przedstawienie bieżącego stanu programu PowerShell i tego, jak różni się to od Windows PowerShell. Aby zapoznać się ze szczegółowym omówieniem zmian między wersjami i dodawaniem nowych funkcji, zobacz artykuły Co nowego dla każdej wersji.

.NET Framework a platforma .NET Core

Program PowerShell w systemie Linux i macOS używa platformy .NET Core, który jest podzbiorem pełnego .NET Framework w usłudze Microsoft Windows. Jest to istotne, ponieważ program PowerShell zapewnia bezpośredni dostęp do podstawowych typów i metod platformy. W związku z tym skrypty uruchamiane na Windows mogą nie działać na platformach innych niż Windows ze względu na różnice w strukturach. Aby uzyskać więcej informacji na temat zmian w programie .NET Core, zobacz Zmiany powodujące niezgodność migracji z .NET Framework do platformy .NET Core.

Każda nowa wersja programu PowerShell jest oparta na nowszej wersji platformy .NET. Zmiany powodujące niezgodność na platformie .NET mogą mieć wpływ na program PowerShell.

  • PowerShell 7.3 (wersja zapoznawcza) — kompilacja na platformie .NET 7.0 (wersja zapoznawcza)
  • PowerShell 7.2 (wersja bieżąca LTS) — wbudowana na platformie .NET 6.0 (bieżąca wersja LTS)
  • PowerShell 7.1 — oparty na platformie .NET 5.0
  • PowerShell 7.0 (LTS) — oparta na platformie .NET Core 3.1 (LTS)
  • PowerShell 6.2 — oparty na platformie .NET Core 2.1
  • PowerShell 6.1 — oparty na platformie .NET Core 2.1
  • PowerShell 6.0 — oparty na platformie .NET Core 2.0

Wraz z pojawieniem się platformy .NET Standard 2.0 program PowerShell może ładować wiele tradycyjnych modułów Windows PowerShell bez modyfikacji. Ponadto program PowerShell 7 zawiera funkcję zgodności Windows PowerShell, która umożliwia korzystanie z modułów Windows PowerShell, które nadal wymagają pełnej struktury.

Aby uzyskać więcej informacji, zobacz:

Terminologia dotycząca produktów używana w dokumentacji

Dokumentacja programu PowerShell składa się z dwóch typów zawartości: dokumentacji poleceń cmdlet i zawartości koncepcyjnej. Odwołanie do polecenia cmdlet jest specyficzne dla wersji. Wersje można przełączać z menu rozwijanego w lewym górnym rogu strony. Zawartość koncepcyjna nie zmienia się po zmianie wersji. Ogólnie rzecz biorąc, pojęcia dotyczą wszystkich wersji programu PowerShell, chyba że w artykule zostanie wywołana konk.

  • PowerShell — jest to domyślna nazwa produktu. Gdy używamy tej nazwy w dokumentacji, mówimy o bieżącej wersji programu PowerShell. Różnice między programem PowerShell Windows PowerShell można zauważyć, zaznaczając określoną wersję.
  • Windows PowerShell — program PowerShell zbudowany na .NET Framework. Windows PowerShell jest dostarczany tylko w Windows i wymaga pełnej struktury. Można uruchomić program PowerShell i program Windows PowerShell na tym samym Windows komputerze.

Moduły nie są już dostarczane z programem PowerShell

Z różnych powodów zgodności następujące moduły nie są już uwzględnione w programie PowerShell.

  • Środowisko ISE
  • Microsoft.PowerShell.LocalAccounts
  • Microsoft.PowerShell.ODataUtils
  • Microsoft.PowerShell.Operation.Validation
  • PSScheduledJob
  • PSWorkflow
  • PSWorkflowUtility

Przepływ pracy programu PowerShell

Przepływ pracy programu PowerShell to funkcja w Windows PowerShell, która opiera się na platformie Windows Workflow Foundation (WF), która umożliwia tworzenie niezawodnych elementów Runbook na potrzeby długotrwałych lub równoległych zadań.

Ze względu na brak obsługi programu Windows Workflow Foundation na platformie .NET Core usunęliśmy przepływ pracy programu PowerShell z programu PowerShell.

W przyszłości chcielibyśmy włączyć natywną równoległość/współbieżność w języku programu PowerShell bez konieczności korzystania z przepływu pracy programu PowerShell.

Jeśli istnieje potrzeba użycia punktów kontrolnych do wznowienia skryptu po ponownym uruchomieniu systemu operacyjnego, zalecamy użycie harmonogramu zadań do uruchomienia skryptu w systemie operacyjnym, ale skrypt musi zachować własny stan (na przykład utrwalanie go w pliku).

Polecenia cmdlet usunięte z programu PowerShell

W przypadku modułów dołączonych do programu PowerShell następujące polecenia cmdlet zostały usunięte z programu PowerShell z różnych powodów zgodności lub użycia nieobsługiwanych interfejsów API.

CimCmdlets

  • Export-BinaryMiLog

Microsoft.PowerShell.Core

  • Add-PSSnapin
  • Export-Console
  • Get-PSSnapin
  • Remove-PSSnapin
  • Resume-Job
  • Suspend-Job

Microsoft.PowerShell.Diagnostics

  • Export-Counter
  • Import-Counter

Microsoft.PowerShell.Management

  • Add-Computer
  • Checkpoint-Computer
  • Clear-EventLog
  • Complete-Transaction
  • Disable-ComputerRestore
  • Enable-ComputerRestore
  • Get-ComputerRestorePoint
  • Get-ControlPanelItem
  • Get-EventLog
  • Get-Transaction
  • Get-WmiObject
  • Invoke-WmiMethod
  • Limit-EventLog
  • New-EventLog
  • New-WebServiceProxy
  • Register-WmiEvent
  • Remove-Computer
  • Remove-EventLog
  • Remove-WmiObject
  • Reset-ComputerMachinePassword
  • Restore-Computer
  • Set-WmiInstance
  • Show-ControlPanelItem
  • Show-EventLog
  • Start-Transaction
  • Test-ComputerSecureChannel
  • Undo-Transaction
  • Use-Transaction
  • Write-EventLog

Microsoft.PowerShell.Utility

  • Convert-String
  • ConvertFrom-String

PSDesiredStateConfiguration

  • Disable-DscDebug
  • Enable-DscDebug
  • Get-DscConfiguration
  • Get-DscConfigurationStatus
  • Get-DscLocalConfigurationManager
  • Publish-DscConfiguration
  • Remove-DscConfigurationDocument
  • Restore-DscConfiguration
  • Set-DscLocalConfigurationManager
  • Start-DscConfiguration
  • Stop-DscConfiguration
  • Test-DscConfiguration
  • Update-DscConfiguration

Polecenia cmdlet usługi WMI w wersji 1

Następujące polecenia cmdlet WMI w wersji 1 zostały usunięte z programu PowerShell:

  • Register-WmiEvent
  • Set-WmiInstance
  • Invoke-WmiMethod
  • Get-WmiObject
  • Remove-WmiObject

Polecenia cmdlet modułu CimCmdlets (aka WMI v2) wykonują tę samą funkcję i udostępniają nowe funkcje i przeprojektowaną składnię.

New-WebServiceProxy polecenie cmdlet usunięte

Platforma .NET Core nie obsługuje platformy Windows Communication Framework, która zapewnia usługi do korzystania z protokołu SOAP. To polecenie cmdlet zostało usunięte, ponieważ wymaga protokołu SOAP.

*-Transaction usunięte polecenia cmdlet

Te polecenia cmdlet miały bardzo ograniczone użycie. Podjęto decyzję o zaprzestaniu wsparcia dla nich.

  • Complete-Transaction
  • Get-Transaction
  • Start-Transaction
  • Undo-Transaction
  • Use-Transaction

*-EventLog Polecenia cmdlet

Ze względu na użycie nieobsługiwanych interfejsów *-EventLog API polecenia cmdlet zostały usunięte z programu PowerShell. Get-WinEventi New-WinEvent są dostępne do pobierania i tworzenia zdarzeń na Windows.

Polecenia cmdlet korzystające z Windows Presentation Framework (WPF)

Platforma .NET Core 3.1 dodała obsługę WPF, więc wersja programu PowerShell 7.0 przywróciła następujące funkcje specyficzne dla Windows:

  • Polecenie Show-Command cmdlet
  • Polecenie Out-GridView cmdlet
  • Parametr ShowWindowGet-Help

Zmiany Desired State Configuration programu PowerShell (DSC)

Invoke-DscResource została przywrócona jako funkcja eksperymentalna w programie PowerShell 7.0.

Począwszy od programu PowerShell 7.2 moduł PSDesiredStateConfiguration został usunięty z programu PowerShell i został opublikowany w Galeria programu PowerShell. Aby uzyskać więcej informacji, zobacz [ogłoszenie][PSDSC-announce] w blogu zespołu programu PowerShell.

Zmiany pliku wykonywalnego programu PowerShell

Zmieniono nazwę elementu powershell.exe na pwsh.exe

Nazwa binarna programu PowerShell została zmieniona z powershell(.exe) na pwsh(.exe). Ta zmiana zapewnia deterministyczny sposób uruchamiania programu PowerShell na maszynach i obsługi równoległych instalacji Windows PowerShell i programu PowerShell.

Dodatkowe zmiany z pwsh(.exe) :powershell.exe

  • Zmieniono pierwszy parametr pozycyjny z -Command na -File. Ta zmiana naprawia użycie #! (aka jako shebang) w skryptach programu PowerShell, które są wykonywane z powłok innych niż PowerShell na platformach innych niż Windows. Oznacza to również, że można uruchamiać polecenia, takie jak pwsh foo.ps1 lub pwsh fooScript bez określania .-File Jednak ta zmiana wymaga jawnego określenia -c lub -Command próby uruchomienia poleceń, takich jak pwsh.exe -Command Get-Command.
  • pwsh``-i akceptuje przełącznik (lub -Interactive), aby wskazać interaktywną powłokę. Dzięki temu program PowerShell może być używany jako domyślna powłoka na platformach Unix.
  • Usunięto parametry -ImportSystemModules i -PSConsoleFile z pwsh.exeelementu .
  • Zmieniono pwsh -version i wbudowaną pomoc, aby pwsh.exe dopasować je do innych narzędzi natywnych.
  • Nieprawidłowe komunikaty o błędach argumentów dla -File kodów i -Command zakończenia zgodne ze standardami systemu Unix
  • Dodano -WindowStyle parametr Windows. Podobnie aktualizacje instalacji oparte na pakietach na platformach innych niż Windows są aktualizacjami w miejscu.

Skrócona nazwa jest również zgodna z nazewnictwem powłok na platformach innych niż Windows.

Obsługa uruchamiania skryptu programu PowerShell z parametrem logicznym

Wcześniej za pomocą polecenia pwsh.exe do wykonania skryptu programu PowerShell nie -File podano sposobu przekazywania $true/$false jako wartości parametrów. Dodano obsługę analizy $true/$false wartości do parametrów. Obsługiwane są również wartości przełączników.

Ulepszona zgodność z poprzednimi wersjami z Windows PowerShell

W przypadku Windows nowy parametr przełącznika UseWindowsPowerShell jest dodawany do Import-Modulepolecenia . Ten przełącznik tworzy moduł proxy w programie PowerShell 7, który używa lokalnego procesu Windows PowerShell do niejawnego uruchamiania wszystkich poleceń cmdlet zawartych w tym module. Aby uzyskać więcej informacji, zobacz Import-Module.

Aby uzyskać więcej informacji o tym, które moduły firmy Microsoft współpracują z programem PowerShell 7.0, zobacz tabelę zgodności modułów.

Obsługa usługi Microsoft Update dla Windows

Program PowerShell 7.2 dodał obsługę usługi Microsoft Update. Po włączeniu tej funkcji uzyskasz najnowsze aktualizacje programu PowerShell 7 w tradycyjnym przepływie zarządzania Windows Update (WU), niezależnie od tego, czy dotyczy to Windows Update dla firm, WSUS, SCCM, czy interaktywnego okna dialogowego WU w Ustawienia.

Pakiet MSI programu PowerShell 7.2 zawiera następujące opcje wiersza polecenia:

  • USE_MU - Ta właściwość ma dwie możliwe wartości:
    • 1 (ustawienie domyślne) — decyduje się na aktualizowanie za pośrednictwem usługi Microsoft Update lub WSUS
    • 0 — Nie zezwalaj na aktualizowanie za pośrednictwem usługi Microsoft Update lub WSUS
  • ENABLE_MU
    • 1(ustawienie domyślne) — wyraża zgodę na korzystanie z usługi Microsoft Update aktualizacji automatycznych lub Windows Update
    • 0— Nie wyrażaj zgody na korzystanie z usługi Microsoft Update aktualizacji automatycznych ani Windows Update

Zmiany aparatu

Obsługa programu PowerShell jako domyślnej powłoki systemu Unix

W systemie Unix jest to konwencja dla powłoki do akceptowania -i dla interaktywnej powłoki i wiele narzędzi oczekuje tego zachowania (script na przykład i podczas ustawiania programu PowerShell jako powłoki domyślnej) i wywołuje powłokę za pomocą przełącznika -i . Ta zmiana jest niezgodna w tym, że -i wcześniej może być używana jako krótka ręka do dopasowania -inputformat, który teraz musi być -in.

Niestandardowe przystawki

Przystawki programu PowerShell to poprzednik modułów programu PowerShell, które nie mają powszechnego wdrożenia w społeczności programu PowerShell.

Ze względu na złożoność obsługi przystawki i ich braku użycia w społeczności nie obsługujemy już niestandardowych przystawek w programie PowerShell.

Flagi funkcji eksperymentalnych

Obsługa programu PowerShell 6.2 dla funkcji eksperymentalnych. Dzięki temu deweloperzy programu PowerShell mogą dostarczać nowe funkcje i otrzymywać opinie przed ukończeniem projektu. W ten sposób unikamy wprowadzania zmian powodujących niezgodność w miarę rozwoju projektu.

Użyj Get-ExperimentalFeature polecenia , aby uzyskać listę dostępnych funkcji eksperymentalnych. Możesz włączyć lub wyłączyć te funkcje za pomocą polecenia Enable-ExperimentalFeature i Disable-ExperimentalFeature.

Ładowanie zestawu ze ścieżki bazowej modułu przed próbą załadowania z usługi GAC

Wcześniej, gdy moduł binarny ma zestaw modułu w usłudze GAC, załadowaliśmy zestaw z funkcji GAC przed próbą załadowania go ze ścieżki podstawowej modułu.

Pomiń sprawdzanie elementu null dla kolekcji z typem elementu typu wartości

Dla parametru Mandatory i ValidateNotNull ValidateNotNullOrEmpty atrybutów pomiń element null,sprawdź, czy typ elementu kolekcji jest typem wartości.

Zachowaj $? dla ParenExpression, SubExpression i ArrayExpression

To żądanie ściągnięcia zmienia sposób kompilowania podpipelines (...), subexpressions $(...) i wyrażeń tablicy @() , tak aby $? nie było automatycznie prawdziwe. Zamiast tego wartość zależy $? od wyniku wykonanego potoku lub instrukcji.

Poprawka $? , która nie jest $false w przypadku zapisywania poleceń natywnych do stderr

$? nie jest ustawiona na $false wartość , gdy polecenie natywne zapisuje wartość stderr. Często zdarza się, że polecenia natywne zapisu stderr na nie mają zamiaru wskazywać awarii. $? jest ustawiona na $false wartość tylko wtedy, gdy polecenie natywne ma kod zakończenia inny niż zero.

Nie $ErrorActionPreference wpływaj na stderr dane wyjściowe poleceń natywnych

Często zdarza się, że polecenia natywne zapisu stderr na nie mają zamiaru wskazywać awarii. Dzięki tej zmianie stderr dane wyjściowe są nadal przechwytywane w obiektach ErrorRecord , ale środowisko uruchomieniowe nie ma już zastosowania $ErrorActionPreference , jeśli wartość ErrorRecord pochodzi z polecenia natywnego.

Zmiana $OutputEncoding na używanie UTF-8 NoBOM kodowania, a nie ASCII

Poprzednie kodowanie ASCII (7-bitowe) spowodowałoby niepoprawną zmianę danych wyjściowych w niektórych przypadkach. Ustawienie UTF-8 NoBOM domyślne zachowuje dane wyjściowe Unicode z kodowaniem obsługiwanym przez większość narzędzi i systemów operacyjnych.

Ujednolicania poleceń cmdlet z parametrem -Encoding , który ma być typu System.Text.Encoding

Wartość Byte została usunięta -Encoding z poleceń cmdlet dostawcy systemu plików. Nowy parametr , -AsByteStreamjest teraz używany do określenia, że strumień bajtów jest wymagany jako dane wejściowe lub że dane wyjściowe są strumieniem bajtów.

Zmień New-ModuleManifest kodowanie na UTF8NoBOM na platformach innych niż Windows

New-ModuleManifest Wcześniej tworzy psd1 manifesty w formacie UTF-16 za pomocą rozwiązania BOM, tworząc problem dla narzędzi systemu Linux. Ta zmiana powodująca niezgodność zmienia kodowanie New-ModuleManifest utF (bez BOM) na platformach innych niż Windows.

Usuwanie AllScope z większości domyślnych aliasów

Aby przyspieszyć tworzenie zakresu, AllScope usunięto z większości domyślnych aliasów. AllScope pozostawiono kilka często używanych aliasów, w których wyszukiwanie było szybsze.

-Verbose i -Debug nie przesłonięć $ErrorActionPreference

Wcześniej, jeśli -Verbose lub -Debug zostały określone, przerodzi zachowanie klasy $ErrorActionPreference. Dzięki tej zmianie -Verbose i -Debug nie ma już wpływu na zachowanie elementu $ErrorActionPreference.

-Debug Ponadto parametr ustawia $DebugPreference wartość Kontynuuj, a nie Inquire.

Spójne $PSCulture odzwierciedlanie zmian w kulturze sesji

W Windows PowerShell bieżąca wartość kultury jest buforowana, co pozwala na brak synchronizacji wartości z kulturą po uruchomieniu sesji. To zachowanie buforowania jest stałe w rdzeniu programu PowerShell.

Zezwalaj jawnie określonemu nazwanemu parametrowi na zastępowanie tego samego parametru z splattingu w formie skrótu

Dzięki tej zmianie nazwane parametry zplatania są przenoszone na końcu listy parametrów, aby były one powiązane po tym, jak wszystkie jawnie określone nazwane parametry są powiązane. Powiązanie parametrów dla prostych funkcji nie zgłasza błędu, gdy nie można odnaleźć określonego nazwanego parametru. Nieznane nazwane parametry są powiązane z parametrem $args prostej funkcji. Przeniesienie splatting na końcu listy argumentów zmienia kolejność wyświetlania parametrów w pliku $args.

Przykład:

function SimpleTest {
    param(
        $Name,
        $Path
    )
    "Name: $Name; Path: $Path; Args: $args"
}

W poprzednim zachowaniu program MyPath nie jest powiązany z -Path tym, ponieważ jest to trzeci argument na liście argumentów. ## Więc kończy się to wypchane do "$args" wraz z Blah = "World"

PS> $hash = @{ Name = "Hello"; Blah = "World" }
PS> SimpleTest @hash "MyPath"
Name: Hello; Path: ; Args: -Blah: World MyPath

Po tej zmianie argumenty z @hash są przenoszone na końcu listy argumentów. MyPath staje się pierwszym argumentem na liście, więc jest powiązany z -Path.

PS> SimpleTest @hash "MyPath"
Name: Hello; Path: MyPath; Args: -Blah: World

Zmiany języka

Operator łączenia wartości null ??

Operator ?? łączenia wartości null zwraca wartość operandu po lewej stronie, jeśli nie ma wartości null. W przeciwnym razie oblicza operand po prawej stronie i zwraca jego wynik. Operator ?? nie ocenia operandu po prawej stronie, jeśli operand po lewej stronie ocenia wartość inną niż null.

$x = $null
$x ?? 100
100

W poniższym przykładzie operand po prawej stronie nie zostanie oceniony.

[string] $todaysDate = '1/10/2020'
$todaysDate ?? (Get-Date).ToShortDateString()
1/10/2020

Operator przypisania łączenia wartości null ??=

Operator ??= przypisania o wartości null przypisuje wartość operandu po prawej stronie do operandu po lewej stronie tylko wtedy, gdy operand po lewej stronie ma wartość null. Operator ??= nie ocenia operandu po prawej stronie, jeśli operand po lewej stronie ocenia wartość inną niż null.

$x = $null
$x ??= 100
$x
100

W poniższym przykładzie operand po prawej stronie nie zostanie oceniony.

[string] $todaysDate = '1/10/2020'
$todaysDate ??= (Get-Date).ToShortDateString()
1/10/2020

Operatory warunkowe o wartości null

Uwaga

Ta funkcja została przeniesiona z eksperymentalnego do głównego nurtu w programie PowerShell 7.1.

Operator warunkowy o wartości null stosuje dostęp do elementu członkowskiego, ?.lub dostęp do elementu, operację do operandu tylko wtedy, ?[]gdy operand ocenia wartość inną niż null; w przeciwnym razie zwraca wartość null.

Ponieważ program PowerShell może ? być częścią nazwy zmiennej, do korzystania z tych operatorów wymagana jest formalna specyfikacja nazwy zmiennej. Dlatego należy używać {} wokół nazw zmiennych, takich jak ${a} lub gdy ? jest częścią nazwy ${a?}zmiennej .

W poniższym przykładzie zwracana jest wartość PropName .

$a = @{ PropName = 100 }
${a}?.PropName
100

Poniższy przykład zwróci wartość null bez próby uzyskania dostępu do nazwy elementu członkowskiego PropName.

$a = $null
${a}?.PropName

Podobnie zostanie zwrócona wartość elementu.

$a = 1..10
${a}?[0]
1

A gdy operand ma wartość null, element nie jest dostępny i zwracany jest wartość null.

$a = $null
${a}?[0]

Uwaga

Składnia nazwy zmiennej ${<name>} nie powinna być mylona z operatorem $() subexpression. Aby uzyskać więcej informacji, zobacz sekcję Nazwa zmiennej about_Variables.

Dodano & operator kontroli zadań

Umieszczenie & na końcu potoku powoduje uruchomienie potoku jako zadania programu PowerShell. Gdy potok jest w tle, zwracany jest obiekt zadania. Po uruchomieniu potoku jako zadania wszystkie standardowe *-Job polecenia cmdlet mogą służyć do zarządzania zadaniem. Zmienne (ignorujące zmienne specyficzne dla procesu) używane w potoku są automatycznie kopiowane do zadania, więc Copy-Item $foo $bar & po prostu działa. Zadanie jest również uruchamiane w bieżącym katalogu zamiast katalogu macierzystego użytkownika.

Nowe metody/właściwości w systemie PSCustomObject

Dodaliśmy nowe metody i właściwości do PSCustomObjectelementu . PSCustomObject teraz zawiera właściwość podobną Count/Length do innych obiektów.

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

$PSCustomObject.Length
1
$PSCustomObject.Count
1

Ta praca obejmuje ForEach również metody, Where które umożliwiają działanie i filtrowanie elementów PSCustomObject :

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

Konwersje z programu PSMethod do delegata

Możesz przekonwertować element PSMethod na delegata. Dzięki temu można wykonywać takie czynności, jak przekazywanie PSMethod [M]::DoubleStrLen jako wartość delegata do [M]::AggregateStringelementu :

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)

Zachowanie porównania ciągów zostało zmienione w programie PowerShell 7.1

Program PowerShell 7.1 jest oparty na platformie .NET 5.0, która wprowadziła następującą zmianę powodującą niezgodność:

Od platformy .NET 5.0 niezmienne porównania ciągów kultury ignorują znaki sterujące niedrukcyjne.

Na przykład następujące dwa ciągi są uważane za identyczne:

# Escape sequence "`a" is Ctrl-G or [char]7
'Food' -eq "Foo`ad"
True

Nowe polecenia cmdlet

Nowe polecenie cmdlet Get-Uptime

Polecenie cmdlet Get-Uptime zwraca czas, który upłynął od ostatniego rozruchu systemu operacyjnego. Polecenie cmdlet zostało wprowadzone w programie PowerShell 6.0.

Nowe polecenie cmdlet Remove-Alias

Polecenie cmdlet Remove-Alias usuwa alias z bieżącej sesji programu PowerShell. Polecenie cmdlet zostało wprowadzone w programie PowerShell 6.0.

Nowe polecenie cmdlet Remove-Service

Polecenie cmdlet Remove-Service usuwa usługę Windows w rejestrze i w bazie danych usługi. Polecenie Remove-Service cmdlet zostało wprowadzone w programie PowerShell 6.0.

Nowe polecenia cmdlet języka Markdown

Język Markdown to standard umożliwiający tworzenie czytelnych dokumentów w postaci zwykłego tekstu z podstawowym formatowaniem, które można renderować w formacie HTML.

Następujące polecenia cmdlet zostały dodane w programie PowerShell 6.1:

  • ConvertFrom-Markdown — konwertuj zawartość ciągu lub pliku na obiekt MarkdownInfo .
  • Get-MarkdownOption — zwraca bieżące kolory i style używane do renderowania zawartości języka Markdown w konsoli programu .
  • Set-MarkdownOption — ustawia kolory i style używane do renderowania zawartości języka Markdown w konsoli programu .
  • Show-Markdown — wyświetla zawartość języka Markdown w konsoli lub jako HTML

Nowe polecenie cmdlet Test-Json

Polecenie cmdlet Test-Json sprawdza, czy ciąg jest prawidłowym dokumentem JavaScript Object Notation (JSON) i opcjonalnie może sprawdzić, czy dokument JSON jest dokumentem JSON względem podanego schematu.

To polecenie cmdlet zostało wprowadzone w programie PowerShell 6.1

Nowe polecenia cmdlet do obsługi funkcji eksperymentalnych

Następujące polecenia cmdlet zostały dodane w programie PowerShell 6.2 do obsługi funkcji eksperymentalnych.

Nowe polecenie cmdlet Join-String

Polecenie cmdlet Join-String łączy obiekty z potoku w jeden ciąg. To polecenie cmdlet zostało dodane w programie PowerShell 6.2.

Nowy widok ConciseView i polecenie cmdlet Get-Error

Program PowerShell 7.0 rozszerza wyświetlanie komunikatów o błędach, aby zwiększyć czytelność błędów interakcyjnych i skryptów przy użyciu nowego widoku domyślnego ConciseView. Widoki można wybierać przez użytkownika za pomocą zmiennej $ErrorViewpreferencji .

W przypadku funkcji ConciseView, jeśli błąd nie pochodzi ze skryptu lub błędu analizatora, jest to pojedynczy wiersz komunikat o błędzie:

Get-Childitem -Path c:\NotReal
Get-ChildItem: Cannot find path 'C:\NotReal' because it does not exist

Jeśli błąd występuje podczas wykonywania skryptu lub jest błędem analizy, program PowerShell zwraca komunikat o błędzie wielowierszowym zawierający błąd, wskaźnik i komunikat o błędzie pokazujący, gdzie znajduje się błąd w tym wierszu. Jeśli terminal nie obsługuje sekwencji ucieczki kolorów ANSI (VT100), kolory nie są wyświetlane.

Domyślny widok w programie PowerShell 7 to ConciseView. Poprzedni widok domyślny to NormalView i można go wybrać, ustawiając zmienną preferencji $ErrorView.

$ErrorView = 'NormalView' # Sets the error view to NormalView
$ErrorView = 'ConciseView' # Sets the error view to ConciseView

Uwaga

Dodano nową właściwość ErrorAccentColor w celu $Host.PrivateData obsługi zmiany koloru akcentu komunikatu o błędzie.

Nowe Get-Errorpolecenie cmdlet udostępnia pełny szczegółowy widok w pełni kwalifikowanego błędu w razie potrzeby. Domyślnie polecenie cmdlet wyświetla pełne szczegóły, w tym wyjątki wewnętrzne ostatniego błędu, który wystąpił.

Polecenie Get-Error cmdlet obsługuje dane wejściowe z potoku przy użyciu wbudowanej zmiennej $Error. Get-Error wyświetla wszystkie błędy potokowe.

$Error | Get-Error

Polecenie Get-Error cmdlet obsługuje parametr Najnowszy , co pozwala określić liczbę błędów z bieżącej sesji, którą chcesz wyświetlić.

Get-Error -Newest 3 # Displays the lst three errors that occurred in the session

Aby uzyskać więcej informacji, zobacz Get-Error(Błąd).

Zmiany poleceń cmdlet

Wykonywanie równoległe dodane do ForEach-Object

Począwszy od programu PowerShell 7.0, ForEach-Object polecenie cmdlet, które iteruje elementy w kolekcji, ma teraz wbudowaną równoległość z nowym parametrem Parallel .

Domyślnie bloki skryptów równoległych używają bieżącego katalogu roboczego obiektu wywołującego, który uruchamiał zadania równoległe.

W tym przykładzie pobrano 50 000 wpisów dziennika z 5 dzienników systemowych na lokalnej maszynie Windows:

$logNames = 'Security','Application','System','Windows PowerShell','Microsoft-Windows-Store/Operational'

$logEntries = $logNames | ForEach-Object -Parallel {
    Get-WinEvent -LogName $_ -MaxEvents 10000
} -ThrottleLimit 5

$logEntries.Count

50000

Parametr Parallel określa blok skryptu uruchamiany równolegle dla każdej nazwy dziennika wejściowego.

Nowy parametr ThrottleLimit ogranicza liczbę bloków skryptów uruchomionych równolegle w danym momencie. Wartość domyślna to 5.

Użyj zmiennej $_ do reprezentowania bieżącego obiektu wejściowego w bloku skryptu. $using: Użyj zakresu, aby przekazać odwołania do zmiennej do uruchomionego bloku skryptu.

Aby uzyskać więcej informacji, zobacz ForEach-Object.

Sprawdzanie system32 zgodnych wbudowanych modułów na Windows

W aktualizacji Windows 10 1809 i Windows Server 2019 zaktualizowaliśmy szereg wbudowanych modułów programu PowerShell, aby oznaczyć je jako zgodne z programem PowerShell.

Po uruchomieniu programu PowerShell automatycznie dołączana $windir\System32 jest jako część zmiennej środowiskowej PSModulePath . Jednak uwidacznia on tylko moduły i Get-Module Import-Module jeśli jest CompatiblePSEdition oznaczony jako zgodny z Core.

To zachowanie można zastąpić, aby wyświetlić wszystkie moduły przy użyciu parametru przełącznika -SkipEditionCheck . Dodaliśmy PSEdition również właściwość do danych wyjściowych tabeli.

-lp alias dla wszystkich -LiteralPath parametrów

Utworzyliśmy standardowy alias -lp parametru dla wszystkich wbudowanych poleceń cmdlet programu PowerShell, które mają -LiteralPath parametr.

Poprawka Get-Item -LiteralPath a*b , jeśli a*b w rzeczywistości nie istnieje, aby zwrócić błąd

Wcześniej, -LiteralPath biorąc pod uwagę symbol wieloznaczny, potraktowałby go tak samo, jak -Path i jeśli symbol wieloznaczny nie znalazł żadnych plików, dyskretnie zakończy się. Poprawne zachowanie powinno być -LiteralPath literałem, więc jeśli plik nie istnieje, powinien zostać wyświetlony błąd. Zmiana polega na traktowaniu symboli wieloznacznych używanych -Literal jako literał.

Ustaw katalog roboczy na bieżący katalog w Start-Job

Polecenie Start-Job cmdlet używa teraz bieżącego katalogu jako katalogu roboczego dla nowego zadania.

Usuwanie -Protocol z *-Computer poleceń cmdlet

Ze względu na problemy z obsługą komunikacji zdalnej RPC w programie CoreFX (szczególnie na platformach innych niż Windows) i zapewnienie spójnego środowiska komunikacji zdalnej w programie PowerShell, -Protocol parametr został usunięty z \*-Computer poleceń cmdlet. Funkcja DCOM nie jest już obsługiwana w przypadku komunikacji zdalnie. Następujące polecenia cmdlet obsługują tylko komunikacja zdalna programu WSMAN:

  • Rename-Computer
  • Restart-Computer
  • Stop-Computer

Usuwanie -ComputerName z *-Service poleceń cmdlet

Aby zachęcić do spójnego korzystania z protokołu PSRP, -ComputerName parametr został usunięty z *-Service poleceń cmdlet.

Poprawka Get-Content -Delimiter , aby nie uwzględniać ogranicznika w zwracanych wierszach

Wcześniej dane wyjściowe podczas używania Get-Content -Delimiter były niespójne i niewygodne, ponieważ wymagały dalszego przetwarzania danych w celu usunięcia ogranicznika. Ta zmiana usuwa ogranicznik w zwracanych wierszach.

Zmiany w Format-Hex

Parametr -Raw jest teraz "no-op" (w tym nie robi nic). W przyszłości wszystkie dane wyjściowe są wyświetlane z prawdziwą reprezentacją liczb, które zawierają wszystkie bajty dla jego typu. Jest to parametr, który -Raw robił przed tą zmianą.

Poprawka literówki w nazwie właściwości Get-ComputerInfo

BiosSerialNumber został błędnie napisany, ponieważ BiosSeralNumber i został zmieniony na poprawną pisownię.

Dodawanie Get-StringHash poleceń cmdlet i Get-FileHash

Ta zmiana polega na tym, że niektóre algorytmy skrótów nie są obsługiwane przez coreFX, dlatego nie są już dostępne:

  • MACTripleDES
  • RIPEMD160

Dodawanie walidacji poleceń Get-* cmdlet, w których przekazywanie $null zwraca wszystkie obiekty zamiast błędu

Przekazywanie $null do dowolnego z następujących elementów zgłasza teraz błąd:

  • Get-Credential -UserName
  • Get-Event -SourceIdentifier
  • Get-EventSubscriber -SourceIdentifier
  • Get-Help -Name
  • Get-PSBreakpoint -Script
  • Get-PSProvider -PSProvider
  • Get-PSSessionConfiguration -Name
  • Get-Runspace -Name
  • Get-RunspaceDebug -RunspaceName
  • Get-Service -Name
  • Get-TraceSource -Name
  • Get-Variable -Name

Dodawanie obsługi rozszerzonego formatu pliku dziennika W3C w programie Import-Csv

Import-Csv Wcześniej nie można użyć polecenia cmdlet do bezpośredniego zaimportowania plików dziennika w rozszerzonym formacie dziennika W3C i wymagana jest dodatkowa akcja. Dzięki tej zmianie obsługiwany jest rozszerzony format dziennika W3C.

Import-Csv ma zastosowanie PSTypeNames podczas importowania, gdy informacje o typie są obecne w pliku CSV

Wcześniej obiekty wyeksportowane przy użyciu Export-CSV polecenia importowanego z elementami TypeInformation ConvertFrom-Csv nie zachowały informacji o typie. Ta zmiana dodaje informacje o typie do PSTypeNames elementu członkowskiego, jeśli są dostępne z pliku CSV.

-NoTypeInformation jest ustawieniem domyślnym Export-Csv

Export-CSV Wcześniej polecenie cmdlet wyświetli komentarz jako pierwszy wiersz zawierający nazwę typu obiektu. Zmiana domyślnie wyklucza informacje o typie, ponieważ nie jest rozumiana przez większość narzędzi CSV. Ta zmiana została wprowadzona w celu przesyłania opinii klientów.

Użyj polecenia -IncludeTypeInformation , aby zachować poprzednie zachowanie.

Zezwalaj * na używanie w ścieżce rejestru dla Remove-Item

Wcześniej, -LiteralPath biorąc pod uwagę symbol wieloznaczny, potraktowałby go tak samo, jak -Path i jeśli symbol wieloznaczny nie znalazł żadnych plików, dyskretnie zakończy się. Poprawne zachowanie powinno być -LiteralPath literałem, więc jeśli plik nie istnieje, powinien zostać wyświetlony błąd. Zmiana polega na traktowaniu symboli wieloznacznych używanych -Literal jako literał.

Group-Object teraz sortuje grupy

W ramach poprawy Group-Object wydajności zwraca teraz posortowaną listę grup. Mimo że nie należy polegać na kolejności, można je złamać, jeśli chcesz pierwszej grupy. Ustaliliśmy, że ta poprawa wydajności jest warta zmiany, ponieważ wpływ bycia zależnym od poprzedniego zachowania jest niski.

Odchylenie standardowe wMeasure-Object

Dane wyjściowe z tej pory Measure-Object zawierają StandardDeviation właściwość.

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

Get-PfxCertificate -Password

Get-PfxCertificate teraz ma Password parametr , który przyjmuje parametr SecureString. Dzięki temu można używać go nieinterakcyjnego:

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

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

more Usuwanie funkcji

W przeszłości program PowerShell wysłał funkcję w Windows o nazwie more otoka more.com. Ta funkcja została usunięta.

Ponadto funkcja została zmieniona help tak, aby korzystała more.com z Windows lub domyślnego pagera systemu określonego przez $env:PAGER platformy inne niż Windows.

cd DriveName: teraz zwraca użytkowników do bieżącego katalogu roboczego na tym dysku

Wcześniej za pomocą Set-Location polecenia lub cd powrotu do usługi PSDrive użytkownicy wysłali użytkowników do domyślnej lokalizacji dla tego dysku. Użytkownicy są teraz wysyłani do ostatniego znanego bieżącego katalogu roboczego dla tej sesji.

cd - powraca do poprzedniego katalogu

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

Lub w systemie Linux:

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

cd Ponadto zmień cd -- wartość na $HOME.

Update-Help jako administrator inny niż administrator

Według popularnego zapotrzebowania Update-Help nie trzeba już uruchamiać jako administrator. Update-Help teraz domyślnie zapisuje pomoc w folderze o zakresie użytkownika.

Where-Object -Not

Dodanie parametru -Not do Where-Objectelementu umożliwia filtrowanie obiektu w potoku pod kątem braku istnienia właściwości lub wartości właściwości null/pustej.

Na przykład to polecenie zwraca wszystkie usługi, które nie mają zdefiniowanych usług zależnych:

Get-Service | Where-Object -Not DependentServices

Zmiany w poleceniach cmdlet sieci Web

Podstawowy interfejs API platformy .NET poleceń cmdlet sieci Web został zmieniony na System.Net.Http.HttpClient. Ta zmiana zapewnia wiele korzyści. Jednak ta zmiana wraz z brakiem współdziałania z programem Internet Explorer spowodowała kilka zmian powodujących niezgodność w programie Invoke-WebRequest i Invoke-RestMethod.

  • Invoke-WebRequest teraz obsługuje tylko podstawowe analizowanie KODU HTML. Invoke-WebRequest zawsze zwraca BasicHtmlWebResponseObject obiekt. ParsedHtml Właściwości i Forms zostały usunięte.
  • BasicHtmlWebResponseObject.Headers wartości są teraz String[] zamiast String.
  • BasicHtmlWebResponseObject.BaseResponse jest teraz obiektem System.Net.Http.HttpResponseMessage .
  • Właściwość Response wyjątków poleceń cmdlet sieci Web jest teraz obiektem System.Net.Http.HttpResponseMessage .
  • Ścisłe analizowanie nagłówków RFC jest teraz domyślne dla parametru -Headers i -UserAgent . Można go pominąć za pomocą polecenia -SkipHeaderValidation.
  • file:// i ftp:// schematy identyfikatorów URI nie są już obsługiwane.
  • System.Net.ServicePointManager ustawienia nie są już honorowane.
  • Obecnie w macOS nie jest dostępne uwierzytelnianie oparte na certyfikatach.
  • Użycie identyfikatora -Credential http:// URI spowoduje wystąpienie błędu. Użyj identyfikatora https:// URI lub podaj parametr , -AllowUnencryptedAuthentication aby pominąć błąd.
  • -MaximumRedirection teraz generuje błąd zakończenia, gdy próby przekierowania przekraczają podany limit zamiast zwracać wyniki ostatniego przekierowania.
  • W programie PowerShell 6.2 wprowadzono zmianę domyślnego kodowania UTF-8 dla odpowiedzi JSON. Jeśli dla odpowiedzi JSON nie podano zestawu znaków, domyślnym kodowaniem powinno być UTF-8 na RFC 8259.
  • Domyślne kodowanie ustawione na UTF-8 dla application-json odpowiedzi
  • Dodano -SkipHeaderValidation parametr umożliwiający zezwalanie Content-Type na nagłówki, które nie są zgodne ze standardami
  • Dodano -Form parametr do obsługi uproszczonej multipart/form-data obsługi
  • Zgodne, bez uwzględniania wielkości liter obsługa kluczy relacyjnych
  • Dodano -Resume parametr dla poleceń cmdlet sieci Web

Invoke-RestMethod zwraca przydatne informacje, gdy żadne dane nie są zwracane

Gdy interfejs API zwróci tylko nullwartość , Invoke-RestMethod serializował to jako ciąg "null" zamiast $null. Ta zmiana naprawia logikę w pliku , Invoke-RestMethod aby prawidłowo serializować prawidłowy literał JSON null pojedynczej wartości jako $null.

Polecenia cmdlet sieci Web ostrzegają, gdy -Credential są wysyłane za pośrednictwem nieszyfrowanych połączeń

W przypadku korzystania z protokołu HTTP zawartość, w tym hasła, są wysyłane jako tekst jasny. Ta zmiana ma nie zezwalać na to domyślnie i zwracać błąd, jeśli poświadczenia są przekazywane niepewnie. Użytkownicy mogą to obejść za pomocą przełącznika -AllowUnencryptedAuthentication .

Ustaw -OutFile parametr w poleceniach cmdlet sieci Web tak, aby działał jak -LiteralPath

Począwszy od programu PowerShell 7.1, parametr OutFile poleceń cmdlet sieci Web działa jak LiteralPath i nie przetwarza symboli wieloznacznych.

Zmiany interfejsu API

Usuń AddTypeCommandBase klasę

Klasa została usunięta AddTypeCommandBase z Add-Type klasy, aby poprawić wydajność. Ta klasa jest używana tylko przez Add-Type polecenie cmdlet i nie powinna mieć wpływu na użytkowników.

Usunięto VisualBasic jako obsługiwany język w Add-Type

W przeszłości można skompilować kod Visual Basic przy użyciu Add-Type polecenia cmdlet . Visual Basic rzadko była używana z usługą Add-Type. Usunęliśmy tę funkcję, aby zmniejszyć rozmiar programu PowerShell.

Usunięto RunspaceConfiguration obsługę

Wcześniej podczas tworzenia przestrzeni uruchomieniowej programu PowerShell programowo przy użyciu interfejsu API można użyć starszych RunspaceConfiguration lub nowszych InitialSessionState klas. Ta zmiana usunęła obsługę RunspaceConfiguration programu i obsługuje InitialSessionStatetylko usługę .

CommandInvocationIntrinsics.InvokeScript wiązanie argumentów z $input zamiast $args

Nieprawidłowa pozycja parametru spowodowała przekazanie args jako danych wejściowych zamiast jako args.

Usuń ClrVersion właściwości i BuildVersion z $PSVersionTable

Właściwość elementu nie jest przydatna ClrVersion $PSVersionTable w przypadku biblioteki CoreCLR. Użytkownicy końcowi nie powinni używać tej wartości w celu określenia zgodności.

Właściwość BuildVersion została powiązana z wersją kompilacji Windows, która nie jest dostępna na platformach innych niż Windows. Użyj właściwości , GitCommitId aby pobrać dokładną wersję kompilacji programu PowerShell.

Implementowanie analizowania ucieczki Unicode

`u#### lub `u{####} jest konwertowany na odpowiedni znak Unicode. Aby wyświetlić literał `u, należy uciec od backtick: ``u.

Problem z powiązaniem parametrów w ValueFromRemainingArguments funkcjach PS

ValueFromRemainingArguments teraz zwraca wartości jako tablicę zamiast pojedynczej wartości, która sama jest tablicą.

Wyczyszczone zastosowania i CommandTypes.Workflow``WorkflowInfoCleaned

Wyczyść kod związany z użyciem CommandTypes.Workflow elementów i WorkflowInfo w pliku System.Management.Automation.

Te drobne zmiany powodujące niezgodność wpływają głównie na kod dostawcy pomocy.

  • Zmień konstruktory publiczne na WorkflowInfo wewnętrzne. Nie obsługujemy już przepływu pracy, dlatego warto nie zezwalać użytkownikom na tworzenie Workflow wystąpień.
  • Usuń typ System.Management.Automation.DebugSource, ponieważ jest on używany tylko do debugowania przepływu pracy.
  • Usuń przeciążenie z SetParent abstrakcyjnego debugera klasy, który jest używany tylko do debugowania przepływu pracy.
  • Usuń to samo przeciążenie klasy SetParent pochodnej RemotingJobDebugger.

Nie zawijaj zwracanych wyników PSObject podczas konwertowania ScriptBlock do delegata

Gdy element ScriptBlock jest konwertowany na typ delegata, który ma być używany w kontekście języka C#, zawijanie wyniku w PSObject wyniku powoduje niepotrzebne problemy:

  • Gdy wartość jest konwertowana na typ zwracany delegata, PSObject zasadniczo jest niezapisany. PSObject Więc jest niepotrzebny.
  • Gdy zwracany typ delegata to object, zostaje opakowany, PSObject co utrudnia pracę z kodem w języku C#.

Po tej zmianie zwrócony obiekt jest obiektem bazowym.

Obsługa komunikacji zdalniej

Komunikacja zdalna programu PowerShell (PSRP) przy użyciu usługi WinRM na platformach Unix wymaga protokołu NTLM/Negotiate lub uwierzytelniania podstawowego za pośrednictwem protokołu HTTPS. Protokół PSRP na macOS obsługuje tylko uwierzytelnianie podstawowe za pośrednictwem protokołu HTTPS. Uwierzytelnianie oparte na protokole Kerberos nie jest obsługiwane w przypadku platform innych niż Windows.

Program PowerShell obsługuje również funkcję komunikacji zdalnej programu PowerShell (PSRP) za pośrednictwem protokołu SSH na wszystkich platformach (Windows, macOS i Linux). Aby uzyskać więcej informacji, zobacz Komunikacja zdalna SSH w programie PowerShell.

Program PowerShell Direct for Containers próbuje użyć pwsh najpierw

PowerShell Direct [psdirect] to funkcja programu PowerShell i funkcji Hyper-V, która umożliwia łączenie się z maszyną wirtualną lub kontenerem funkcji Hyper-V bez łączności sieciowej lub innych usług zdalnego zarządzania.

W przeszłości program PowerShell Direct nawiązał połączenie przy użyciu wbudowanego wystąpienia Windows PowerShell w kontenerze. Teraz program PowerShell Direct najpierw próbuje nawiązać połączenie przy użyciu dowolnej dostępnej pwsh.exe w zmiennej środowiskowej PATH . Jeśli pwsh.exe nie jest dostępna, program PowerShell Direct powraca do używania polecenia powershell.exe.

Enable-PSRemoting Teraz tworzy oddzielne punkty końcowe komunikacji wirtualnej dla wersji zapoznawczych

Enable-PSRemoting Teraz tworzy dwie konfiguracje sesji komunikacji wirtualnej:

  • Jedna dla wersji głównej programu PowerShell. Na przykład PowerShell.6. Ten punkt końcowy, który można polegać na aktualizacjach wersji pomocniczych jako konfiguracja sesji programu PowerShell 6 dla całego systemu
  • Jedna konfiguracja sesji specyficznej dla wersji, na przykład: PowerShell.6.1.0

To zachowanie jest przydatne, jeśli chcesz mieć zainstalowaną wiele wersji programu PowerShell 6 i dostępnych na tej samej maszynie.

Ponadto wersje zapoznawcze programu PowerShell teraz uzyskują własne konfiguracje sesji komunikacji zdalnej po uruchomieniu Enable-PSRemoting polecenia cmdlet:

C:\WINDOWS\system32> Enable-PSRemoting

Dane wyjściowe mogą być inne, jeśli wcześniej nie skonfigurowaliśmy usługi WinRM.

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

Następnie można zobaczyć oddzielne konfiguracje sesji programu PowerShell dla wersji zapoznawczej i stabilnych kompilacji programu PowerShell 6 oraz dla każdej konkretnej wersji.

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

user@host:port składnia obsługiwana przez protokół SSH

Klienci SSH zwykle obsługują parametry połączenia w formacie user@host:port. Po dodaniu protokołu SSH jako protokołu komunikacji zdalnej programu PowerShell dodaliśmy obsługę tego formatu parametrów połączenia:

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

Telemetrię można wyłączyć tylko za pomocą zmiennej środowiskowej

Program PowerShell wysyła podstawowe dane telemetryczne do firmy Microsoft po jej uruchomieniu. Dane obejmują nazwę systemu operacyjnego, wersję systemu operacyjnego i wersję programu PowerShell. Te dane pozwalają nam lepiej zrozumieć środowiska, w których jest używany program PowerShell, i umożliwia nam ustalanie priorytetów nowych funkcji i poprawek.

Aby zrezygnować z tej telemetrii, ustaw zmienną środowiskową POWERSHELL_TELEMETRY_OPTOUT na true, yeslub 1. Nie obsługujemy już usuwania pliku DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY w celu wyłączenia telemetrii.