Verschillen tussen Windows PowerShell 5.1 en PowerShell 7.x

Windows PowerShell 5.1 is gebouwd boven op .NET Framework v4.5. Met de release van PowerShell 6.0 werd PowerShell een opensource-project dat is gebouwd op .NET Core 2.0. Als u overstapt van .NET Framework naar .NET Core, kan PowerShell een platformoverschrijdende oplossing worden. PowerShell wordt uitgevoerd in Windows, macOS en Linux.

Er zijn enkele verschillen in de PowerShell-taal tussen Windows PowerShell en PowerShell. De meest opvallende verschillen zijn in de beschikbaarheid en het gedrag van PowerShell-cmdlets tussen Windows- en niet-Windows-platforms en de wijzigingen die voortvloeien uit de verschillen tussen .NET Framework en .NET Core.

Dit artikel bevat een overzicht van de belangrijke verschillen en belangrijke wijzigingen tussen Windows PowerShell en de huidige versie van PowerShell. Deze samenvatting bevat geen nieuwe functies of cmdlets die zijn toegevoegd. In dit artikel wordt ook niet besproken wat er is gewijzigd tussen versies. Het doel van dit artikel is om de huidige status van PowerShell te presenteren en hoe dat verschilt van Windows PowerShell. Zie de artikelen Wat is er nieuw voor elke versie voor een gedetailleerde bespreking van wijzigingen tussen versies en het toevoegen van nieuwe functies.

.NET Framework versus .NET Core

PowerShell in Linux en macOS maakt gebruik van .NET Core. Dit is een subset van het volledige .NET Framework in Microsoft Windows. Dit is belangrijk omdat PowerShell directe toegang biedt tot de onderliggende frameworktypen en -methoden. Als gevolg hiervan kunnen scripts die worden uitgevoerd in Windows, mogelijk niet worden uitgevoerd op niet-Windows-platforms vanwege de verschillen in de frameworks. Zie Belangrijke wijzigingen voor migratie van .NET Framework naar .NET Core voor meer informatie over wijzigingen in .NET Core.

Elke nieuwe versie van PowerShell is gebaseerd op een nieuwere versie van .NET. Er kunnen fouten optreden in .NET die van invloed zijn op PowerShell.

  • PowerShell 7.5 - gebouwd op .NET 9.0
  • PowerShell 7.4 - gebouwd op .NET 8.0
  • PowerShell 7.3 - Gebouwd op .NET 7.0
  • PowerShell 7.2 (LTS-current) - gebouwd op .NET 6.0 (LTS-current)
  • PowerShell 7.1 - gebouwd op .NET 5.0
  • PowerShell 7.0 (LTS) - gebouwd op .NET Core 3.1 (LTS)
  • PowerShell 6.2 - gebouwd op .NET Core 2.1
  • PowerShell 6.1 - gebouwd op .NET Core 2.1
  • PowerShell 6.0 - gebouwd op .NET Core 2.0

Met de komst van .NET Standard 2.0 kan PowerShell veel traditionele Windows PowerShell-modules laden zonder te wijzigen. Daarnaast bevat PowerShell 7 een Windows PowerShell-compatibiliteitsfunctie waarmee u Windows PowerShell-modules kunt gebruiken waarvoor nog steeds het volledige framework is vereist.

Zie voor meer informatie:

Let op wijzigingen in .NET-methoden

Hoewel .NET-methodewijzigingen niet specifiek zijn voor PowerShell, kunnen ze van invloed zijn op uw scripts, met name als u .NET-methoden rechtstreeks aanroept. Er kunnen ook nieuwe overbelastingen zijn voor constructors. Dit kan invloed hebben op de manier waarop u objecten maakt met behulp van New-Object of de [type]::new() methode.

.NET heeft bijvoorbeeld overbelasting toegevoegd aan de [System.String]::Split() methode die niet beschikbaar is in .NET Framework 4.5. De volgende lijst bevat de overbelastingen voor de Split() methode die beschikbaar is in 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)

De volgende lijst bevat de overbelastingen voor de Split() methode die beschikbaar is in 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)

In Windows PowerShell 5.1 kunt u een tekenmatrix (char[]) doorgeven aan de Split() methode als een string. De methode splitst de doeltekenreeks op elk exemplaar van een teken in de matrix. Met de volgende opdracht wordt de doeltekenreeks gesplitst in Windows PowerShell 5.1, maar niet in PowerShell 7:

# PowerShell 7 example
"1111p2222q3333".Split('pq')
1111p2222q3333

Als u wilt binden aan de juiste overbelasting, moet u de tekenreeks naar een tekenmatrix typen:

# PowerShell 7 example
"1111p2222q3333".Split([char[]]'pq')
1111
2222
3333

Modules worden niet meer geleverd met PowerShell

Om verschillende compatibiliteitsredenen zijn de volgende modules niet meer opgenomen in PowerShell.

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

PowerShell Workflow

PowerShell Workflow is een functie in Windows PowerShell die is gebaseerd op Windows Workflow Foundation (WF) waarmee robuuste runbooks kunnen worden gemaakt voor langlopende of parallelle taken.

Vanwege het gebrek aan ondersteuning voor Windows Workflow Foundation in .NET Core hebben we PowerShell Workflow uit PowerShell verwijderd.

In de toekomst willen we systeemeigen parallellisme/gelijktijdigheid inschakelen in de PowerShell-taal zonder dat PowerShell Workflow nodig is.

Als er controlepunten moeten worden gebruikt om een script te hervatten nadat het besturingssysteem opnieuw is opgestart, raden we u aan taakplanner te gebruiken om een script uit te voeren bij het opstarten van het besturingssysteem, maar het script moet een eigen status behouden (zoals het behouden van het script naar een bestand).

