Verschillen tussen Windows PowerShell 5.1 en PowerShell 7.x

Windows PowerShell 5.1 is gebouwd op het .NET Framework v4.5. Met de release van PowerShell 6.0 werd PowerShell een open source project dat is gebouwd op .NET Core 2.0. Overstappen van het .NET Framework naar .NET Core heeft PowerShell toegestaan om een platformoverschrijdende oplossing te worden. PowerShell wordt uitgevoerd op 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 het .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 dit 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 kern, een subset van het volledige .NET Framework op 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 Verbrekingswijzigingen 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 breaking changes in .NET zijn die van invloed zijn op PowerShell.

  • PowerShell 7.6 - Gebouwd op .NET 10.0 (LTS)
  • PowerShell 7.5 - Gebouwd op .NET 9.0
  • PowerShell 7.4 - Gebouwd op .NET 8.0 (LTS)
  • PowerShell 7.3 - Gebouwd op .NET 7.0
  • PowerShell 7.2 - Gebouwd op .NET 6.0 (LTS)
  • PowerShell 7.1 - Gebouwd op .NET 5.0
  • PowerShell 7.0 - 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 aanpassingen. 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:

Houd rekening met wijzigingen in .NET methode

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.

Bijvoorbeeld, .NET heeft overloads toegevoegd aan de methode [System.String]::Split() die niet beschikbaar zijn in .NET Framework 4.5. De volgende lijst bevat de overbelastingen voor de methode Split() 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 methode Split() als een string. De methode splitst de doeltekenreeks bij elke voorkoming van een teken in de array. 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-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 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 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 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 voor het ophalen en maken van gebeurtenissen op Windows.

Cmdlets die gebruikmaken van het Windows Presentation Framework (WPF)

.NET Core 3.1 ondersteuning toegevoegd voor WPF, zodat 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

PowerShell Desired State Configuration (DSC)-wijzigingen

Invoke-DscResource werd hersteld als een 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 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 aanpwsh(.exe) vanpowershell.exe

  • De eerste positionele parameter veranderd van -Command naar -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 je commando's kunt uitvoeren zoals pwsh foo.ps1 of pwsh fooScript zonder te specificeren -File. Deze wijziging vereist echter dat je expliciet -c of -Command specificeert wanneer je probeert commando's zoals pwsh.exe -Command Get-Command uit te voeren.
  • 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.
  • Parameters -ImportSystemModules verwijderd en -PSConsoleFile uit pwsh.exe.
  • Gewijzigde pwsh -Version en ingebouwde hulp voor pwsh.exe om af te stemmen op andere native tools.
  • Ongeldige argumentfoutberichten voor -File en -Command en exitcodes die in overeenstemming zijn met Unix-standaarden.
  • Parameter -WindowStyle toegevoegd aan Windows. Op vergelijkbare wijze zijn pakketgebonden installatie-updates op niet-Windows platformen actualisaties ter plaatse.

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 bood het gebruiken van pwsh.exe om een PowerShell-script uit te voeren geen mogelijkheid om -File$true/ als parameterwaarden door te geven. Ondersteuning voor $true/$false als geparseerde waarden aan parameters werd toegevoegd. Schakelwaarden worden ook ondersteund.

Verbeterde compatibiliteit met eerdere versies met Windows PowerShell

Voor Windows wordt een nieuwe [switch] parameter UseWindowsPowerShell toegevoegd aan Import-Module. Met deze parameter 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-Modulevoor 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 Windows Update (WU)-beheerstroom, ongeacht of dat met Windows Update voor Bedrijven, WSUS, SCCM of het interactieve WU-dialoogvenster in Instellingen is.

