Verschillen tussen Windows PowerShell 5.1 en PowerShell 7.x

Windows PowerShell 5.1 is gebouwd op de .NET Framework v4.5. Met de release van PowerShell 6.0 werd PowerShell een open source project gebouwd op .NET Core 2.0. Als u overstapt van de .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 de beschikbaarheid en het gedrag van PowerShell-cmdlets tussen Windows- en niet-Windows-platforms en de wijzigingen die voortvloeien uit de verschillen tussen de .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 de 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 op Windows 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 belangrijke wijzigingen zijn in .NET die van invloed zijn op PowerShell.

  • PowerShell 7.3 (preview) - gebouwd op .NET 7.0 (preview)
  • 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:

Productterminologie die wordt gebruikt in de documentatie

De documentatie voor PowerShell bestaat uit twee typen inhoud: cmdlet-verwijzing en conceptuele inhoud. De cmdlet-verwijzing is versiespecifiek. U kunt versies wijzigen in de vervolgkeuzelijst linksboven op de pagina. De conceptuele inhoud verandert niet wanneer u versies wijzigt. Over het algemeen zijn de concepten van toepassing op alle versies van PowerShell, tenzij in het artikel een specifieke versie wordt aanroepen.

  • PowerShell : dit is de standaardnaam die we voor het product gebruiken. Wanneer we deze naam gebruiken in de documentatie, hebben we het over de huidige versie van PowerShell. Verschillen tussen PowerShell en Windows PowerShell worden genoteerd door de specifieke versie te noteren.
  • Windows PowerShell - PowerShell gebouwd op .NET Framework. Windows PowerShell alleen op Windows wordt geleverd en vereist het volledige Framework. Het is mogelijk om PowerShell en Windows PowerShell op dezelfde Windows-computer uit te voeren.

Modules die niet meer worden verzonden 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-werkstroom

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 geparallelliseerde taken.

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

In de toekomst willen we systeemeigen parallellisme/gelijktijdigheid inschakelen in de PowerShell-taal zonder powershell-werkstroom nodig te hebben.

Als er controlepunten nodig zijn om een script te hervatten nadat het besturingssysteem opnieuw is opgestart, raden we u aan task scheduler te gebruiken om een script uit te voeren bij het opstarten van het besturingssysteem, maar het script moet de eigen status behouden (zoals het behouden van het script in 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 Het 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 is genomen om de ondersteuning 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, dus de release van PowerShell 7.0 heeft de volgende Windows-specifieke functies 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 Gallery. Zie de [aankondiging][PSDSC-announce] in de PowerShell Team-blog voor meer informatie.

Uitvoerbare wijzigingen in PowerShell

Naam van powershell.exe gewijzigd in pwsh.exe

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

Aanvullende wijzigingen van:pwsh(.exe)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. Dit betekent ook dat u opdrachten kunt uitvoeren zoals pwsh foo.ps1 of pwsh fooScript zonder op te -Filegeven. 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 (of -Interactive) schakeloptie om een interactieve shell aan te geven. Hierdoor kan PowerShell worden gebruikt als een standaardshell op Unix-platforms.
  • -ImportSystemModules Parameters en -PSConsoleFile uit pwsh.exeverwijderd.
  • Aangepaste pwsh -version en ingebouwde hulp om pwsh.exe te worden afgestemd op 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 de naamgeving van shells op niet-Windows-platforms.

Ondersteuning voor het uitvoeren van een PowerShell-script met bool-parameter

Voorheen was pwsh.exe het niet mogelijk om een PowerShell-script uit te voeren met behulp van -File een opgegeven manier om als parameterwaarden door te geven/$true$false. Ondersteuning voor $true/$false 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 voor het impliciet uitvoeren van cmdlets in die module. Zie Import-Module voor meer informatie.

Zie de modulecompatibiliteitstabel 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 beheerstroom voor Windows Update (WU), of dat nu 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 - Kies niet voor het bijwerken via Microsoft Update of WSUS
  • ENABLE_MU
    • 1(standaard) - Opts into using Microsoft Update the Automatic Updates or Windows Update
    • 0- Kies niet voor het gebruik van Microsoft Update de automatische Updates of Windows Update

Enginewijzigingen

Ondersteuning voor PowerShell als een 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 bij het instellen van PowerShell als de standaardshell) en roept de shell aan met de -i switch. Deze wijziging breekt in dat -i eerder kon worden gebruikt als korte hand om overeen te komen -inputformat, wat nu moet zijn -in.