Cmdlets verwijderd uit PowerShell

Voor de modules die zijn opgenomen in PowerShell, zijn de volgende cmdlets uit PowerShell verwijderd om verschillende compatibiliteitsredenen of het gebruik van niet-ondersteunde API's.

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

WMI v1-cmdlets

De volgende WMI v1-cmdlets zijn verwijderd uit PowerShell:

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

De CimCmdlets-module -cmdlets (ook wel WMI v2 genoemd) voeren dezelfde functie uit en bieden nieuwe functionaliteit en een opnieuw ontworpen syntaxis.

New-WebServiceProxy cmdlet verwijderd

.NET Core biedt geen ondersteuning voor Windows Communication Framework, dat services biedt voor het gebruik van het SOAP-protocol. Deze cmdlet is verwijderd omdat soap is vereist.

*-Transaction cmdlets verwijderd

Deze cmdlets hadden een zeer beperkt gebruik. De beslissing werd genomen om de steun voor hen te stoppen.

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

*-EventLog Cmdlets

Vanwege het gebruik van niet-ondersteunde API's zijn de *-EventLog cmdlets verwijderd uit PowerShell. Get-WinEvent en New-WinEvent zijn beschikbaar om gebeurtenissen op te halen en te maken in Windows.

Cmdlets die gebruikmaken van het Windows Presentation Framework (WPF)

.NET Core 3.1 heeft ondersteuning toegevoegd voor WPF, waardoor de release van PowerShell 7.0 de volgende Windows-specifieke functies heeft hersteld:

  • De Show-Command cmdlet
  • De Out-GridView cmdlet
  • De parameter ShowWindow van Get-Help

Wijzigingen in PowerShell Desired State Configuration (DSC)

Invoke-DscResource is hersteld als experimentele functie in PowerShell 7.0.

Vanaf PowerShell 7.2 is de PSDesiredStateConfiguration-module verwijderd uit PowerShell en gepubliceerd naar de PowerShell-galerie. Zie de aankondiging in de PowerShell Team-blog voor meer informatie.

Uitvoerbare PowerShell-wijzigingen

Naam van powershell.exe gewijzigd in pwsh.exe

De binaire naam voor PowerShell is gewijzigd van powershell(.exe) in pwsh(.exe). Deze wijziging biedt een deterministische manier voor gebruikers om PowerShell uit te voeren op computers en ondersteuning te bieden voor side-by-side installaties van Windows PowerShell en PowerShell.

Aanvullende wijzigingen in pwsh(.exe) van powershell.exe:

  • De eerste positionele parameter gewijzigd van -Command in -File. Met deze wijziging wordt het gebruik van #! (ook wel shebang genoemd) in PowerShell-scripts opgelost die worden uitgevoerd vanuit niet-PowerShell-shells op niet-Windows-platforms. Het betekent ook dat u opdrachten zoals pwsh foo.ps1 of pwsh fooScript zonder op te -Filegeven kunt uitvoeren. Voor deze wijziging moet u echter expliciet opgeven -c of -Command bij het uitvoeren van opdrachten zoals pwsh.exe -Command Get-Command.
  • pwsh accepteert de -i schakeloptie (of -Interactive) om een interactieve shell aan te geven. Hierdoor kan PowerShell worden gebruikt als een standaardshell op Unix-platforms.
  • -ImportSystemModules Parameters verwijderd en -PSConsoleFile van pwsh.exe.
  • Aangepaste pwsh -version en ingebouwde hulp om pwsh.exe te worden uitgelijnd met andere systeemeigen hulpprogramma's.
  • Ongeldige argumentfoutberichten voor -File en -Command afsluitcodes die consistent zijn met Unix-standaarden
  • Parameter toegevoegd -WindowStyle in Windows. Op dezelfde manier zijn installaties op basis van pakketten op niet-Windows-platforms in-place updates.

De verkorte naam is ook consistent met het benoemen van shells op niet-Windows-platforms.

Ondersteuning voor het uitvoeren van een PowerShell-script met boolparameter

Voorheen heeft het gebruik van het uitvoeren van pwsh.exe een PowerShell-script geen -File manier om als parameterwaarden door te geven/$true$false. Ondersteuning voor $true/$false als geparseerde waarden aan parameters is toegevoegd. Schakelwaarden worden ook ondersteund.

Verbeterde compatibiliteit met eerdere versies met Windows PowerShell

Voor Windows wordt een nieuwe switchparameter UseWindowsPowerShell toegevoegd aan Import-Module. Met deze switch maakt u een proxymodule in PowerShell 7 die gebruikmaakt van een lokaal Windows PowerShell-proces om impliciet cmdlets uit te voeren die in die module zijn opgenomen. Zie Import-Module voor meer informatie.

Zie de compatibiliteitstabel voor modules van Microsoft met PowerShell 7.0 voor meer informatie over welke Microsoft-modules werken met PowerShell 7.0.

Microsoft Update-ondersteuning voor Windows

PowerShell 7.2 heeft ondersteuning toegevoegd voor Microsoft Update. Wanneer u deze functie inschakelt, krijgt u de nieuwste PowerShell 7-updates in uw traditionele Windows Update-beheerstroom (WU), ongeacht of dat met Windows Update voor Bedrijven, WSUS, SCCM of het interactieve WU-dialoogvenster in Instellingen.