Het PowerShell 7.2 MSI-pakket bevat de volgende commandoregelopties:

  • USE_MU - Deze eigenschap heeft twee mogelijke waarden:
    • 1 (standaard): kiest u voor het bijwerken via Microsoft update of WSUS
    • 0 - Meld u niet aan om bij te werken via Microsoft Update of WSUS
  • ENABLE_MU
    • 1 (standaard) - Kiest ervoor om Microsoft Update, Automatische updates of Windows Update te gebruiken
    • 0 - Kiest 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 -i te accepteren voor een interactieve shell, en veel hulpprogramma's verwachten dit gedrag (script bijvoorbeeld, en wanneer PowerShell als de standaardshell wordt ingesteld) en roept de shell aan met de -i-switch. Deze wijziging is een inbraak die -i voorheen als korte hand kon worden gebruikt om te matchen -InputFormat, wat nu moet worden -in.

Aangepaste snap-ins

PowerShell snap-ins zijn de voorlopers van PowerShell-modules die geen wijdverbreide 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

PowerShell 6.2 heeft ondersteuning ingeschakeld voor Experimental Features. 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.

Gebruik Get-ExperimentalFeature om een lijst te krijgen van beschikbare experimentele functies. Je 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

Voorheen, wanneer een binaire module de module-assembly in de GAC had, laadden we de assembly van de GAC voordat we probeerden het vanuit het basispad van de module te laden.

Controle op null-elementen overslaan voor collecties met een waarde-type element

Voor de Mandatory parameter en ValidateNotNull en attributen ValidateNotNullOrEmpty sla je de null-element check over als het elementtype van de collectie waardetype is.

Behouden $? voor ParenExpression, SubExpression en ArrayExpression

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

Los $? op om niet $false te zijn wanneer native opdrachten naar stderr schrijven.

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

$ErrorActionPreference mag de uitvoer van stderr niet beïnvloeden van systeemeigen opdrachten

Het is gebruikelijk dat ingebouwde opdrachten naar stderr schrijven zonder daarmee een fout aan te geven. Met deze wijziging stderr wordt de output nog steeds vastgelegd in ErrorRecord-objecten , maar de runtime is niet langer van toepassing $ErrorActionPreference als de ErrorRecord afkomstig is van een native commando.

Wijzig $OutputEncoding om UTF-8 NoBOM codering te gebruiken 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, -AsByteStream, wordt nu gebruikt om aan te geven dat een bytestroom als invoer nodig is of dat de uitvoer een stroom van bytes is.

New-ModuleManifest-codering wijzigen in UTF8NoBOM op niet-Windows platforms

New-ModuleManifest Voorheen creëerde psd1 manifesten in UTF-16 met BOM, waardoor er een probleem ontstaat voor Linux-hulpprogramma's. Deze belangrijke wijziging wijzigt de codering van New-ModuleManifest naar UTF (geen BOM) in niet-Windows-platformen.

Verwijderen AllScope uit de meeste standaardaliassen

Om het maken van scopes te versnellen, werd AllScope uit de meeste standaard aliassen verwijderd. AllScope was achtergelaten voor een paar veelgebruikte aliassen waar het opzoeken sneller was.

-Verbose en -Debug overschrijven $ErrorActionPreference niet langer

Voorheen, als -Verbose of -Debug gespecificeerd waren, oversteeg het het gedrag van $ErrorActionPreference. Met deze verandering, -Verbose en -Debug het gedrag van $ErrorActionPreferenceniet langer beïnvloeden.

Bovendien wordt de -Debug parameter ingesteld $DebugPreference op Doorgaan in plaats van Inquire.

Zorg dat $PSCulture consistent de cultuurveranderingen binnen de sessie weerspiegelt.

In Windows PowerShell wordt de huidige cultuurwaarde in de cache opgeslagen, waardoor deze mogelijk niet meer overeenkomt met de cultuur als deze na het opstarten van de sessie wordt gewijzigd. Dit cachegedrag is opgelost in de PowerShell-kern.

Sta een expliciet gespecificeerde benoemde parameter toe om dezelfde parameter met hashtable-splatting te overschrijven.

