Różnice między programem Windows PowerShell 5.1 i programem PowerShell 7.x
Program Windows PowerShell 5.1 jest oparty na programie .NET Framework w wersji 4.5. Wraz z wydaniem programu PowerShell 6.0 program PowerShell stał się projektem typu open source utworzonym na platformie .NET Core 2.0. Przejście z programu .NET Framework do platformy .NET Core pozwoliło programowi PowerShell stać się rozwiązaniem dla wielu platform. Program PowerShell działa w systemach Windows, macOS i Linux.
Istnieje kilka różnic w języku programu PowerShell między programem Windows PowerShell i programem PowerShell. Najbardziej istotne różnice dotyczą dostępności i zachowania poleceń cmdlet programu PowerShell między platformami Windows i innych niż Windows oraz zmian wynikających z różnic między programem .NET Framework i platformą .NET Core.
W tym artykule przedstawiono podsumowanie znaczących różnic i zmian powodujących niezgodność między programem 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 sposobu, w jaki różni się on od programu Windows PowerShell. Aby zapoznać się ze szczegółowym omówieniem zmian między wersjami i dodawaniem nowych funkcji, zobacz artykuły What's New dla każdej wersji.
- Co nowego w programie PowerShell 7.5
- Co nowego w programie PowerShell 7.4
- Co nowego w programie PowerShell 7.3
- Co nowego w programie PowerShell 7.2
- Co nowego w programie PowerShell 7.1
- Co nowego w programie PowerShell 7.0
- Co nowego w programie PowerShell 6.x
.NET Framework a .NET Core
Program PowerShell w systemach Linux i macOS używa platformy .NET Core, który jest podzbiorem pełnego programu .NET Framework w systemie 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 w systemie 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 Istotne zmiany dotyczące migracji z programu .NET Framework do platformy .NET Core.
Każda nowa wersja programu PowerShell jest oparta na nowszej wersji platformy .NET. Mogą wystąpić zmiany powodujące niezgodność na platformie .NET, które mają wpływ na program PowerShell.
- PowerShell 7.5 — zbudowany na platformie .NET 9.0
- PowerShell 7.4 — zbudowany na platformie .NET 8.0
- PowerShell 7.3 — zbudowany na platformie .NET 7.0
- PowerShell 7.2 (wersja LTS-current) — wbudowana na platformie .NET 6.0 (wersja LTS-current)
- PowerShell 7.1 — zbudowany na platformie .NET 5.0
- PowerShell 7.0 (LTS) — zbudowany na platformie .NET Core 3.1 (LTS)
- PowerShell 6.2 — zbudowany na platformie .NET Core 2.1
- PowerShell 6.1 — zbudowany na platformie .NET Core 2.1
- PowerShell 6.0 — zbudowany na platformie .NET Core 2.0
Wraz z pojawieniem się platformy .NET Standard 2.0 program PowerShell może załadować wiele tradycyjnych modułów programu Windows PowerShell bez modyfikacji. Ponadto program PowerShell 7 zawiera funkcję zgodności programu Windows PowerShell, która umożliwia korzystanie z modułów programu Windows PowerShell, które nadal wymagają pełnej struktury.
Aby uzyskać więcej informacji, zobacz:
Należy pamiętać o zmianach metody platformy .NET
Chociaż zmiany metody platformy .NET nie są specyficzne dla programu PowerShell, mogą mieć wpływ na skrypty, zwłaszcza jeśli bezpośrednio wywołujesz metody platformy .NET. Ponadto mogą istnieć nowe przeciążenia konstruktorów. Może to mieć wpływ na sposób tworzenia obiektów przy użyciu New-Object
metody lub [type]::new()
metody.
Na przykład platforma .NET dodała przeciążenia do [System.String]::Split()
metody, która nie jest dostępna w programie .NET Framework 4.5. Na poniższej liście przedstawiono przeciążenia metody dostępnej Split()
w programie Windows PowerShell 5.1:
PS> "".Split
OverloadDefinitions
-------------------
string[] Split(Params char[] separator)
string[] Split(char[] separator, int count)
string[] Split(char[] separator, System.StringSplitOptions options)
string[] Split(char[] separator, int count, System.StringSplitOptions options)
string[] Split(string[] separator, System.StringSplitOptions options)
string[] Split(string[] separator, int count, System.StringSplitOptions options)
Na poniższej liście przedstawiono przeciążenia metody dostępnej Split()
w programie PowerShell 7:
"".Split
OverloadDefinitions
-------------------
string[] Split(char separator, System.StringSplitOptions options)
string[] Split(char separator, int count, System.StringSplitOptions options)
string[] Split(Params char[] separator)
string[] Split(char[] separator, int count)
string[] Split(char[] separator, System.StringSplitOptions options)
string[] Split(char[] separator, int count, System.StringSplitOptions options)
string[] Split(string separator, System.StringSplitOptions options)
string[] Split(string separator, int count, System.StringSplitOptions options)
string[] Split(string[] separator, System.StringSplitOptions options)
string[] Split(string[] separator, int count, System.StringSplitOptions options)
W programie Windows PowerShell 5.1 można przekazać tablicę znaków (char[]
) do Split()
metody jako string
. Metoda dzieli ciąg docelowy w dowolnym wystąpieniu znaku w tablicy. Następujące polecenie dzieli ciąg docelowy w programie Windows PowerShell 5.1, ale nie w programie PowerShell 7:
# PowerShell 7 example
"1111p2222q3333".Split('pq')
1111p2222q3333
Aby powiązać z prawidłowym przeciążeniem, należy wpisać ciąg do tablicy znaków:
# PowerShell 7 example
"1111p2222q3333".Split([char[]]'pq')
1111
2222
3333
Moduły nie są już dostarczane z programem PowerShell
Ze względu na różne przyczyny 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 programie Windows PowerShell, która jest oparta na programie Windows Workflow Foundation (WF), która umożliwia tworzenie niezawodnych elementów Runbook dla 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 używania przepływu pracy programu PowerShell.
Jeśli istnieje potrzeba użycia punktów kontrolnych do wznowienia skryptu po ponownym uruchomieniu systemu operacyjnego, zalecamy uruchomienie skryptu podczas uruchamiania systemu operacyjnego, ale skrypt musi zachować swój własny stan (na przykład utrwalanie go w pliku).
Polecenia cmdlet usunięte z programu PowerShell
W przypadku modułów zawartych w programie PowerShell następujące polecenia cmdlet zostały usunięte z programu PowerShell z różnych powodów zgodności lub korzystania z nieobsługiwanych interfejsów API.
Moduł 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 usługi 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 w wersji 2) wykonują tę samą funkcję i udostępniają nowe funkcje oraz przeprojektowaną składnię.
New-WebServiceProxy
usunięto polecenie cmdlet
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ęto 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-WinEvent
i są dostępne do pobierania i New-WinEvent
tworzenia zdarzeń w systemie Windows.
Polecenia cmdlet korzystające z platformy Windows Presentation Framework (WPF)
Platforma .NET Core 3.1 dodała obsługę platformy WPF, więc wydanie programu PowerShell 7.0 przywróciło następujące funkcje specyficzne dla systemu Windows:
- Polecenie
Show-Command
cmdlet - Polecenie
Out-GridView
cmdlet - Parametr ShowWindow
Get-Help
Zmiany konfiguracji żądanego stanu programu PowerShell (DSC)
Invoke-DscResource
funkcja eksperymentalna 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 w blogu zespołu programu PowerShell.
Zmiany plików wykonywalnych 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 programu 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#!
(np. shebang) w skryptach programu PowerShell wykonywanych z powłok innych niż PowerShell na platformach innych niż Windows. Oznacza to również, że można uruchamiać polecenia, takie jakpwsh foo.ps1
lubpwsh fooScript
bez określania-File
. Jednak ta zmiana wymaga jawnego określenia-c
lub-Command
próby uruchomienia poleceń, takich jakpwsh.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
zpwsh.exe
. - Zmieniono
pwsh -version
i wbudowaną pomoc,pwsh.exe
aby 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 w systemie 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
w celu wykonania skryptu programu PowerShell nie -File
podano możliwości przekazania $true
/$false
jako wartości parametrów. Dodano obsługę parsowanych $true
/$false
wartości do parametrów. Obsługiwane są również wartości przełączników.
Ulepszona zgodność z poprzednimi wersjami za pomocą programu Windows PowerShell
W przypadku systemu Windows nowy parametr przełącznika UseWindowsPowerShell jest dodawany do programu Import-Module
. Ten przełącznik tworzy moduł proxy w programie PowerShell 7, który używa lokalnego procesu programu Windows PowerShell do niejawnego uruchamiania dowolnych poleceń cmdlet zawartych w tym module. Aby uzyskać więcej informacji, zobacz Import-Module.
Aby uzyskać więcej informacji na temat modułów firmy Microsoft współdziałających z programem PowerShell 7.0, zobacz tabelę zgodności modułów.
Obsługa usługi Microsoft Update dla systemu 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 usługi Windows Update (WU), niezależnie od tego, czy jest to windows Update dla firm, WSUS, SCCM, czy interaktywne okno dialogowe jednostki 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) — wyraża zgodę na aktualizowanie za pośrednictwem usługi Microsoft Update lub WSUS0
— 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 automatycznej Aktualizacje lub Windows Update0
— Nie zezwalaj na korzystanie z usługi Microsoft Update automatycznej Aktualizacje lub Windows Update
Zmiany aparatu
Obsługa programu PowerShell jako domyślnej powłoki systemu Unix
W systemie Unix jest to konwencja akceptowania powłoki -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ę z przełącznikiem -i
. Ta zmiana jest niezgodna z tym, że -i
wcześniej można użyć jako krótkiej ręki, aby dopasować -inputformat
wartość , która teraz musi być następująca -in
: .
Niestandardowe przystawki
Przystawki programu PowerShell są poprzednikiem 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 przystawek i ich brak 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ą funkcji Enable-ExperimentalFeature
i Disable-ExperimentalFeature
.
Załaduj zestaw ze ścieżki podstawowej modułu przed próbą załadowania z usługi GAC
Wcześniej, gdy moduł binarny ma zestaw modułu w GAC, załadowaliśmy zestaw z 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
W przypadku parametrów Mandatory
i ValidateNotNullOrEmpty
ValidateNotNull
atrybutów pomiń element null sprawdzanie, czy typ elementu kolekcji jest typem wartości.
Zachowaj $?
wartości ParenExpression, SubExpression i ArrayExpression
To żądanie ściągnięcia zmienia sposób kompilowania podpipelines (...)
, podexpressions $(...)
i wyrażeń tablicy @()
, tak aby $?
nie było automatycznie prawdziwe. Zamiast tego wartość parametru $?
zależy od wyniku wykonania potoku lub instrukcji.
Poprawka $?
, która nie jest $false
poprawna, gdy polecenie natywne zapisuje w stderr
$?
nie jest ustawiona na $false
wartość , gdy natywne polecenie zapisuje wartość .stderr
Często zdarza się, że polecenia natywne zapisu w stderr
usłudze nie mają zamiaru wskazywać błędu. $?
jest ustawiona na $false
wartość tylko wtedy, gdy natywne polecenie 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 w stderr
usłudze nie mają zamiaru wskazywać błędu. 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 natywnego polecenia.
Zmień $OutputEncoding
, aby używać 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.
Ujednolicenie poleceń cmdlet z parametrem -Encoding
jako typu System.Text.Encoding
Wartość Byte
została usunięta -Encoding
z poleceń cmdlet dostawcy systemu plików. Nowy parametr -AsByteStream
, jest 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 z modelem BOM, tworząc problem dla narzędzi systemu Linux. Ta zmiana powodująca niezgodność zmienia kodowanie New-ModuleManifest
utF (bez modelu BOM) na platformach innych niż Windows.
Usuń AllScope
z większości domyślnych aliasów
Aby przyspieszyć tworzenie zakresu, AllScope
został usunięty 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
już nie przesłania $ErrorActionPreference
Wcześniej, jeśli -Verbose
została określona lub -Debug
została określona, przesunie zachowanie elementu $ErrorActionPreference
. Z tą zmianą -Verbose
i -Debug
nie ma już wpływu na zachowanie programu $ErrorActionPreference
.
-Debug
Ponadto parametr ustawia $DebugPreference
wartość Continue zamiast Inquire.
Spójne $PSCulture
odzwierciedlanie zmian kultury sesji
W programie Windows PowerShell bieżąca wartość kultury jest buforowana, co pozwala na brak synchronizacji wartości z kulturą jest zmieniana po uruchomieniu sesji. To zachowanie buforowania zostało naprawione w rdzeniu programu PowerShell.
Zezwalaj jawnie określonego nazwanego parametru na zastępowanie tego samego parametru z rozplatania tabeli skrótów
Dzięki tej zmianie nazwane parametry z rozplatania są przenoszone na końcu listy parametrów, aby były 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 przeplatania na końcu listy argumentów zmienia kolejność wyświetlania parametrów w pliku $args
.
Na 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ę wypchane do "$args" wraz z Blah = "World"
PS> $hash = @{ Name = "Hello"; Blah = "World" }
PS> SimpleTest @hash "MyPath"
Name: Hello; Path: ; Args: -Blah: World MyPath
Dzięki tej zmianie argumenty z @hash
są przenoszone na koniec 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 zwróci 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 łączenia wartości null przypisuje wartość operandu prawego do operandu po lewej stronie tylko wtedy, gdy operand po lewej stronie daje wartość null. ??=
Operator nie ocenia operandu po prawej stronie, jeśli operand po lewej stronie zwróci 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 pozwala ?
być częścią nazwy zmiennej, formalna specyfikacja nazwy zmiennej jest wymagana do korzystania z tych operatorów. Dlatego należy używać {}
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 nie ${<name>}
powinna być mylona z operatorem $()
podexpressionu. 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łączone PSCustomObject
Dodaliśmy nowe metody i właściwości do elementu PSCustomObject
. 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 i 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]::AggregateString
elementu :
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 kontrolek niedrukowane.
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ę systemu 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 kodzie HTML.
W programie PowerShell 6.1 dodano następujące polecenia cmdlet:
- 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 kod 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 zwiększa 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 $ErrorView
preferencji .
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 wielowierszowy komunikat o błędzie zawierający błąd, wskaźnik i komunikat o błędzie pokazujący, gdzie błąd znajduje się w tym wierszu. Jeśli terminal nie obsługuje sekwencji ucieczki kolorów ANSI (VT100), kolory nie są wyświetlane.
Widok domyślny w programie PowerShell 7 to ConciseView. Poprzedni widok domyślny to NormalView i można go wybrać, ustawiając zmienną $ErrorView
preferencji .
$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 wyróżniającego komunikatu o błędzie.
Nowe Get-Error
polecenie 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óre 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.
Zmiany poleceń cmdlet
Wykonywanie równoległe dodane do obiektu ForEach-Object
Począwszy od programu PowerShell 7.0, polecenie cmdlet, ForEach-Object
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.
Ten przykład pobiera 50 000 wpisów dziennika z 5 dzienników systemowych na lokalnym komputerze z systemem 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. Ustawieniem domyślnym jest 5.
Użyj zmiennej $_
do reprezentowania bieżącego obiektu wejściowego w bloku skryptu. $using:
Użyj zakresu, aby przekazać odwołania do zmiennych do uruchomionego bloku skryptu.
Aby uzyskać więcej informacji, zobacz ForEach-Object.
Sprawdzanie system32
zgodnych wbudowanych modułów w systemie Windows
W aktualizacjach systemu 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 jest automatycznie uwzględniana $windir\System32
jako część zmiennej środowiskowej PSModulePath
. Jednak uwidacznia moduły tylko wtedyGet-Module
, gdy CompatiblePSEdition
jego element jest oznaczony jako zgodny z elementem Core
.Import-Module
To zachowanie można zastąpić, aby pokazać wszystkie moduły przy użyciu parametru -SkipEditionCheck
switch.
Dodaliśmy również PSEdition
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 będzie traktować go tak samo jak -Path
i jeśli symbol wieloznaczny nie znalazł żadnych plików, będzie dyskretnie zamknąć. 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.
Usuń -Protocol
z *-Computer
poleceń cmdlet
Ze względu na problemy z komunikacji zdalnej RPC w systemie 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. Model DCOM nie jest już obsługiwany w przypadku komunikacji zdalnie. Następujące polecenia cmdlet obsługują tylko komunikacji zdalną programu WSMAN:
Rename-Computer
Restart-Computer
Stop-Computer
Usuń -ComputerName
z *-Service
poleceń cmdlet
Aby zachęcić do spójnego używania protokołu PSRP, -ComputerName
parametr został usunięty z *-Service
poleceń cmdlet.
Poprawka Get-Content -Delimiter
, która 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 powoduje usunięcie ogranicznika w zwracanych wierszach.
Zmiany w Format-Hex
Parametr -Raw
jest teraz "no-op" (w tym, że nic nie robi). 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
był robiony przed tą zmianą.
Poprawka literówki w nazwie właściwości Get-ComputerInfo
BiosSerialNumber
został błędnie napisany jako 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ótu nie są obsługiwane przez coreFX, dlatego nie są już dostępne:
MACTripleDES
RIPEMD160
Dodaj walidację poleceń Get-*
cmdlet, w których przekazywanie $null zwraca wszystkie obiekty zamiast błędu
Przekazanie $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, a wymagana jest dodatkowa akcja. Dzięki tej zmianie obsługiwany jest rozszerzony format dziennika W3C.
Import-Csv
stosuje PSTypeNames
się podczas importowania, gdy w pliku CSV znajdują się informacje o typie
Wcześniej obiekty eksportowane przy użyciu Export-CSV
polecenia z importem TypeInformation
ConvertFrom-Csv
nie zachowywał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 domyślnie włączony 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 ona rozumiana przez większość narzędzi CSV. Ta zmiana została wprowadzona w celu rozwiązania problemu z opiniami 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 będzie traktować go tak samo jak -Path
i jeśli symbol wieloznaczny nie znalazł żadnych plików, będzie dyskretnie zamknąć. 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 funkcja zwraca teraz posortowaną listę grup.
Mimo że nie należy polegać na zamówieniu, można przerwać tę zmianę, jeśli chcesz pierwszej grupy. Postanowiliśmy, że ta poprawa wydajności jest warta zmiany, ponieważ wpływ bycia zależnym od poprzedniego zachowania jest niski.
Odchylenie standardowe w Measure-Object
Dane wyjściowe z Measure-Object
tej pory 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 SecureString
wartość . 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 systemie Windows o nazwie more
, która została opakowana more.com
. Ta funkcja została usunięta.
Ponadto funkcja została zmieniona help
tak, aby korzystała z more.com
systemu Windows lub domyślnego stronicowania systemu określonego przez $env:PAGER
na platformach innych niż Windows.
cd DriveName:
teraz zwraca użytkowników do bieżącego katalogu roboczego na tym dysku
Wcześniej przy użyciu polecenia Set-Location
lub cd
powrotu do usługi PSDrive użytkownicy do domyślnej lokalizacji 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 i cd --
zmień wartość na $HOME
.
Update-Help
jako administrator inny niż administrator
Według popularnego zapotrzebowania Update-Help
nie trzeba już działać jako administrator. Update-Help
teraz domyślnie zapisuje pomoc w folderze o zakresie użytkownika.
Where-Object -Not
Dodanie parametru -Not
do Where-Object
elementu 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 żadnych 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 przełomowych zmian w programie Invoke-WebRequest
i Invoke-RestMethod
.
Invoke-WebRequest
teraz obsługuje tylko podstawowe analizowanie KODU HTML.Invoke-WebRequest
zawsze zwracaBasicHtmlWebResponseObject
obiekt. WłaściwościParsedHtml
iForms
zostały usunięte.BasicHtmlWebResponseObject.Headers
wartości są terazString[]
zamiastString
.BasicHtmlWebResponseObject.BaseResponse
jest teraz obiektemSystem.Net.Http.HttpResponseMessage
.- Właściwość
Response
w przypadku wyjątków poleceń cmdlet sieci Web jest teraz obiektemSystem.Net.Http.HttpResponseMessage
. - Dokładne analizowanie nagłówków RFC jest teraz domyślne dla parametru
-Headers
i-UserAgent
. Można go pominąć za pomocą polecenia-SkipHeaderValidation
. file://
schematy identyfikatorówftp://
URI nie są już obsługiwane.System.Net.ServicePointManager
ustawienia nie są już honorowane.- Obecnie w systemie macOS nie ma dostępnego uwierzytelniania opartego na certyfikatach.
- Użycie identyfikatora
-Credential
http://
URI spowoduje wystąpienie błędu. Użyj identyfikatorahttps://
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ślną 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 wartość UTF-8 dla
application-json
odpowiedzi - Dodano
-SkipHeaderValidation
parametr zezwalający naContent-Type
nagłówki, które nie są zgodne ze standardami - Dodano
-Form
parametr do obsługi uproszczonejmultipart/form-data
obsługi - Zgodne, bez uwzględniania wielkości liter obsługa kluczy relacyjnych
- Dodano
-Resume
parametr dla poleceń cmdlet sieci Web
Funkcja Invoke-RestMethod zwraca przydatne informacje, gdy żadne dane nie są zwracane
Gdy interfejs API zwróci tylko null
wartość , Invoke-RestMethod
serializował to jako ciąg "null"
zamiast $null
. Ta zmiana naprawia logikę w pliku w Invoke-RestMethod
celu prawidłowego serializowania prawidłowego literału JSON null
o pojedynczej wartości jako $null
.
Polecenia cmdlet sieci Web ostrzegają, gdy -Credential
są wysyłane przez nieszyfrowane połączenia
W przypadku korzystania z protokołu HTTP zawartość zawierająca hasła jest wysyłana jako zwykły tekst. Ta zmiana ma nie zezwalać na to domyślnie i zwracać błąd, jeśli poświadczenia są przekazywane niezabezpieczone. Użytkownicy mogą pominąć to za pomocą przełącznika -AllowUnencryptedAuthentication
.
Ustaw -OutFile
parametr w poleceniach cmdlet sieci Web, 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 w interfejsie API
Usuń AddTypeCommandBase
klasę
Klasa została usunięta AddTypeCommandBase
z Add-Type
klasy, aby zwiększyć 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 dodatku
W przeszłości można było skompilować kod języka Visual Basic przy użyciu Add-Type
polecenia cmdlet . Języka Visual Basic rzadko używano z Add-Type
programem . Usunęliśmy tę funkcję, aby zmniejszyć rozmiar programu PowerShell.
Usunięto RunspaceConfiguration
obsługę
Wcześniej podczas programowego tworzenia przestrzeni uruchomieniowej programu PowerShell przy użyciu interfejsu API można użyć starszych RunspaceConfiguration
lub nowszych InitialSessionState
klas. Ta zmiana usunęła obsługę programu RunspaceConfiguration
i obsługuje tylko funkcję InitialSessionState
.
CommandInvocationIntrinsics.InvokeScript
wiązanie argumentów z $input
zamiast $args
Niepoprawna pozycja parametru spowodowała przekazanie wartości args jako danych wejściowych zamiast jako args.
Usuń ClrVersion
właściwości i BuildVersion
z $PSVersionTable
Właściwość elementu $PSVersionTable
nie jest przydatna ClrVersion
w przypadku coreCLR. Użytkownicy końcowi nie powinni używać tej wartości do określania zgodności.
Właściwość BuildVersion
została powiązana z wersją kompilacji systemu 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 uruchomić 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 elementów CommandTypes.Workflow
i w pliku System.Management.AutomationWorkflowInfo
.
Te drobne zmiany powodujące niezgodność wpływają głównie na kod dostawcy pomocy.
- Zmień publiczne konstruktory
WorkflowInfo
na wewnętrzne. Nie obsługujemy już przepływu pracy, dlatego warto nie zezwalać użytkownikom na tworzenieWorkflow
wystąpień. - Usuń typ System.Management.Automation.DebugSource , ponieważ jest używany tylko do debugowania przepływu pracy.
- Usuń przeciążenie
SetParent
z abstrakcyjnego debugera klasy, który jest używany tylko do debugowania przepływu pracy. - Usuń to samo przeciążenie
SetParent
klasy pochodnej RemotingJobDebugger.
Nie zawijaj zwracanych wyników podczas PSObject
konwertowania na ScriptBlock
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
element 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 zdalnie
Komunikacja zdalna programu PowerShell (PSRP) przy użyciu usługi WinRM na platformach Unix wymaga protokołu NTLM/Negotiate lub podstawowego uwierzytelniania za pośrednictwem protokołu HTTPS. Protokół PSRP w systemie macOS obsługuje tylko uwierzytelnianie podstawowe za pośrednictwem protokołu HTTPS. Uwierzytelnianie oparte na protokole Kerberos nie jest obsługiwane dla 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
Program PowerShell Direct 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 programu 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życia programu powershell.exe
.
Enable-PSRemoting
Teraz tworzy oddzielne punkty końcowe komunikacji wirtualnej dla wersji zapoznawczych
Enable-PSRemoting
teraz tworzy dwie konfiguracje sesji komunikacji wirtualnej:
- Jeden dla wersji głównej programu PowerShell. Na przykład
PowerShell.6
. Ten punkt końcowy, którego można polegać na aktualizacjach wersji pomocniczych jako konfiguracji 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ć zainstalowane i dostępne na tym samym komputerze wiele wersji programu PowerShell 6.
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 do komunikacji zdalnej programu PowerShell dodaliśmy obsługę tego formatu parametry 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
, yes
lub 1
. Nie obsługujemy już usuwania pliku DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY
w celu wyłączenia telemetrii.