Het MSI-pakket van PowerShell 7.2 bevat de volgende opdrachtregelopties:

  • USE_MU - Deze eigenschap heeft twee mogelijke waarden:
    • 1 (standaard): kiest voor het bijwerken via Microsoft Update of WSUS
    • 0 - Meld u niet aan voor het bijwerken via Microsoft Update of WSUS
  • ENABLE_MU
    • 1 (standaard): kiest u voor het gebruik van Microsoft Update de automatische updates of Windows Update
    • 0 - Kies niet voor het gebruik van Microsoft Update de automatische updates of Windows Update

Enginewijzigingen

Ondersteuning voor PowerShell als standaard Unix-shell

Op Unix is het een conventie voor shells om te accepteren -i voor een interactieve shell en veel hulpprogramma's verwachten dit gedrag (script bijvoorbeeld wanneer u PowerShell instelt als de standaardshell) en de shell aanroept met de -i switch. Deze wijziging breekt in dat -i eerder kon worden gebruikt als korte hand om te matchen -inputformat, wat nu moet zijn -in.

Aangepaste modules

PowerShell-modules zijn een voorafgaande aan PowerShell-modules die geen wijdverspreide acceptatie hebben in de PowerShell-community.

Vanwege de complexiteit van het ondersteunen van modules en hun gebrek aan gebruik in de community, ondersteunen we geen aangepaste modules meer in PowerShell.

Experimentele functievlagmen

Ondersteuning voor Experimentele functies met PowerShell 6.2 ingeschakeld. Hierdoor kunnen PowerShell-ontwikkelaars nieuwe functies leveren en feedback krijgen voordat het ontwerp is voltooid. Op deze manier vermijden we wijzigingen die fouten veroorzaken naarmate het ontwerp zich ontwikkelt.

Hiermee Get-ExperimentalFeature haalt u een lijst met beschikbare experimentele functies op. U kunt deze functies in- of uitschakelen met Enable-ExperimentalFeature en Disable-ExperimentalFeature.

Assembly laden vanuit het basispad van de module voordat u probeert te laden vanuit de GAC

Toen een binaire module de moduleassembly in GAC heeft, hebben we de assembly van GAC geladen voordat we deze vanuit het basispad van de module proberen te laden.

Null-elementcontrole overslaan voor verzamelingen met een elementtype waarde

Voor de Mandatory parameter en ValidateNotNullValidateNotNullOrEmpty kenmerken slaat u de null-elementcontrole over of het elementtype van de verzameling een waardetype is.

Behouden $? voor ParenExpression, SubExpression en ArrayExpression

Deze pull-aanvraag wijzigt de manier waarop we subpipelines (...), subexpressies $(...) en matrixexpressies compileren @() , zodat dit $? niet automatisch waar is. In plaats daarvan is de waarde afhankelijk van $? het resultaat van de pijplijn of instructies die worden uitgevoerd.

Oplossing $? om niet te zijn $false wanneer systeemeigen opdrachten worden geschreven naar stderr

$? is niet ingesteld op $false wanneer systeemeigen opdrachten worden geschreven naar stderr. Het is gebruikelijk dat systeemeigen opdrachten naar schrijven stderr zonder een fout aan te geven. $? is alleen ingesteld op $false wanneer de systeemeigen opdracht een afsluitcode zonder nul heeft.

Geen $ErrorActionPreference invloed hebben op stderr de uitvoer van systeemeigen opdrachten

Het is gebruikelijk dat systeemeigen opdrachten naar schrijven stderr zonder een fout aan te geven. Met deze wijziging stderr wordt de uitvoer nog steeds vastgelegd in ErrorRecord-objecten , maar de runtime is niet meer van toepassing $ErrorActionPreference als de ErrorRecord afkomstig is van een systeemeigen opdracht.

Wijzigen $OutputEncoding in het gebruik van UTF-8 NoBOM codering in plaats van ASCII

De vorige codering, ASCII (7-bits), zou in sommige gevallen leiden tot een onjuiste wijziging van de uitvoer. Als UTF-8 NoBOM u de standaardinstelling maakt, blijft Unicode-uitvoer behouden met een codering die wordt ondersteund door de meeste hulpprogramma's en besturingssystemen.

Cmdlets samenvoegen met parameter -Encoding die van het type moeten zijn System.Text.Encoding

De -Encoding waarde Byte is verwijderd uit de cmdlets van de bestandssysteemprovider. Een nieuwe parameter, -AsByteStreamwordt nu gebruikt om op te geven dat een bytestroom is vereist als invoer of dat de uitvoer een stroom van bytes is.

Codering wijzigen New-ModuleManifest in UTF8NoBOM niet-Windows-platforms

New-ModuleManifest Eerder maakt u psd1 manifesten in UTF-16 met BOM en maakt u een probleem voor Linux-hulpprogramma's. Door deze wijziging die fouten veroorzaken, wordt de codering gewijzigd in New-ModuleManifest UTF (geen bom) in niet-Windows-platforms.

Verwijderen AllScope uit de meeste standaardaliassen

Om het maken van het bereik te versnellen, AllScope is verwijderd uit de meeste standaardaliassen. AllScope werd overgelaten voor een aantal veelgebruikte aliassen waar de zoekactie sneller was.

-Verbose en -Debug wordt niet langer overschreven $ErrorActionPreference

Voorheen, indien -Verbose of -Debug was opgegeven, overschreven het gedrag van $ErrorActionPreference. Met deze wijziging -Verbose en -Debug niet langer van invloed zijn op het gedrag van $ErrorActionPreference.

-Debug De parameter wordt ook ingesteld $DebugPreference op Doorgaan in plaats van Inquire.

Consistent wijzigingen $PSCulture aanbrengen in sessiecultuur