Met deze wijziging worden de benoemde parameters van splatting verplaatst naar het einde van de parameterlijst, zodat ze gebonden zijn 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. Het verplaatsen van splatting naar het einde van de argumentlijst verandert de volgorde waarin de parameters verschijnen $args.

Voorbeeld:

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

In het vorige gedrag is MyPath niet gebonden aan -Path omdat het het derde argument in de argumentenlijst is. ## Dus het wordt uiteindelijk in '$args' gestopt 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 van @hash naar het einde van de argumentenlijst verplaatst. 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 null-coalescing operator ?? retourneert de waarde van zijn 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 niet-null is.

$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 niet-null is.

$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 operatoren

Opmerking

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.

Aangezien PowerShell het mogelijk maakt dat ? deel uitmaakt van de naam van de variabele, is een formele specificatie van de variabelenaam vereist voor het gebruik van deze operators. Dus het is vereist om {} te gebruiken rond de variabelennamen zoals ${a} of wanneer ? deel uitmaakt van de variabelenaam ${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]

Opmerking

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

Door aan het einde van een pipeline te plaatsen & , wordt de pipeline uitgevoerd als een PowerShell-taak. Wanneer een pijplijn op de achtergrond wordt geplaatst, wordt een taakobject geretourneerd. Zodra de pipeline als taak draait, kunnen alle standaard *-Job cmdlets worden gebruikt om de taak te beheren. Variabelen (zonder rekening te houden met processpecifieke variabelen) die in de pijplijn worden gebruikt, worden automatisch naar de taak gekopieerd en Copy-Item $foo $bar & werkt dus gewoon. 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 nu bevat een Count/Length eigenschap zoals andere objecten.

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

$PSCustomObject.Length
1
$PSCustomObject.Count
1

Dit werk omvat ook ForEach methoden Where waarmee je op PSCustomObject items kunt bedienen en filteren.

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

Conversies van PSMethod naar Delegaat

U kunt een PSMethod converteren naar een delegate. Dit stelt je in staat om dingen zoals PSMethod[M]::DoubleStrLen als een delegate-waarde door te geven 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 cultureel invariante tekenreeksvergelijkingen niet-printfbare besturingstekens.

Bijvoorbeeld, de volgende twee strings worden als identiek beschouwd:

# 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 Remove-Alias cmdlet

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

Nieuwe Remove-Service cmdlet

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 creëren van leesbare documenten met basisopmaak die in HTML kan worden weergegeven.

De volgende cmdlets zijn toegevoegd in PowerShell 6.1:

  • ConvertFrom-Markdown - De inhoud van een tekenreeks of bestand converteren naar een MarkdownInfo-object.
  • Get-MarkdownOption : retourneert de huidige kleuren en stijlen die worden gebruikt voor het weergeven van Markdown-inhoud in de console.
  • Set-MarkdownOption - Hiermee stelt u de kleuren en stijlen in die worden gebruikt voor het weergeven van Markdown-inhoud in de console.
  • Show-Markdown - Geeft Markdown-inhoud weer in de console of als HTML

Nieuwe Test-Json cmdlet

De cmdlet Test-Json test of een tekenreeks een geldig JSON-document (JavaScript Object Notation) is en kan eventueel controleren of het JSON-document is gebaseerd op 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 Join-String cmdlet

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 zijn door de gebruiker selecteerbaar via de voorkeurvariabele $ErrorView.

Bij ConciseView, als een fout niet van een script- of parserfout komt, is het een foutmelding met één regel:

Get-ChildItem -Path C:\NotReal
Get-ChildItem: Can't find path 'C:\NotReal' because it doesn't 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-kleurescape-codes ondersteunt (VT100), worden kleuren niet weergegeven.

De standaardweergave in PowerShell 7 is ConciseView. De vorige standaardweergave was NormalView en je 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

Opmerking

Een nieuwe eigenschap ErrorAccentColor is toegevoegd $Host.PrivateData om het wijzigen van de accentkleur van het foutbericht te ondersteunen.

