Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Windows program PowerShell 5.1 jest oparty na platformie .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 platformy .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 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 zmiany wynikające z różnic między programem .NET Framework i .NET Core.
W tym artykule przedstawiono podsumowanie znaczących różnic i zmian łamiących zgodność między programem Windows PowerShell a bieżącą wersją PowerShell. To podsumowanie nie obejmuje nowych funkcji ani dodanych poleceń cmdlet. W tym artykule nie omówiono zmian między wersjami. Celem tego artykułu jest przedstawienie bieżącego stanu programu PowerShell i jak różni się on od 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 vs .NET Core
Program PowerShell w systemach Linux i macOS używa .NET core, który jest podzbiorem pełnej platformy .NET Framework w 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 Krytyczne zmiany przy migracji z .NET Framework do .NET Core.
Każda nowa wersja programu PowerShell jest oparta na nowszej wersji .NET. Mogą wystąpić zmiany przełamujące w .NET, które mogą mieć wpływ na program PowerShell.
- PowerShell 7.6 — oparty na .NET 10.0 (LTS)
- PowerShell 7.5 — oparty na .NET 9.0
- PowerShell 7.4 — oparty na .NET 8.0 (LTS)
- PowerShell 7.3 — oparty na .NET 7.0
- PowerShell 7.2 — oparty na .NET 6.0 (LTS)
- PowerShell 7.1 — oparty na .NET 5.0
- PowerShell 7.0 — oparty na .NET Core 3.1 (LTS)
- PowerShell 6.2 — zbudowany na .NET Core 2.1
- PowerShell 6.1 — oparty na .NET Core 2.1
- PowerShell 6.0 — oparty na .NET Core 2.0
Wraz z pojawieniem się .NET Standard 2.0 program PowerShell może załadować wiele tradycyjnych modułów programu PowerShell Windows bez modyfikacji. Ponadto program PowerShell 7 zawiera funkcję zgodności Windows PowerShell, która umożliwia korzystanie z modułów programu Windows PowerShell, które nadal wymagają pełnego frameworka.
Aby uzyskać więcej informacji, zobacz:
Należy pamiętać o zmianach metody .NET
Chociaż zmiany metody .NET nie są specyficzne dla programu PowerShell, mogą mieć wpływ na skrypty, zwłaszcza jeśli bezpośrednio wywołujesz metody .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 .NET dodano przeciążenia do metody [System.String]::Split(), która nie jest dostępna w programie .NET Framework 4.5. Na poniższej liście przedstawiono przeciążenia metody Split() dostępne 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 metody Split() 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.
- ISE
- Microsoft.PowerShell.LocalAccounts
- Microsoft.PowerShell.ODataUtils
- Microsoft.PowerShell.Operation.Validation
- PSScheduledJob
- PSWorkflow
- PSWorkflowUtility
Przepływ pracy programu PowerShell
Przepływ pracy PowerShell jest funkcją w programie Windows PowerShell, która bazuje na Windows Workflow Foundation (WF), umożliwiając tworzenie niezawodnych runbooków na potrzeby długotrwałych lub równoległych zadań.
Ze względu na brak obsługi programu Windows Workflow Foundation w programie .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, aby wznowić skrypt po ponownym uruchomieniu systemu operacyjnego, zalecamy użycie Harmonogramu zadań do uruchomienia skryptu przy starcie systemu operacyjnego, ale skrypt musi samodzielnie utrzymywać stan (na przykład zapisując go do 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.
CimCmdlets
Export-BinaryMiLog
Microsoft.PowerShell.Core
Add-PSSnapinExport-ConsoleGet-PSSnapinRemove-PSSnapinResume-JobSuspend-Job
Microsoft.PowerShell.Diagnostics
Export-CounterImport-Counter
Microsoft.PowerShell.Management
Add-ComputerCheckpoint-ComputerClear-EventLogComplete-TransactionDisable-ComputerRestoreEnable-ComputerRestoreGet-ComputerRestorePointGet-ControlPanelItemGet-EventLogGet-TransactionGet-WmiObjectInvoke-WmiMethodLimit-EventLogNew-EventLogNew-WebServiceProxyRegister-WmiEventRemove-ComputerRemove-EventLogRemove-WmiObjectReset-ComputerMachinePasswordRestore-ComputerSet-WmiInstanceShow-ControlPanelItemShow-EventLogStart-TransactionTest-ComputerSecureChannelUndo-TransactionUse-TransactionWrite-EventLog
Microsoft.PowerShell.Utility
Convert-StringConvertFrom-String
PSDesiredStateConfiguration
Disable-DscDebugEnable-DscDebugGet-DscConfigurationGet-DscConfigurationStatusGet-DscLocalConfigurationManagerPublish-DscConfigurationRemove-DscConfigurationDocumentRestore-DscConfigurationSet-DscLocalConfigurationManagerStart-DscConfigurationStop-DscConfigurationTest-DscConfigurationUpdate-DscConfiguration
Polecenia cmdlet WMI v1
Następujące polecenia cmdlet WMI v1 zostały usunięte z PowerShell:
Register-WmiEventSet-WmiInstanceInvoke-WmiMethodGet-WmiObjectRemove-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
.NET Core nie obsługuje platformy Windows Communication Framework, która zapewnia usługi do korzystania z protokołu SOAP. Polecenie cmdlet zostało usunięte, ponieważ wymaga protokołu SOAP.
*-Transaction Usunięto polecenia cmdlet
Cmdlety były używane w bardzo ograniczonym zakresie. Podjęto decyzję o zaprzestaniu wsparcia dla nich.
Complete-TransactionGet-TransactionStart-TransactionUndo-TransactionUse-Transaction
cmdlet *-EventLog polecenia
Ze względu na użycie niewspieranych interfejsów API, polecenia *-EventLog cmdlet zostały usunięte z PowerShella.
Get-WinEvent i New-WinEvent są dostępne do pobierania i tworzenia zdarzeń w systemie Windows.
Polecenia cmdlet korzystające z platformy Windows Presentation Framework (WPF)
.NET Core 3.1 dodano obsługę WPF, dlatego wydanie programu PowerShell 7.0 przywróciło następujące funkcje specyficzne dla Windows:
- Polecenie
Show-Commandcmdlet - Polecenie
Out-GridViewcmdlet - Parametr ShowWindow
Get-Help
Zmiany w Desired State Configuration w 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 w blogu zespołu programu PowerShell.
Zmiany plików wykonywalnych programu PowerShell
Zmieniono nazwę 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 w pwsh(.exe) z powershell.exe.
- Zmieniono pierwszy parametr pozycyjny z
-Commandna-File. Ta zmiana naprawia użycie#!(znany również 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 jakpwsh foo.ps1lubpwsh fooScriptbez określania-File. Jednak ta zmiana wymaga jawnego określenia-club-Commandprzy próbie uruchomienia poleceń, takich jakpwsh.exe -Command Get-Command. -
pwshakceptuje przełącznik-i(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
-ImportSystemModulesi-PSConsoleFilezpwsh.exe. - Zmieniono
pwsh -Versioni wbudowaną pomoc dlapwsh.exe, aby wyrównać je z innymi narzędziami natywnymi. - Nieprawidłowe komunikaty o błędach argumentów dla
-Filei-Commandoraz kody zakończenia zgodne ze standardami systemu Unix - Dodano parametr
-WindowStylew Windows. Podobnie bezpośrednie aktualizacje instalacji oparte na pakietach na platformach innych niż Windows są aktualizacjami bezpośrednimi.
Skrócona nazwa jest również zgodna z nazewnictwem powłok systemowych na platformach innych niż Windows.
Obsługa wykonywania skryptu PowerShell z parametrem bool
Wcześniej używając pwsh.exe do wykonania skryptu PowerShell za pomocą -File nie było sposobu na przekazanie $true/$false jako wartości parametrów. Dodano obsługę wartości parsowanych jako parametry $true/$false. Obsługiwane są również wartości przełączników.
Ulepszona zgodność z poprzednimi wersjami za pomocą programu Windows PowerShell
W przypadku Windows nowy parametr [switch]UseWindowsPowerShell jest dodawany do Import-Module. Ten parametr tworzy moduł proxy w programie PowerShell 7, który używa lokalnego procesu Windows programu PowerShell do niejawnego uruchamiania dowolnych 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 Microsoft współpracują z programem PowerShell 7.0, zobacz tabelę zgodności Module.
obsługa aktualizacji Microsoft dla Windows
Program PowerShell 7.2 dodał obsługę aktualizacji Microsoft. 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 ustawieniach.
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 aktualizację za pomocą Microsoft Update lub WSUS -
0— nie zezwalaj na aktualizowanie za pośrednictwem usługi Microsoft Update lub WSUS
-
ENABLE_MU-
1(ustawienie domyślne) wybiera opcję korzystania z aktualizacji Microsoft Update, Aktualizacji Automatycznych lub Windows Update -
0— nie zezwalaj na używanie usługi Microsoft Update, Aktualizacji automatycznych lub Windows Update
-
Zmiany silnika
Obsługa programu PowerShell jako domyślnej powłoki systemu Unix
W systemie Unix przyjęto konwencję, że powłoki używają -i do inicjowania trybu interaktywnego powłoki, a wiele narzędzi oczekuje tego zachowania (na przykład script oraz gdy ustawiany jest PowerShell jako domyślna powłoka) i wywołuje powłokę z przełącznikiem -i. Ta zmiana powoduje istotną zmianę, ponieważ -i wcześniej można było używać jako skrótu do dopasowania -InputFormat, co teraz musi być -in.
Niestandardowe przystawki
Przystawki programu PowerShell są poprzednikiem modułów programu PowerShell, które nie są powszechnie stosowane 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
Włączona obsługa programu PowerShell 6.2 dla funkcji Experimental. 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 elementami typu wartości
W przypadku parametru Mandatory oraz atrybutów ValidateNotNull i ValidateNotNullOrEmpty, pomiń sprawdzenie null-elementu, jeśli typ elementu kolekcji jest typem wartości.
Zachowaj $? dla ParenExpression, SubExpression i ArrayExpression
To żądanie zmiany zmienia sposób kompilowania podprzepływów (...), podwyrażeń $(...) i wyrażeń tablicowych @(), tak aby $? nie było automatycznie prawdziwe. Zamiast tego wartość parametru $? zależy od wyniku potoku lub wykonania instrukcji.
Popraw $?, aby nie był $false, gdy polecenie natywne zapisuje do stderr
$? nie jest ustawione na $false, gdy natywne polecenie zapisuje do stderr. Typowe jest, aby polecenia natywne zapisywały dane stderr bez zamiaru wskazywania awarii.
$? jest ustawiona na $false wartość tylko wtedy, gdy natywne polecenie ma kod zakończenia inny niż zero.
Nie pozwalaj, by $ErrorActionPreference wpływał na stderr dane wyjściowe poleceń natywnych
Typowe jest, aby polecenia natywne zapisywały dane stderr bez zamiaru wskazywania awarii. Dzięki tej zmianie stderr dane wyjściowe są nadal przechwytywane w obiektach ErrorRecord, ale środowisko uruchomieniowe nie stosuje już $ErrorActionPreference, jeśli 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.
Ujednolić polecenia cmdlet, aby parametr -Encoding był typu System.Text.Encoding
Wartość -EncodingByte została usunięta z cmdletów 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ń kodowanie New-ModuleManifest na UTF8NoBOM na platformach innych niż Windows
Wcześniej New-ModuleManifest tworzy psd1 manifesty w formacie UTF-16 ze znacznikiem BOM, co powoduje problemy dla narzędzi systemu Linux. Ta zmiana powodująca niekompatybilność aktualizuje kodowanie New-ModuleManifest do UTF-8 (bez 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 zarezerwowano dla kilku często używanych aliasów, gdzie wyszukiwanie było szybsze.
-Verbose i -Debug już nie nadpisują $ErrorActionPreference
Wcześniej, jeśli określono -Verbose lub -Debug, nadpisywało to 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 Windows PowerShell bieżąca wartość ustawień regionalnych jest buforowana, co może prowadzić do niespójności wartości, jeśli ustawienia regionalne zostaną zmienione po rozpoczęciu 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 wynikające z tzw. splattingu są przenoszone na koniec listy parametrów, aby zostały powiązane po tym, jak wszystkie jawnie określone nazwane parametry zostaną 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 MyPath nie jest przypisany do -Path, gdyż jest trzecim argumentem w wykazie argumentów. Więc ostatecznie jest umieszczane w '$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 elementem -Path.
PS> SimpleTest @hash "MyPath"
Name: Hello; Path: MyPath; Args: -Blah: World
Zmiany języka
Operator współistnienia wartości null ??
Operator łączenia wartości null ?? zwraca wartość operandu po lewej stronie, jeśli nie jest równa null.
W przeciwnym razie oblicza operand po prawej stronie i zwraca jego wynik. Operator ?? nie przetwarza 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 z łączeniem wartości null ??= przypisuje wartość operandu prawego do operandu lewostronnego tylko wtedy, gdy operand lewostronny jest oceniany jako null. Operator ??= nie przetwarza 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 dotyczące wartości null
Uwaga
Ta funkcja została przeniesiona z eksperymentalnego do głównego nurtu w programie PowerShell 7.1.
Operator warunkowy null stosuje operację dostępu do składowych ?. lub elementów ?[] do swojego argumentu tylko wtedy, gdy ten argument jest różny od null, a w przeciwnym razie zwraca null.
Ponieważ program PowerShell umożliwia ? być częścią nazwy zmiennej, do korzystania z tych operatorów wymagana jest formalna specyfikacja nazwy zmiennej. Dlatego należy używać {} w pobliżu 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 członka 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 podwyrażenia $(). Aby uzyskać więcej informacji, zobacz sekcję Nazwa zmiennej about_Variables.
Dodano & operator kontroli zadań
Umieszczenie & na końcu potoku powoduje jego uruchomienie jako zadania w tle w programie PowerShell. Gdy pipeline jest w tle, zwracany jest obiekt zadaniowy. Po uruchomieniu potoku jako zadania wszystkie standardowe *-Job polecenia cmdlet mogą służyć do zarządzania zadaniem. Zmienne (z pominięciem zmiennych specyficznych dla procesu) używane w potoku są automatycznie kopiowane do zadania, więc Copy-Item $foo $bar & działa bez problemu. Zadanie jest również uruchamiane w bieżącym katalogu zamiast katalogu macierzystego użytkownika.
Nowe metody/właściwości na 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 również ForEach metody oraz Where, które umożliwiają operowanie 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ści delegata do [M]::AggregateString:
class M {
static [int] DoubleStrLen([string] $value) { return 2 * $value.Length }
static [long] AggregateString([string[]] $values, [Func[string, int]] $selector) {
[long] $res = 0
foreach($s in $values){
$res += $selector.Invoke($s)
}
return $res
}
}
[M]::AggregateString((gci).Name, [M]::DoubleStrLen)
Zachowanie porównania ciągów zostało zmienione w programie PowerShell 7.1
Program PowerShell 7.1 jest oparty na wersji .NET 5.0, która wprowadziła następującą zmianę powodującą niezgodność:
Od .NET 5.0 porównania ciągów znaków niezależne od kultury ignorują znaki sterujące, które nie są drukowane.
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 Get-Uptime polecenie cmdlet
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 Remove-Alias polecenie cmdlet
Polecenie cmdlet Remove-Alias usuwa alias z bieżącej sesji programu PowerShell. Polecenie cmdlet zostało wprowadzone w programie PowerShell 6.0.
Nowe Remove-Service polecenie cmdlet
Polecenie cmdlet Remove-Service usuwa usługę Windows w rejestrze i w bazie danych usługi. Polecenie cmdlet Remove-Service zostało wprowadzone w programie PowerShell 6.0.
Nowe polecenia Cmdlet 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 — przekonwertuj 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 Test-Json polecenie cmdlet
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 Join-String polecenie cmdlet
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 $ErrorViewpreferencji .
W ConciseView, jeśli błąd nie pochodzi od błędu skryptu lub parsera, to jest to komunikat o błędzie w jednej linii:
Get-ChildItem -Path C:\NotReal
Get-ChildItem: Can't find path 'C:\NotReal' because it doesn't 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 przejścia 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ą $ErrorViewpreferencji .
$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-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ł.
Cmdlet Get-Error 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 w cmdletach
Dodano wykonywanie równoległe do ForEach-Object
Począwszy od wersji 7.0 programu PowerShell, polecenie cmdlet ForEach-Object, które iteruje elementy w kolekcji, ma teraz wbudowane przetwarzanie równoległe dzięki nowemu parametrowi 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 lokalnym komputerze 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 logu 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. Użyj modyfikatora zakresu Using:, aby przekazać odwołania do zmiennych do aktualnie uruchamianego bloku skryptu.
Aby uzyskać więcej informacji, zobacz ForEach-Object.
Sprawdź system32, aby znaleźć zgodne wbudowane moduły w systemie 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.
Gdy PowerShell się uruchamia, automatycznie uwzględnia $windir\System32 jako część zmiennej środowiskowej PSModulePath. Jednak moduły są ujawniane tylko dla Get-Module i Import-Module, jeśli ich CompatiblePSEdition jest oznaczony jako zgodny z Core.
To zachowanie można zastąpić, aby pokazać wszystkie moduły przy użyciu parametru -SkipEditionCheck[switch] . Dodaliśmy również właściwość PSEdition do wyników tabeli.
-lp alias dla wszystkich -LiteralPath parametrów
Utworzyliśmy standardowy alias parametru -lp dla wszystkich wbudowanych poleceń cmdlet programu PowerShell z parametrem -LiteralPath.
Napraw Get-Item -LiteralPath a*b, jeśli a*b faktycznie nie istnieje, aby zwrócić błąd.
Wcześniej, -LiteralPath przy nadanym symbolu wieloznacznym traktował go tak samo jak -Path i jeśli symbol wieloznaczny nie znalazł żadnych plików, dyskretnie się zamykał. Poprawne zachowanie powinno być takie, że -LiteralPath jest literałem, więc jeśli plik nie istnieje, pojawia się błąd. Zmiana polega na traktowaniu symboli wieloznacznych używanych z -Literal jako dosłowne znaki.
Ustaw katalog roboczy na obecny 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
Parametr -Protocol został usunięty z następujących poleceń cmdlet:
Rename-ComputerRestart-ComputerStop-Computer
DCOM nie jest już obsługiwany do zdalnego połączenia. Polecenia cmdlet obsługują tylko komunikację zdalną WSMAN.
Usuń -ComputerName z *-Service poleceń cmdlet
Aby zachęcić do spójnego używania protokołu PSRP, parametr -ComputerName został usunięty z poleceń cmdlet *-Service. Użyj Invoke-Command do uruchamiania poleceń cmdlet na komputerach zdalnych.
Napraw Get-Content -Delimiter tak, 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 powoduje usunięcie ogranicznika w zwracanych wierszach.
Zmiany w Format-Hex
Parametr -Raw teraz nic nie robi. Polecenie Format-Hex cmdlet wyświetla pełną reprezentację liczb, która zawiera wszystkie bajty odpowiednie dla ich typu. To jest to, co parametr -Raw robił przed tą zmianą.
Poprawka literówki w Get-ComputerInfo nazwie właściwości
BiosSerialNumber został błędnie napisany jako BiosSeralNumber i został zmieniony na poprawną pisownię.
Zmiany dostępnych algorytmów skrótu
Następujące algorytmy skrótu zostały usunięte z .NET:
MACTripleDESRIPEMD160
Ta zmiana ma wpływ na cmdlet Get-FileHash.
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 -UserNameGet-Event -SourceIdentifierGet-EventSubscriber -SourceIdentifierGet-Help -NameGet-PSBreakpoint -ScriptGet-PSProvider -PSProviderGet-PSSessionConfiguration -NameGet-Runspace -NameGet-RunspaceDebug -RunspaceNameGet-Service -NameGet-TraceSource -NameGet-Variable -Name
Dodawanie obsługi rozszerzonego formatu pliku dziennika W3C w programie Import-Csv
Import-Csv Wcześniej polecenie cmdlet nie może służyć do bezpośredniego importowania plików dziennika w rozszerzonym formacie dziennika W3C, a wymagana byłaby dodatkowa akcja. Dzięki tej zmianie obsługiwany jest rozszerzony format dziennika W3C.
Import-Csv stosuje się pstypenames przy imporcie, gdy w pliku CSV obecne są informacje o typie
Wcześniej obiekty wyeksportowane przy użyciu Export-Csv, a następnie zaimportowane za pomocą TypeInformation i ConvertFrom-Csv, nie zachowywały informacji o typie. Ta zmiana dodaje informacje o typie do pstypenames członka, jeśli jest dostępna z pliku CSV.
-NoTypeInformation jest domyślnym ustawieniem na 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.
Pozwól użyć * w ścieżce rejestru dla Remove-Item
Wcześniej, -LiteralPath przy nadanym symbolu wieloznacznym traktował go tak samo jak -Path i jeśli symbol wieloznaczny nie znalazł żadnych plików, dyskretnie się zamykał. Poprawne zachowanie powinno być takie, że -LiteralPath jest literałem, więc jeśli plik nie istnieje, pojawia się błąd. Zmiana polega na traktowaniu symboli wieloznacznych używanych z -Literal jako dosłowne znaki.
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 kolejności, ta zmiana może cię osłabić, jeśli chciałeś 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 teraz 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 parametr Password, 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
Usuwanie funkcji more
W przeszłości program PowerShell zawierał funkcję na Windows o nazwie more, która otaczała more.com. Ta funkcja została usunięta.
Ponadto funkcja help została zmieniona tak, aby używała more.com na Windows lub domyślnego pagera 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 użycie Set-Location lub cd do powrotu do PSDrive powodowało przeniesienie użytkowników do domyślnej lokalizacji tego dysku. Użytkownicy są teraz wysyłani do ostatniego znanego katalogu roboczego bieżącej 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>
Ponadto cd i cd -- zmień na $HOME.
Update-Help jako nie-administrator
Na popularne życzenie 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-Object elementu pozwala na 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 .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 przeglądarką Internet Explorer doprowadziła do kilku zmian powodujących niezgodność w Invoke-WebRequest i Invoke-RestMethod.
-
Invoke-WebRequestteraz obsługuje tylko podstawowe analizowanie KODU HTML.Invoke-WebRequestzawsze zwracaBasicHtmlWebResponseObjectobiekt. WłaściwościParsedHtmliFormszostały usunięte. -
BasicHtmlWebResponseObject.Headerswartości są terazString[]zamiastString. -
BasicHtmlWebResponseObject.BaseResponsejest teraz obiektemSystem.Net.Http.HttpResponseMessage. - Właściwość
Responsedla wyjątków cmdlet sieci Web jest teraz obiektemSystem.Net.Http.HttpResponseMessage. - Dokładne analizowanie nagłówków RFC jest teraz domyślne dla parametru
-Headersi-UserAgent. Można go pominąć za pomocą polecenia-SkipHeaderValidation. - Schematy URI
file://iftp://nie są już obsługiwane. -
System.Net.ServicePointManagerustawienia nie są już honorowane. - Obecnie w systemie macOS nie ma dostępnego uwierzytelniania opartego na certyfikatach.
- Użycie
-Credentialzamiasthttp://URI spowoduje błąd. Użyj adresuhttps://URI lub podaj parametr-AllowUnencryptedAuthenticationaby pominąć błąd. -
-MaximumRedirectionTeraz 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ślne kodowanie powinno mieć wartość UTF-8 na RFC 8259.
- Domyślne kodowanie ustawione na wartość UTF-8 dla
application-jsonodpowiedzi - Dodano
-SkipHeaderValidationparametr zezwalający naContent-Typenagłówki, które nie są zgodne ze standardami - Dodano parametr
-Formdo obsługi uproszczonego wsparciamultipart/form-data. - Zgodne, bez uwzględniania wielkości liter obsługa kluczy relacyjnych
- Dodano
-Resumeparametr dla poleceń cmdlet sieci webowej
Invoke-RestMethod zwraca przydatne informacje, gdy żadne dane nie są zwracane
Gdy API zwraca tylko null, Invoke-RestMethod serializuje to jako ciąg znaków "null" zamiast $null. Ta zmiana naprawia logikę w Invoke-RestMethod, aby prawidłowo zserializować literał JSON null o pojedynczej wartości jako $null.
Polecenia cmdletów sieci Web ostrzegają, gdy -Credential jest 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 .
Uczyń parametr -OutFile w poleceniach cmdlet, 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 AddTypeCommandBase została usunięta z Add-Type, 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 Add-Type
W przeszłości można skompilować kod Visual Basic przy użyciu polecenia cmdlet Add-Type. Visual Basic rzadko był używany z Add-Type. 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ę RunspaceConfiguration i obsługuje tylko InitialSessionState.
CommandInvocationIntrinsics.InvokeScript wiązać argumenty z $input zamiast $args
Niepoprawna pozycja parametru spowodowała przekazanie args jako dane wejściowe zamiast jako argumenty.
Usuń właściwości ClrVersion i BuildVersion z $PSVersionTable
Właściwość ClrVersion elementu $PSVersionTable nie jest przydatna w przypadku biblioteki 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 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.
Zaimplementuj analizę sekwencji ucieczek 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ą.
Wyczyszczono zastosowania CommandTypes.Workflow i WorkflowInfoCleaned
Wyczyść kod związany z użyciem elementów CommandTypes.Workflow i WorkflowInfo w pliku System.Management.Automation.
Te drobne zmiany powodujące niezgodność wpływają głównie na kod dostawców usług pomocy.
- Zmień publiczne konstruktory
WorkflowInfona wewnętrzne. Nie obsługujemy już przepływu pracy, dlatego nie należy zezwalać użytkownikom na tworzenieWorkflowwystąpień. - Usuń typ System.Management.Automation.DebugSource , ponieważ jest używany tylko do debugowania przepływu pracy.
- Usuń przeciążenie
SetParentz abstrakcyjnej klasy Debugger, która jest używana tylko do debugowania przepływu pracy. - Usuń to samo przeciążenie
SetParentz klasy pochodnej RemotingJobDebugger.
Nie opakowuj wyniku zwrotnego w PSObject, gdy konwertujesz ScriptBlock na delegata
Gdy ScriptBlock jest konwertowany na typ delegata do użycia w kontekście C#, zawijanie wyniku w PSObject powoduje niepotrzebne problemy:
- Gdy wartość jest konwertowana na typ zwracany delegata,
PSObjectzasadniczo jest rozpakowywany.PSObjectWięc jest niepotrzebny. - Gdy zwracany typ delegata to
object, zostaje opakowany wPSObject, co utrudnia pracę z kodem w języku C#.
Po tej zmianie zwrócony obiekt jest obiektem bazowym.
Zdalne wsparcie
Komunikacja zdalna programu PowerShell (PSRP) przy użyciu usługi WinRM nie jest obsługiwana dla platform innych niż Windows. Możesz użyć komunikacji zdalnej programu PowerShell (PSRP) za pośrednictwem usługi WinRM z Windows, aby nawiązać połączenie z innymi maszynami Windows. PowerShell obsługuje również komunikację zdalną za pośrednictwem protokołu SSH na wszystkich platformach (Windows, macOS i Linux). Aby uzyskać więcej informacji, zapoznaj się z zdalną komunikacją SSH w programie PowerShell.
PowerShell Direct for Containers próbuje użyć pwsh najpierw
PowerShell Direct to funkcja programu PowerShell i Hyper-V, która umożliwia łączenie się z maszyną wirtualną lub kontenerem Hyper-V bez łączności sieciowej lub innych usług zdalnego zarządzania.
W przeszłości PowerShell Direct nawiązywał połączenie, korzystając z wbudowanego wystąpienia Windows PowerShell w kontenerze. Teraz program PowerShell Direct najpierw próbuje nawiązać połączenie, korzystając z dowolnej dostępnej opcji w zmiennej środowiskowej pwsh.exe. Jeśli pwsh.exe nie jest dostępny, program PowerShell Direct powraca do użycia powershell.exe.
Enable-PSRemoting Teraz tworzy oddzielne zdalne punkty końcowe dla wersji próbnych
Enable-PSRemoting teraz tworzy dwie konfiguracje sesji zdalnych:
- Jeden dla wersji głównej programu PowerShell. Na przykład
PowerShell.6. Ten punkt końcowy, który można uznać za niezawodny przy aktualizacjach drobnych wersji jako dla konfiguracji sesji programu PowerShell 6 na poziomie 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 zdalnych po wykonaniu cmdletu Enable-PSRemoting.
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 SSH jako protokołu dla zdalnej komunikacji programu PowerShell, dodaliśmy obsługę tego formatu ciągu 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 Microsoft po 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.