In Windows PowerShell wordt de huidige cultuurwaarde in de cache opgeslagen, waardoor de waarde kan worden gesynchroniseerd met de cultuur na het opstarten van de sessie wordt gewijzigd. Dit cachegedrag is opgelost in de PowerShell-kern.

Sta expliciet opgegeven benoemde parameter toe om dezelfde parameter te vervangen door hashtable-splatting

Met deze wijziging worden de benoemde parameters van splatting verplaatst naar het einde van de parameterlijst, zodat ze zijn gebonden nadat alle expliciet opgegeven benoemde parameters gebonden zijn. Parameterbinding voor eenvoudige functies genereert geen fout wanneer een opgegeven benoemde parameter niet kan worden gevonden. Onbekende benoemde parameters zijn gebonden aan de $args parameter van de eenvoudige functie. Het verplaatsen van splatting naar het einde van de lijst met argumenten verandert de volgorde waarin $argsde parameters worden weergegeven.

Voorbeeld:

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

In het vorige gedrag is MyPath niet gebonden omdat -Path dit het derde argument in de lijst met argumenten is. ## Dus het wordt in '$args' samen met Blah = "World"

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

Met deze wijziging worden de argumenten verplaatst naar het einde van de lijst met argumenten @hash . MyPath wordt het eerste argument in de lijst, dus het is gebonden aan -Path.

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

Taalwijzigingen

Operator null-coalescing ??

De operator ?? null-coalescing retourneert de waarde van de linkeroperand als deze niet null is. Anders wordt de rechteroperand geëvalueerd en wordt het resultaat ervan geretourneerd. De ?? operator evalueert de rechteroperand niet als de linkeroperand resulteert in niet-null.

$x = $null
$x ?? 100
100

In het volgende voorbeeld wordt de rechteroperand niet geëvalueerd.

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

Toewijzingsoperator null-coalescing ??=

De toewijzingsoperator ??= null-coalescing wijst de waarde van de rechteroperand alleen toe aan de linkeroperand als de linkeroperand null oplevert. De ??= operator evalueert de rechteroperand niet als de linkeroperand resulteert in niet-null.

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

In het volgende voorbeeld wordt de rechteroperand niet geëvalueerd.

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

Null-voorwaardelijke operators

Notitie

Deze functie is verplaatst van experimenteel naar basis in PowerShell 7.1.

Een operator met null-voorwaardelijke voorwaarden past een lidtoegang, ?.of elementtoegang, ?[]alleen toe op de operand als die operand niet-null evalueert; anders wordt null geretourneerd.

Omdat PowerShell deel kan ? uitmaken van de naam van de variabele, is formele specificatie van de naam van de variabele vereist voor het gebruik van deze operators. Het is dus vereist om te gebruiken {} rond de namen van variabelen, zoals ${a} of wanneer ? deel uitmaakt van de naam ${a?}van de variabele.

In het volgende voorbeeld wordt de waarde van PropName geretourneerd.

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

In het volgende voorbeeld wordt null geretourneerd zonder toegang te krijgen tot de lidnaam PropName.

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

Op dezelfde manier wordt de waarde van het element geretourneerd.

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

En wanneer de operand null is, wordt het element niet geopend en wordt null geretourneerd.

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

Notitie

De syntaxis van de variabelenaam mag ${<name>} niet worden verward met de $() operator voor subexpressie. Zie de sectie Variabelenaam van about_Variables voor meer informatie.

Operator toegevoegd & voor taakbeheer

Als & u een pijplijn aan het einde van een pijplijn plaatst, wordt de pijplijn uitgevoerd als een PowerShell-taak. Wanneer een pijplijn is achtergrond, wordt een taakobject geretourneerd. Zodra de pijplijn als een taak wordt uitgevoerd, kunnen alle standaard-cmdlets *-Job worden gebruikt om de taak te beheren. Variabelen (waarbij processpecifieke variabelen worden genegeerd) die in de pijplijn worden gebruikt, worden automatisch naar de taak gekopieerd, dus Copy-Item $foo $bar & werkt alleen. De taak wordt ook uitgevoerd in de huidige map in plaats van de basismap van de gebruiker.

Nieuwe methoden/eigenschappen op PSCustomObject

We hebben nieuwe methoden en eigenschappen toegevoegd aan PSCustomObject. PSCustomObject bevat nu een Count/Length eigenschap zoals andere objecten.

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

$PSCustomObject.Length
1
$PSCustomObject.Count
1

Dit werk omvat ForEach ook en Where methoden waarmee u items kunt gebruiken en filteren PSCustomObject :

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

Conversies van PSMethod naar Gedelegeerde

U kunt een PSMethod converteren naar een gemachtigde. Op deze manier kunt u bijvoorbeeld als gemachtigde waarde doorgeven PSMethod[M]::DoubleStrLen aan [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)

Tekenreeksvergelijkingsgedrag gewijzigd in PowerShell 7.1

PowerShell 7.1 is gebouwd op .NET 5.0, waarmee de volgende belangrijke wijziging is geïntroduceerd:

Vanaf .NET 5.0 negeren invariante tekenreeksvergelijkingen voor cultuur niet-afdrukbare besturingstekens.

De volgende twee tekenreeksen worden bijvoorbeeld beschouwd als identiek:

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

Nieuwe cmdLets

Nieuwe Get-Uptime-cmdlet

De cmdlet Get-Uptime retourneert de tijd die is verstreken sinds de laatste keer dat het besturingssysteem is opgestart. De cmdlet is geïntroduceerd in PowerShell 6.0.

Nieuwe cmdlet remove-alias

De cmdlet Remove-Alias verwijdert een alias uit de huidige PowerShell-sessie. De cmdlet is geïntroduceerd in PowerShell 6.0.