De nieuwe Get-Errorcmdlet biedt een volledige gedetailleerde weergave van de volledig gekwalificeerde fout indien gewenst. Standaard toont de cmdlet de volledige details, 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 toont alle pijpfouten.

$Error | Get-Error

De Get-Error cmdlet ondersteunt de Latest parameter, waarmee je kunt aangeven hoeveel fouten uit de huidige sessie je 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, ingebouwde parallelle verwerking met de nieuwe Parallel parameter.

Standaard gebruiken parallelle scriptblokken de huidige werkmap van de aanroeper die de parallelle taken startte.

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

$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 Parallel-parameter specificeert het scriptblok dat parallel wordt uitgevoerd voor elke invoerlognaam.

De nieuwe ThrottleLimit-parameter beperkt het aantal scriptblokken dat parallel loopt op een bepaald moment. De standaardwaarde is 5.

Gebruik de variabele $_ om het huidige invoerobject in het scriptblok te representeren. Gebruik de Using: bereikaanpassing om variabele verwijzingen door te geven naar het actieve scriptblok.

Zie ForEach-Object voor meer informatie.

Controleer system32 op compatibele ingebouwde modules op 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 $windir\System32 automatisch opgenomen als onderdeel van de PSModulePath omgevingsvariabele. Echter, het stelt modules alleen bloot aan Get-Module en Import-Module als het CompatiblePSEdition als compatibel met Corewordt gemarkeerd.

U kunt dit gedrag overschrijven om alle modules weer te geven met behulp van de -SkipEditionCheck[switch] parameter. 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.

Los Get-Item -LiteralPath a*b op als a*b eigenlijk niet bestaat om een fout te retourneren

Voorheen, wanneer een wildcard werd aangetoond, zou deze hetzelfde worden behandeld als -Path en als de wildcard geen bestanden vond, zou hij stilzwijgend worden afgesloten. Het juiste gedrag zou moeten zijn dat -LiteralPath letterlijk is, dus als het bestand niet bestaat, zou het een fout moeten geven. De wijziging houdt in dat wildcards die met -Literal worden gebruikt, letterlijk worden behandeld.

Werkmap instellen op huidige map in Start-Job

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

Verwijder -Protocol uit *-Computer cmdlets

De -Protocol parameter is verwijderd uit de volgende cmdlets:

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

DCOM wordt niet meer ondersteund voor veraf communicatie. De cmdlets bieden alleen ondersteuning voor externe WSMAN-communicatie.

Verwijder -ComputerName uit *-Service cmdlets

Om het consistente gebruik van PSRP te stimuleren, werd de -ComputerName parameter uit *-Service cmdlets verwijderd. Gebruik Invoke-Command in plaats daarvan om de cmdlets uit te voeren op externe computers.

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

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

Wijzigingen in Format-Hex

De -Raw parameter doet nu niets. De Format-Hex cmdlet geeft een nauwkeurige weergave van getallen weer, inclusief alle bytes voor hun type. Dit is wat de -Raw parameter vóór deze wijziging heeft gedaan.

Typefout herstellen in Get-ComputerInfo eigenschapsnaam

BiosSerialNumber werd verkeerd gespeld en BiosSeralNumber is veranderd in de juiste spelling.

Wijzigingen in beschikbare hash-algoritmen

De volgende hash-algoritmen zijn verwijderd uit .NET:

  • MACTripleDES
  • RIPEMD160

Deze wijziging is van invloed op de Get-FileHash cmdlet.

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

Het doorgeven $null naar een van de volgende geeft nu een foutmelding:

  • 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 en geïmporteerd met TypeInformation niet behouden de typegegevens. Deze wijziging voegt indien beschikbaar de type-informatie toe aan het pstypenames-element vanuit het CSV-bestand.

-NoTypeInformation is de standaardinstelling op 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 om het vorige gedrag te behouden.

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