Aangepaste modules

PowerShell-modules zijn een voorafgaande aan PowerShell-modules die niet algemeen worden gebruikt 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 belangrijke wijzigingen aan te brengen 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 vanuit 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 het 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 zijn uitgevoerd.

Oplossing $? om niet te zijn $false wanneer systeemeigen opdracht wordt geschreven naar stderr

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

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

Het is gebruikelijk dat systeemeigen opdrachten naar stderr schrijven zonder een fout aan te geven. Met deze wijziging stderr wordt 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 om codering te gebruiken UTF-8 NoBOM 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. Er wordt nu een nieuwe parameter -AsByteStreamgebruikt 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, waardoor er een probleem wordt gemaakt voor Linux-hulpprogramma's. Deze belangrijke wijziging wijzigt de codering van 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 paar veelgebruikte aliassen waar de zoekactie sneller was.

-Verbose en -Debug worden niet langer overschreven $ErrorActionPreference

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

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

Consistent $PSCulture wijzigingen 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.

Expliciet opgegeven benoemde parameter toestaan om dezelfde 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 zijn gebonden. 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. Als u splatting verplaatst naar het einde van de lijst met argumenten, verandert de volgorde waarin $argsde parameters worden weergegeven.

Bijvoorbeeld:

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

In het vorige gedrag is MyPath niet gebonden -Path aan omdat dit het derde argument in de argumentenlijst is. ## Dus het wordt samen met '$args' gevuld 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 @hash naar het einde van de lijst met argumenten. 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 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-voorwaarde past een lidtoegang, ?.of elementtoegang, ?[]alleen toe op de operand als die operand niet-null oplevert. Anders wordt null geretourneerd.

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

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 $() subexpressieoperator. Zie de sectie Variabelenaam van about_Variables voor meer informatie.

Operator toegevoegd & voor taakbeheer

Als & u aan het einde van een pijplijn plaatst, wordt de pijplijn uitgevoerd als een PowerShell-taak. Wanneer een pijplijn achtergrond is, wordt een taakobject geretourneerd. Zodra de pijplijn als 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 gekopieerd naar de taak, zodat Copy-Item $foo $bar & ze gewoon werken. 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 Gemachtigde

U kunt een PSMethod converteren naar een gemachtigde. Op deze manier kunt u zaken doen zoals het doorgeven PSMethod[M]::DoubleStrLen als een gedelegeerde waarde in [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 worden invariante tekenreeksvergelijkingen voor cultuur niet-afdrukbare besturingstekens genegeerd.

De volgende twee tekenreeksen worden bijvoorbeeld als identiek beschouwd:

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

Nieuwe cmdLets

Nieuwe cmdlet voor Get-Uptime

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 voor Remove-Alias

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

Nieuwe cmdlet-Remove-Service

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

Nieuwe Markdown-cmdlets

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

De volgende cmdlets zijn toegevoegd in PowerShell 6.1:

Nieuwe cmdlet voor Test-Json

De Cmdlet Test-Json test of een tekenreeks een geldig JSON-document (JavaScript Object Notation) is en kan eventueel controleren of het JSON-document aan een opgegeven schema is gekoppeld.

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 voor Join-String

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

Nieuwe weergave ConciseView 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 , ConciseView. De weergaven kunnen door de gebruiker worden geselecteerd via de voorkeursvariabele $ErrorView.

Als een fout niet afkomstig is van een script- of parserfout, dan is het één regelfoutbericht:

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 de 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 desgewenst een volledig gedetailleerde weergave van de volledig gekwalificeerde fout. De cmdlet geeft standaard de volledige details weer, inclusief interne uitzonderingen, van de laatste fout die is opgetreden.

De Get-Error cmdlet ondersteunt invoer uit 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 uit 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 doorloopt, nu ingebouwde parallelle uitvoering met de nieuwe parameter Parallel .

Parallelle 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

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

De nieuwe parameter ThrottleLimit beperkt het aantal scriptblokken dat parallel op een gegeven moment wordt uitgevoerd. De standaardwaarde 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. Het maakt echter alleen modules beschikbaar voor Get-Module en als het CompatiblePSEdition is gemarkeerd als compatibel met CoreImport-Module .

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.

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

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

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 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 deze niets doet). 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.