Nieuwe cmdlet Remove-Service

De cmdlet Remove-Service verwijdert een Windows-service in het register en in de servicedatabase. De Remove-Service cmdlet is geïntroduceerd in PowerShell 6.0.

Nieuwe Markdown-cmdlets

Markdown is een standaard voor het maken van leesbare document zonder opmaak met basisopmaak die in HTML kan worden weergegeven.

De volgende cmdlets zijn toegevoegd in PowerShell 6.1:

Nieuwe test-Json-cmdlet

Met de cmdlet Test-Json wordt getest of een tekenreeks een geldig JSON-document (JavaScript Object Notation) is en optioneel kan worden gecontroleerd of het JSON-document is ingesteld op basis van een opgegeven schema.

Deze cmdlet is geïntroduceerd in PowerShell 6.1

Nieuwe cmdlets ter ondersteuning van experimentele functies

De volgende cmdlets zijn toegevoegd in PowerShell 6.2 ter ondersteuning van experimentele functies.

Nieuwe cmdlet Join-String

De cmdlet Join-String combineert objecten uit de pijplijn in één tekenreeks. Deze cmdlet is toegevoegd in PowerShell 6.2.

Nieuwe weergave Beknopte weergave en cmdlet Get-Error

PowerShell 7.0 verbetert de weergave van foutberichten om de leesbaarheid van interactieve en scriptfouten te verbeteren met een nieuwe standaardweergave, Beknopte weergave. De weergaven kunnen door de gebruiker worden geselecteerd via de voorkeursvariabele $ErrorView.

Als een fout niet afkomstig is van een script- of parserfout, is dit een foutbericht met één regel:

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

Als de fout optreedt tijdens het uitvoeren van een script of een parseringsfout is, retourneert PowerShell een foutbericht met meerdere regels dat de fout, een aanwijzer en een foutbericht bevat waarin wordt aangegeven waar de fout zich op die regel bevindt. Als de terminal geen ANSI-kleuren escapereeksen (VT100) ondersteunt, worden kleuren niet weergegeven.

De standaardweergave in PowerShell 7 is ConciseView. De vorige standaardweergave was NormalView en u kunt dit selecteren door de voorkeursvariabele $ErrorViewin te stellen.

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

Notitie

Er wordt een nieuwe eigenschap ErrorAccentColor toegevoegd ter $Host.PrivateData ondersteuning van het wijzigen van de accentkleur van het foutbericht.

De nieuwe Get-Errorcmdlet biedt een volledige gedetailleerde weergave van de volledig gekwalificeerde fout indien gewenst. De cmdlet geeft standaard de volledige details weer, inclusief binnenuitzonderingen, van de laatste fout die is opgetreden.

De Get-Error cmdlet ondersteunt invoer van de pijplijn met behulp van de ingebouwde variabele $Error. Get-Error geeft alle doorgesluisde fouten weer.

$Error | Get-Error

De Get-Error cmdlet ondersteunt de nieuwste parameter, zodat u kunt opgeven hoeveel fouten van de huidige sessie u wilt weergeven.

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

Zie Get-Error voor meer informatie.

Cmdlet-wijzigingen

Parallelle uitvoering toegevoegd aan ForEach-Object

Vanaf PowerShell 7.0 heeft de ForEach-Object cmdlet, die items in een verzameling herhaalt, nu ingebouwde parallelle uitvoering met de nieuwe parameter Parallel .

Parallel scriptblokken maken standaard gebruik van de huidige werkmap van de aanroeper die de parallelle taken heeft gestart.

In dit voorbeeld worden 50.000 logboekvermeldingen opgehaald uit 5 systeemlogboeken op een lokale Windows-computer:

$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

Met de parameter Parallel geeft u het scriptblok op dat parallel wordt uitgevoerd voor elke naam van het invoerlogboek.

De nieuwe parameter ThrottleLimit beperkt het aantal scriptblokken dat op een bepaald moment parallel wordt uitgevoerd. De standaard is 5.

Gebruik de $_ variabele om het huidige invoerobject in het scriptblok weer te geven. Gebruik het $using: bereik om variabele verwijzingen door te geven naar het actieve scriptblok.

Zie ForEach-Object voor meer informatie.

Controleren op system32 compatibele ingebouwde modules in Windows

In de Windows 10 1809-update en Windows Server 2019 hebben we een aantal ingebouwde PowerShell-modules bijgewerkt om deze te markeren als compatibel met PowerShell.

Wanneer PowerShell wordt gestart, wordt deze automatisch opgenomen $windir\System32 als onderdeel van de PSModulePath omgevingsvariabele. Er worden echter alleen modules beschikbaar gesteld aan Get-Module en Import-Module als het CompatiblePSEdition is gemarkeerd als compatibel met Core.

U kunt dit gedrag overschrijven om alle modules weer te geven met behulp van de -SkipEditionCheck switchparameter. We hebben ook een PSEdition eigenschap toegevoegd aan de tabeluitvoer.

-lp alias voor alle -LiteralPath parameters

We hebben een standaardparameteralias -lp gemaakt voor alle ingebouwde PowerShell-cmdlets met een -LiteralPath parameter.

Oplossen Get-Item -LiteralPath a*b als a*b er niet daadwerkelijk een fout wordt geretourneerd

-LiteralPath Voorheen zou een jokerteken het hetzelfde behandelen als -Path en als het jokerteken geen bestanden heeft gevonden, zou het op de achtergrond worden afgesloten. Correct gedrag moet zijn dat letterlijk is, -LiteralPath dus als het bestand niet bestaat, zou het een fout moeten zijn. Wijziging is het behandelen van jokertekens die -Literal worden gebruikt als letterlijk.