Voorheen zou -LiteralPath een wildcard hetzelfde behandelen als -Path en als de wildcard geen bestanden vond, zou hij stilletjes stoppen. Het juiste gedrag zou moeten zijn dat -LiteralPath letterlijk is, dus als het bestand niet bestaat, zou het een fout moeten geven. Verandering is om wildcards die met -Literal gebruikt worden letterlijk te behandelen.

Group-Object sorteert nu de groepen

Als onderdeel van de prestatieverbetering Group-Object geeft nu een gesorteerde lijst van de groepen terug. Hoewel u niet op de volgorde moet vertrouwen, kan deze verandering u problemen geven als u de eerste groep wilde hebben. 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 bevat nu 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 parameter Password, die een SecureString aanneemt. 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

Verwijdering van de more functie

In het verleden heeft PowerShell een functie verzonden op Windows genaamd more die more.com verpakt. Deze functie is nu verwijderd.

De functie help is ook gewijzigd om more.com te gebruiken op Windows, of de standaardpager van het systeem die is opgegeven door $Env:PAGER op niet-Windows-platforms.

cd DriveName: nu brengt gebruikers terug naar de huidige werkmap in die schijf

Voorheen, wanneer Set-Location of cd werd gebruikt om terug te keren naar een PSDrive, werden gebruikers naar de standaardlocatie van die PSDrive gestuurd. Gebruikers worden nu verzonden naar de laatst bekende huidige werkmap voor die sessie.

cd - keert terug naar vorige directory

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

Of op Linux:

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

En cdcd -- verander ook naar $HOME.

Update-Help als niet-beheerder

Op verzoek van velen hoeft Update-Help niet langer als beheerder te worden uitgevoerd. Update-Help gebruikt nu standaard een map met gebruikersspecifieke instellingen om helpbestanden op te slaan.

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 geleid tot verschillende belangrijke wijzigingen binnen Invoke-WebRequest en Invoke-RestMethod.

  • Invoke-WebRequest ondersteunt nu alleen basis HTML-parsing. Invoke-WebRequest Geeft altijd een BasicHtmlWebResponseObject object terug. De ParsedHtml en Forms eigenschappen zijn verwijderd.
  • BasicHtmlWebResponseObject.Headers waarden zijn nu String[] in plaats van String.
  • BasicHtmlWebResponseObject.BaseResponse nu een System.Net.Http.HttpResponseMessage object is.
  • De Response eigenschap op Web Cmdlet-uitzonderingen is nu een System.Net.Http.HttpResponseMessage object.
  • Strikte RFC-headerverwerking is nu standaard voor de parameter -Headers en parameter -UserAgent. Dit kan worden omzeild met -SkipHeaderValidation.
  • file:// en ftp:// URI-schema's worden niet langer ondersteund.
  • System.Net.ServicePointManager Instellingen worden niet langer gerespecteerd.
  • Er is momenteel geen verificatie op basis van certificaten beschikbaar in macOS.
  • Het gebruik van -Credential over een http:// URI zal resulteren in een fout. Gebruik een https:// URI of geef de -AllowUnencryptedAuthentication parameter in om de fout te onderdrukken.
  • -MaximumRedirection produceert nu een beëindigingsfout wanneer omleidingspogingen de opgegeven limiet overschrijden in plaats van de resultaten van de laatste omleiding terug te geven.
  • In PowerShell 6.2 is een wijziging aangebracht in UTF-8-codering voor JSON-antwoorden. Wanneer een tekenset 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 retourneert nuttige informatie wanneer er geen gegevens worden geretourneerd

Wanneer een API slechts null retourneert, serialiseerde Invoke-RestMethod dit als de tekenreeks "null" in plaats van $null. Deze wijziging corrigeert de logica in Invoke-RestMethod om een geldige JSON-waarde null op de juiste manier 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 zorgt ervoor dat dit standaard niet wordt toegestaan en zal een fout melden als inloggegevens onveilig worden doorgegeven. Gebruikers kunnen dit omzeilen door de switch te -AllowUnencryptedAuthentication gebruiken.

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

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