Typfout opgelost in Get-ComputerInfo eigenschapsnaam

BiosSerialNumber is onjuist 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 $null alle objecten retourneert in plaats van fout

Als $null u een van de volgende items doorgeeft, 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 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 waren objecten die werden geëxporteerd Export-CSV met TypeInformation geïmporteerde ConvertFrom-Csv objecten niet de typegegevens behouden. Met deze wijziging wordt de typegegevens aan PSTypeNames het lid toegevoegd, indien beschikbaar vanuit het CSV-bestand.

-NoTypeInformation is de standaardwaarde 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 Eerder zou een jokerteken het hetzelfde behandelen als -Path en als het jokerteken geen bestanden heeft gevonden, zou het op de achtergrond afsluiten. Correct gedrag moet zijn dat -LiteralPath letterlijk is, dus als het bestand niet bestaat, zou het een fout moeten zijn. Wijziging is het behandelen van jokertekens die -Literal worden gebruikt als letterlijke.

Group-Object de groepen nu sorteert

Als onderdeel van de prestatieverbetering Group-Object wordt nu een gesorteerde lijst van de groepen geretourneerd. Hoewel u niet op de bestelling 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 vorig 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 met de naam more die is verpakt more.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

Eerder 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 in Linux:

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

cdcd -- En overschakelen naar $HOME.

Update-Help als niet-beheerder

Op populaire vraag Update-Help hoeft u niet meer 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-Objectkunt u een object in de pijplijn filteren 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 geleid tot verschillende belangrijke wijzigingen binnen Invoke-WebRequest en Invoke-RestMethod.

  • Invoke-WebRequest ondersteunt nu alleen eenvoudige HTML-parsering. Invoke-WebRequest retourneert altijd een BasicHtmlWebResponseObject object. De ParsedHtml en Forms eigenschappen zijn verwijderd.
  • BasicHtmlWebResponseObject.Headers waarden bevinden zich nu String[] in plaats van String.
  • BasicHtmlWebResponseObject.BaseResponse is nu een System.Net.Http.HttpResponseMessage object.
  • De Response eigenschap op web-cmdlet-uitzonderingen is nu een System.Net.Http.HttpResponseMessage object.
  • Strikte RFC-headerparsering is nu standaard voor de -Headers en -UserAgent parameter. Dit kan worden overgeslagen 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 op 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 de standaardinstelling voor UTF-8-codering voor JSON-antwoorden. Wanneer een charset niet 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 geeft nuttige informatie als 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 correct te serialiseren als $null.

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

Wanneer u HTTP gebruikt, wordt 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 omzeilen met behulp van de -AllowUnencryptedAuthentication switch.

Parameter maken -OutFile 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 Add-Type om 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. We hebben deze functie 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 de 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 met CoreCLR. Eindgebruikers mogen deze 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 `uuitvoer wilt uitvoeren, escapet u de backtick: ``u.

Probleem met parameterbinding 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 de code van de help-provider.

  • 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 klasseopsporingsprogramma dat 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 onnodige PSObject problemen:

  • Wanneer de waarde wordt geconverteerd naar het retourtype gedelegeerde, wordt de PSObject waarde in feite uitgepakt. Dus het PSObject is overbodig.
  • Wanneer het type gedelegeerde retour is object, wordt het verpakt in een PSObject manier waarmee 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 SSH-externe toegang in PowerShell voor meer informatie.

PowerShell Direct for Containers probeert eerst te gebruiken pwsh

[PowerShell Direct] [psdirect] is een functie van PowerShell en Hyper-V waarmee u verbinding kunt maken met een Hyper-V-VM 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 behulp van 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 systeem
  • 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 sessies 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 ondersteund voor SSH

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

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

Telemetrie kan alleen worden uitgeschakeld met een omgevingsvariabele

PowerShell verzendt basistelemetriegegevens naar Microsoft wanneer deze wordt 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_OPTOUT in op true, yesof 1. Het verwijderen van het bestand DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY wordt niet meer ondersteund om telemetrie uit te schakelen.