Werkmap instellen op huidige map in Start-Job

De Start-Job cmdlet gebruikt nu de huidige map als de werkmap voor de nieuwe taak.

Verwijderen -Protocol uit *-Computer cmdlets

Vanwege problemen met externe communicatie van RPC in CoreFX (met name op niet-Windows-platforms) en een consistente externe ervaring in PowerShell garanderen, is de -Protocol parameter verwijderd uit de \*-Computer cmdlets. DCOM wordt niet meer ondersteund voor externe communicatie. De volgende cmdlets bieden alleen ondersteuning voor externe WSMAN-communicatie:

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

Verwijderen -ComputerName uit *-Service cmdlets

Om het consistente gebruik van PSRP aan te moedigen, is de -ComputerName parameter verwijderd uit *-Service cmdlets.

Oplossing Get-Content -Delimiter om het scheidingsteken niet op te nemen in de geretourneerde regels

Voorheen was de uitvoer tijdens het gebruik Get-Content -Delimiter inconsistent en onhandig omdat verdere verwerking van de gegevens nodig was om het scheidingsteken te verwijderen. Met deze wijziging wordt het scheidingsteken in geretourneerde regels verwijderd.

Wijzigingen in Format-Hex

De -Raw parameter is nu een 'no-op' (omdat er niets gebeurt). In de toekomst wordt alle uitvoer weergegeven met een werkelijke weergave van getallen die alle bytes voor het type bevatten. Dit is wat de -Raw parameter vóór deze wijziging deed.

Typo fix in Get-ComputerInfo property name

BiosSerialNumber verkeerd gespeld als BiosSeralNumber en is gewijzigd in de juiste spelling.

Toevoegen Get-StringHash en Get-FileHash cmdlets

Deze wijziging is dat sommige hash-algoritmen niet worden ondersteund door CoreFX, daarom zijn ze niet meer beschikbaar:

  • MACTripleDES
  • RIPEMD160

Validatie toevoegen aan Get-* cmdlets waarbij het doorgeven van $null alle objecten retourneert in plaats van fout

Als u een van de volgende items doorgeeft $null , treedt er nu een fout op:

  • 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

Ondersteuning toevoegen voor de W3C Extended Log-bestandsindeling in Import-Csv

Voorheen kan de Import-Csv cmdlet niet worden gebruikt om de logboekbestanden rechtstreeks te importeren in de uitgebreide W3C-logboekindeling en is er extra actie vereist. Met deze wijziging wordt de uitgebreide W3C-logboekindeling ondersteund.

Import-Csv is van toepassing PSTypeNames bij het importeren wanneer de typegegevens aanwezig zijn in het CSV-bestand

Eerder werden objecten die werden geëxporteerd met Export-CSV geïmporteerd, TypeInformationConvertFrom-Csv de typegegevens niet behouden. Met deze wijziging wordt de typegegevens toegevoegd aan PSTypeNames het lid, indien beschikbaar vanuit het CSV-bestand.

-NoTypeInformation is de standaardinstelling ingeschakeld Export-Csv

Voorheen zou de Export-CSV cmdlet een opmerking uitvoeren als de eerste regel met de typenaam van het object. De wijziging sluit standaard de typegegevens uit omdat deze niet wordt begrepen door de meeste CSV-hulpprogramma's. Deze wijziging is aangebracht om feedback van klanten aan te pakken.

Gebruik -IncludeTypeInformation dit om het vorige gedrag te behouden.

Toestaan * om te worden gebruikt in registerpad voor Remove-Item

-LiteralPath Voorheen zou een jokerteken het hetzelfde behandelen als -Path en als het jokerteken geen bestanden heeft gevonden, zou het op de achtergrond worden afgesloten. Correct gedrag moet zijn dat letterlijk is, -LiteralPath dus als het bestand niet bestaat, zou het een fout moeten zijn. Wijziging is het behandelen van jokertekens die -Literal worden gebruikt als letterlijk.

Groeperen-object sorteert nu de groepen

Als onderdeel van de prestatieverbetering wordt Group-Object nu een gesorteerde lijst van de groepen geretourneerd. Hoewel u niet op de order moet vertrouwen, kunt u worden verbroken door deze wijziging als u de eerste groep wilt. We hebben besloten dat deze prestatieverbetering de wijziging waard was, omdat de impact van het afhankelijk zijn van eerder gedrag laag is.

Standaarddeviatie in Measure-Object

De uitvoer van Measure-Object nu bevat een StandardDeviation eigenschap.

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 heeft nu de Password parameter, die een SecureString. Op deze manier kunt u deze niet-interactief gebruiken:

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

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

Verwijderen van de more functie

In het verleden heeft PowerShell een functie verzonden in Windows die dat verpakte moremore.com. Deze functie is nu verwijderd.

help De functie is ook gewijzigd voor gebruik more.com in Windows of de standaardpaginar van het systeem die is opgegeven op $env:PAGER niet-Windows-platforms.

cd DriveName: retourneert nu gebruikers naar de huidige werkmap in dat station

Voorheen heeft het gebruik Set-Location of cd om terug te keren naar een PSDrive-gebruiker naar de standaardlocatie voor dat station verzonden. Gebruikers worden nu verzonden naar de laatst bekende huidige werkmap voor die sessie.

cd - keert terug naar de vorige map

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

Of op Linux:

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

cd En cd -- schakel over naar $HOME.

Update-Help als niet-beheerder

Op populaire vraag Update-Help hoeft niet langer als beheerder te worden uitgevoerd. Update-Help nu wordt standaard hulp opgeslagen in een map met gebruikersbereik.