API-wijzigingen

Klasse verwijderen AddTypeCommandBase

De AddTypeCommandBase klasse werd verwijderd uit 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 ondersteunde taal in Add-Type

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

Ondersteuning voor RunspaceConfiguration is verwijderd

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 verwijderde de ondersteuning voor RunspaceConfiguration en alleen ondersteunt InitialSessionState.

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

Een onjuiste positie van een parameter heeft ertoe geleid dat de argumenten zijn doorgegeven als invoer in plaats van als argumenten.

Verwijderen ClrVersion en BuildVersion eigenschappen uit $PSVersionTable

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

De eigenschap BuildVersion 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 omgezet naar het bijbehorende Unicode-teken. Om een letterlijke `uuit te voeren , ontsnap aan de backtick: ``u.

Parameterbindingsprobleem met ValueFromRemainingArguments in PS-functies

ValueFromRemainingArguments nu geeft de waarden terug als een array in plaats van een enkele waarde die zelf een array 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 breaking changes hebben voornamelijk invloed op helpprovidercode.

  • Wijzig de publieke constructors van WorkflowInfo naar intern. We bieden geen ondersteuning meer voor workflows, dus is het logisch om mensen te verhinderen Workflow exemplaren te maken.
  • Verwijder het type System.Management.Automation.DebugSource , omdat dit alleen wordt gebruikt voor foutopsporing van werkstromen.
  • Verwijder de overload van SetParent van de abstracte klasse Debugger dat alleen wordt gebruikt voor het debuggen van workflows.
  • Verwijder dezelfde overbelasting van SetParent de afgeleide klasse RemotingJobDebugger.

Verpak het retourresultaat niet in PSObject bij het converteren van een ScriptBlock naar een delegate.

Wanneer a ScriptBlock wordt omgezet naar een gedelegeertype dat in C#-context wordt gebruikt, brengt het wrappen van het resultaat in een PSObject onnodige problemen met zich mee:

  • Wanneer de waarde wordt omgezet naar het type delegate return, wordt de PSObject in feite weer uitgepakt. Dus het PSObject is overbodig.
  • Wanneer het type delegate return is object, wordt het omwikkeld met a PSObject , waardoor het moeilijk is om mee te werken in C#-code.

Na deze wijziging is het geretourneerde object het onderliggende object.

Ondersteuning voor externe toegang

PowerShell Remoting (PSRP) via WinRM wordt niet ondersteund voor niet-Windows-platforms. U kunt externe communicatie van PowerShell (PSRP) via WinRM van Windows gebruiken om verbinding te maken met andere Windows machines. PowerShell biedt ook ondersteuning voor externe communicatie 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 Hyper-V VM of container zonder netwerkverbinding of andere externe beheerservices.

In het verleden is PowerShell Direct verbonden met behulp van het ingebouwde Windows PowerShell-exemplaar in de container. PowerShell Direct probeert eerst verbinding te maken met elke beschikbare pwsh.exe variabele in de PATH omgeving. Als pwsh.exe niet beschikbaar is, valt PowerShell Direct terug op het powershell.exe.

Enable-PSRemoting Maakt nu aparte afstandseindpunten voor previewversies

Enable-PSRemoting maakt nu twee remote sessieconfiguraties aan:

  • Een voor de primaire versie van PowerShell. Bijvoorbeeld: PowerShell.6. Dit eindpunt kan worden vertrouwd bij kleine versie-updates als de systeembrede PowerShell 6-sessieconfiguratie.
  • Een versie-specifieke 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.

Bovendien krijgen de previewversies van PowerShell nu hun eigen configuraties voor remote sessies nadat de cmdlet Enable-PSRemoting is uitgevoerd.

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 verbindingsreeks in de indeling user@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_OPTOUT in op true, yesof 1. We ondersteunen het niet meer verwijderen van het bestand DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY om telemetrie uit te schakelen.