Where-Object -Not

Met de toevoeging van -Not parameter aan Where-Object, kan een object in de pijplijn worden gefilterd op het niet bestaan van een eigenschap of een null/lege eigenschapswaarde.

Met deze opdracht worden bijvoorbeeld alle services geretourneerd waarvoor geen afhankelijke services zijn gedefinieerd:

Get-Service | Where-Object -Not DependentServices

Wijzigingen in web-cmdlets

De onderliggende .NET-API van de web-cmdlets is gewijzigd in System.Net.Http.HttpClient. Deze wijziging biedt veel voordelen. Deze wijziging heeft echter samen met een gebrek aan interoperabiliteit met Internet Explorer geresulteerd in verschillende belangrijke wijzigingen binnen Invoke-WebRequest en Invoke-RestMethod.

  • Invoke-WebRequest biedt nu alleen ondersteuning voor eenvoudige HTML-parsering. Invoke-WebRequest retourneert altijd een BasicHtmlWebResponseObject object. De ParsedHtml en Forms eigenschappen zijn verwijderd.
  • BasicHtmlWebResponseObject.Headers waarden zijn nu String[] in plaats van String.
  • BasicHtmlWebResponseObject.BaseResponse is nu een System.Net.Http.HttpResponseMessage object.
  • De Response eigenschap uitzonderingen voor web-cmdlets is nu een System.Net.Http.HttpResponseMessage object.
  • Strikte RFC-headerparsering is nu standaard voor de -Headers en -UserAgent parameter. Dit kan worden omzeild met -SkipHeaderValidation.
  • file:// en ftp:// URI-schema's worden niet meer ondersteund.
  • System.Net.ServicePointManager instellingen worden niet meer gehonoreerd.
  • Er is momenteel geen verificatie op basis van certificaten beschikbaar in macOS.
  • Het gebruik van -Credential over een http:// URI leidt tot een fout. Gebruik een https:// URI of geef de -AllowUnencryptedAuthentication parameter op om de fout te onderdrukken.
  • -MaximumRedirection produceert nu een afsluitfout wanneer omleidingspogingen de opgegeven limiet overschrijden in plaats van de resultaten van de laatste omleiding te retourneren.
  • In PowerShell 6.2 is een wijziging aangebracht in UTF-8-codering voor JSON-antwoorden. Wanneer er geen tekenset wordt opgegeven voor een JSON-antwoord, moet de standaardcodering UTF-8 zijn per RFC 8259.
  • Standaardcodering ingesteld op UTF-8 voor application-json antwoorden
  • Parameter toegevoegd -SkipHeaderValidation om headers toe te staan Content-Type die niet compatibel zijn met standaarden
  • Parameter toegevoegd -Form ter ondersteuning van vereenvoudigde multipart/form-data ondersteuning
  • Compatibele, niet hoofdlettergevoelige verwerking van relationele sleutels
  • Parameter -Resume toegevoegd voor web-cmdlets

Invoke-RestMethod retourneert nuttige informatie wanneer er geen gegevens worden geretourneerd

Wanneer een API alleen nullwordt geretourneerd, Invoke-RestMethod serialiseert deze als de tekenreeks "null" in plaats van $null. Met deze wijziging wordt de logica Invoke-RestMethod opgelost om een geldige JSON-letterlijke null waarde van één waarde correct te serialiseren als $null.

Web-cmdlets waarschuwen wanneer -Credential wordt verzonden via niet-versleutelde verbindingen

Wanneer u HTTP gebruikt, worden inhoud met inbegrip van wachtwoorden verzonden als duidelijke tekst. Deze wijziging is om dit niet standaard toe te staan en een fout te retourneren als referenties onveilig worden doorgegeven. Gebruikers kunnen dit overslaan met behulp van de -AllowUnencryptedAuthentication switch.

Parameter -OutFile maken in web-cmdlets om te werken zoals -LiteralPath

Vanaf PowerShell 7.1 werkt de outfile-parameter van de web-cmdlets als LiteralPath en worden geen jokertekens verwerkt.

API-wijzigingen

Klasse verwijderen AddTypeCommandBase

De AddTypeCommandBase klasse is verwijderd om Add-Type de prestaties te verbeteren. Deze klasse wordt alleen gebruikt door de Add-Type cmdlet en mag geen invloed hebben op gebruikers.

Verwijderd VisualBasic als een ondersteunde taal in Add-Type

In het verleden kunt u Visual Basic-code compileren met behulp van de Add-Type cmdlet. Visual Basic is zelden gebruikt met Add-Type. Deze functie is verwijderd om de grootte van PowerShell te verkleinen.

Ondersteuning verwijderd RunspaceConfiguration

Voorheen kon u bij het programmatisch maken van een PowerShell-runspace met behulp van de API de verouderde RunspaceConfiguration of nieuwere InitialSessionState klassen gebruiken. Deze wijziging heeft ondersteuning verwijderd voor RunspaceConfiguration en ondersteunt InitialSessionStatealleen .

CommandInvocationIntrinsics.InvokeScript argumenten binden aan $input in plaats van $args

Een onjuiste positie van een parameter heeft geresulteerd in de argumenten die als invoer zijn doorgegeven in plaats van als argumenten.

Verwijderen ClrVersion en BuildVersion eigenschappen uit $PSVersionTable

De ClrVersion eigenschap van $PSVersionTable is niet nuttig bij CoreCLR. Eindgebruikers mogen die waarde niet gebruiken om de compatibiliteit te bepalen.

De BuildVersion eigenschap is gekoppeld aan de Windows-buildversie, die niet beschikbaar is op niet-Windows-platforms. Gebruik de GitCommitId eigenschap om de exacte buildversie van PowerShell op te halen.

Unicode-escapeparsering implementeren

`u#### of `u{####} wordt geconverteerd naar het bijbehorende Unicode-teken. Als u een letterlijke bewerking `uwilt uitvoeren, ontsnapt u aan de backtick: ``u.

Parameterbindingsprobleem met ValueFromRemainingArguments in PS-functies

ValueFromRemainingArguments retourneert nu de waarden als een matrix in plaats van één waarde die zelf een matrix is.

Opgeschoond gebruik van CommandTypes.Workflow en WorkflowInfoCleaned

Code opschonen met betrekking tot het gebruik van CommandTypes.Workflow en WorkflowInfo in System.Management.Automation.

Deze kleine wijzigingen die fouten veroorzaken, zijn voornamelijk van invloed op help-providercode.

  • Wijzig de openbare constructors van WorkflowInfo in intern. We bieden geen ondersteuning meer voor werkstroom, dus het is logisch dat mensen geen exemplaren kunnen maken Workflow .
  • Verwijder het type System.Management.Automation.DebugSource , omdat dit alleen wordt gebruikt voor foutopsporing van werkstromen.
  • Verwijder de overbelasting van SetParent het abstracte foutopsporingsprogramma van de klasse die alleen wordt gebruikt voor foutopsporing van werkstromen.
  • Verwijder dezelfde overbelasting van SetParent de afgeleide klasse RemotingJobDebugger.

Retourresultaat niet verpakken bij PSObject het converteren van een ScriptBlock naar een gemachtigde

Wanneer een ScriptBlock wordt geconverteerd naar een gemachtigdentype dat moet worden gebruikt in de C#-context, wordt het resultaat verpakt in een PSObject onnodige problemen:

  • Wanneer de waarde wordt geconverteerd naar het retourtype gedelegeerde, wordt de PSObject waarde in wezen uitgepakt. PSObject Het is dus onnodig.
  • Wanneer het retourtype gedelegeerde is object, wordt het verpakt zodat PSObject het moeilijk is om mee te werken in C#-code.

Na deze wijziging is het geretourneerde object het onderliggende object.

Ondersteuning voor externe toegang

Voor externe communicatie van PowerShell (PSRP) met WinRM op Unix-platforms is NTLM/Negotiate of Basic-verificatie via HTTPS vereist. PSRP in macOS ondersteunt alleen Basic-verificatie via HTTPS. Verificatie op basis van Kerberos wordt niet ondersteund voor niet-Windows-platforms.

PowerShell biedt ook ondersteuning voor externe communicatie van PowerShell (PSRP) via SSH op alle platforms (Windows, macOS en Linux). Zie voor meer informatie SSH remoting in PowerShell.

PowerShell Direct for Containers probeert eerst te gebruiken pwsh

PowerShell Direct is een functie van PowerShell en Hyper-V waarmee u verbinding kunt maken met een Virtuele Hyper-V-machine of -container zonder netwerkverbinding of andere services voor extern beheer.

In het verleden is PowerShell Direct verbonden met behulp van het ingebouwde Windows PowerShell-exemplaar in de container. PowerShell Direct probeert nu eerst verbinding te maken met elke beschikbare pwsh.exePATH omgevingsvariabele. Als pwsh.exe dit niet beschikbaar is, valt PowerShell Direct terug om te gebruiken powershell.exe.

Enable-PSRemoting maakt nu afzonderlijke externe eindpunten voor preview-versies

Enable-PSRemoting maakt nu twee configuraties voor externe sessies:

  • Een voor de primaire versie van PowerShell. Bijvoorbeeld: PowerShell.6. Dit eindpunt dat kan worden vertrouwd op secundaire versie-updates als de powershell 6-sessieconfiguratie voor de hele systeembrede versie
  • Eén versiespecifieke sessieconfiguratie, bijvoorbeeld: PowerShell.6.1.0

Dit gedrag is handig als u meerdere PowerShell 6-versies wilt installeren en toegankelijk wilt maken op dezelfde computer.

Daarnaast krijgen preview-versies van PowerShell nu hun eigen configuraties voor externe communicatie na het uitvoeren van de Enable-PSRemoting cmdlet:

C:\WINDOWS\system32> Enable-PSRemoting

De uitvoer kan afwijken als u WinRM nog niet eerder hebt ingesteld.

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

Vervolgens ziet u afzonderlijke PowerShell-sessieconfiguraties voor de preview en stabiele builds van PowerShell 6 en voor elke specifieke versie.

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 syntaxis die wordt ondersteund voor SSH

SSH-clients ondersteunen doorgaans een verbindingsreeks in de indelinguser@host:port. Met de toevoeging van SSH als protocol voor externe communicatie met PowerShell hebben we ondersteuning toegevoegd voor deze indeling van verbindingsreeks:

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

Telemetrie kan alleen worden uitgeschakeld met een omgevingsvariabele

PowerShell verzendt basistelemetriegegevens naar Microsoft wanneer deze worden gestart. De gegevens bevatten de naam van het besturingssysteem, de versie van het besturingssysteem en de PowerShell-versie. Met deze gegevens kunnen we beter inzicht krijgen in de omgevingen waarin PowerShell wordt gebruikt en kunnen we prioriteit geven aan nieuwe functies en oplossingen.

Als u zich wilt afmelden voor deze telemetrie, stelt u de omgevingsvariabele POWERSHELL_TELEMETRY_OPTOUTtruein op , yesof 1. Het verwijderen van het bestand DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY wordt niet meer ondersteund om telemetrie uit te schakelen.