Verschillen tussen Windows PowerShell 5.1 en PowerShell 7.x
Windows PowerShell 5.1 is gebouwd boven op .NET Framework v4.5. Met de release van PowerShell 6.0 werd PowerShell een opensource-project dat is gebouwd op .NET Core 2.0. Als u overstapt van .NET Framework naar .NET Core, kan PowerShell een platformoverschrijdende oplossing worden. PowerShell wordt uitgevoerd in Windows, macOS en Linux.
Er zijn enkele verschillen in de PowerShell-taal tussen Windows PowerShell en PowerShell. De meest opvallende verschillen zijn in de beschikbaarheid en het gedrag van PowerShell-cmdlets tussen Windows- en niet-Windows-platforms en de wijzigingen die voortvloeien uit de verschillen tussen .NET Framework en .NET Core.
Dit artikel bevat een overzicht van de belangrijke verschillen en belangrijke wijzigingen tussen Windows PowerShell en de huidige versie van PowerShell. Deze samenvatting bevat geen nieuwe functies of cmdlets die zijn toegevoegd. In dit artikel wordt ook niet besproken wat er is gewijzigd tussen versies. Het doel van dit artikel is om de huidige status van PowerShell te presenteren en hoe dat verschilt van Windows PowerShell. Zie de artikelen Wat is er nieuw voor elke versie voor een gedetailleerde bespreking van wijzigingen tussen versies en het toevoegen van nieuwe functies.
- Wat is er nieuw in PowerShell 7.5?
- Wat is er nieuw in PowerShell 7.4?
- Wat is er nieuw in PowerShell 7.3?
- Wat is er nieuw in PowerShell 7.2?
- Wat is er nieuw in PowerShell 7.1?
- Wat is er nieuw in PowerShell 7.0?
- Wat is er nieuw in PowerShell 6.x?
.NET Framework versus .NET Core
PowerShell in Linux en macOS maakt gebruik van .NET Core. Dit is een subset van het volledige .NET Framework in Microsoft Windows. Dit is belangrijk omdat PowerShell directe toegang biedt tot de onderliggende frameworktypen en -methoden. Als gevolg hiervan kunnen scripts die worden uitgevoerd in Windows, mogelijk niet worden uitgevoerd op niet-Windows-platforms vanwege de verschillen in de frameworks. Zie Belangrijke wijzigingen voor migratie van .NET Framework naar .NET Core voor meer informatie over wijzigingen in .NET Core.
Elke nieuwe versie van PowerShell is gebaseerd op een nieuwere versie van .NET. Er kunnen fouten optreden in .NET die van invloed zijn op PowerShell.
- PowerShell 7.5 - gebouwd op .NET 9.0
- PowerShell 7.4 - gebouwd op .NET 8.0
- PowerShell 7.3 - Gebouwd op .NET 7.0
- PowerShell 7.2 (LTS-current) - gebouwd op .NET 6.0 (LTS-current)
- PowerShell 7.1 - gebouwd op .NET 5.0
- PowerShell 7.0 (LTS) - gebouwd op .NET Core 3.1 (LTS)
- PowerShell 6.2 - gebouwd op .NET Core 2.1
- PowerShell 6.1 - gebouwd op .NET Core 2.1
- PowerShell 6.0 - gebouwd op .NET Core 2.0
Met de komst van .NET Standard 2.0 kan PowerShell veel traditionele Windows PowerShell-modules laden zonder te wijzigen. Daarnaast bevat PowerShell 7 een Windows PowerShell-compatibiliteitsfunctie waarmee u Windows PowerShell-modules kunt gebruiken waarvoor nog steeds het volledige framework is vereist.
Zie voor meer informatie:
Let op wijzigingen in .NET-methoden
Hoewel .NET-methodewijzigingen niet specifiek zijn voor PowerShell, kunnen ze van invloed zijn op uw scripts, met name als u .NET-methoden rechtstreeks aanroept. Er kunnen ook nieuwe overbelastingen zijn voor constructors. Dit kan invloed hebben op de manier waarop u objecten maakt met behulp van New-Object
of de [type]::new()
methode.
.NET heeft bijvoorbeeld overbelasting toegevoegd aan de [System.String]::Split()
methode die niet beschikbaar is in .NET Framework 4.5. De volgende lijst bevat de overbelastingen voor de Split()
methode die beschikbaar is in Windows PowerShell 5.1:
PS> "".Split
OverloadDefinitions
-------------------
string[] Split(Params char[] separator)
string[] Split(char[] separator, int count)
string[] Split(char[] separator, System.StringSplitOptions options)
string[] Split(char[] separator, int count, System.StringSplitOptions options)
string[] Split(string[] separator, System.StringSplitOptions options)
string[] Split(string[] separator, int count, System.StringSplitOptions options)
De volgende lijst bevat de overbelastingen voor de Split()
methode die beschikbaar is in PowerShell 7:
"".Split
OverloadDefinitions
-------------------
string[] Split(char separator, System.StringSplitOptions options)
string[] Split(char separator, int count, System.StringSplitOptions options)
string[] Split(Params char[] separator)
string[] Split(char[] separator, int count)
string[] Split(char[] separator, System.StringSplitOptions options)
string[] Split(char[] separator, int count, System.StringSplitOptions options)
string[] Split(string separator, System.StringSplitOptions options)
string[] Split(string separator, int count, System.StringSplitOptions options)
string[] Split(string[] separator, System.StringSplitOptions options)
string[] Split(string[] separator, int count, System.StringSplitOptions options)
In Windows PowerShell 5.1 kunt u een tekenmatrix (char[]
) doorgeven aan de Split()
methode als een string
. De methode splitst de doeltekenreeks op elk exemplaar van een teken in de matrix. Met de volgende opdracht wordt de doeltekenreeks gesplitst in Windows PowerShell 5.1, maar niet in PowerShell 7:
# PowerShell 7 example
"1111p2222q3333".Split('pq')
1111p2222q3333
Als u wilt binden aan de juiste overbelasting, moet u de tekenreeks naar een tekenmatrix typen:
# PowerShell 7 example
"1111p2222q3333".Split([char[]]'pq')
1111
2222
3333
Modules worden niet meer geleverd met PowerShell
Om verschillende compatibiliteitsredenen zijn de volgende modules niet meer opgenomen in PowerShell.
- ISE
- Microsoft.PowerShell.LocalAccounts
- Microsoft.PowerShell.ODataUtils
- Microsoft.PowerShell.Operation.Validation
- PSScheduledJob
- PSWorkflow
- PSWorkflowUtility
PowerShell Workflow
PowerShell Workflow is een functie in Windows PowerShell die is gebaseerd op Windows Workflow Foundation (WF) waarmee robuuste runbooks kunnen worden gemaakt voor langlopende of parallelle taken.
Vanwege het gebrek aan ondersteuning voor Windows Workflow Foundation in .NET Core hebben we PowerShell Workflow uit PowerShell verwijderd.
In de toekomst willen we systeemeigen parallellisme/gelijktijdigheid inschakelen in de PowerShell-taal zonder dat PowerShell Workflow nodig is.
Als er controlepunten moeten worden gebruikt om een script te hervatten nadat het besturingssysteem opnieuw is opgestart, raden we u aan taakplanner te gebruiken om een script uit te voeren bij het opstarten van het besturingssysteem, maar het script moet een eigen status behouden (zoals het behouden van het script naar een bestand).
Cmdlets verwijderd uit PowerShell
Voor de modules die zijn opgenomen in PowerShell, zijn de volgende cmdlets uit PowerShell verwijderd om verschillende compatibiliteitsredenen of het gebruik van niet-ondersteunde API's.
CimCmdlets
Export-BinaryMiLog
Microsoft.PowerShell.Core
Add-PSSnapin
Export-Console
Get-PSSnapin
Remove-PSSnapin
Resume-Job
Suspend-Job
Microsoft.PowerShell.Diagnostics
Export-Counter
Import-Counter
Microsoft.PowerShell.Management
Add-Computer
Checkpoint-Computer
Clear-EventLog
Complete-Transaction
Disable-ComputerRestore
Enable-ComputerRestore
Get-ComputerRestorePoint
Get-ControlPanelItem
Get-EventLog
Get-Transaction
Get-WmiObject
Invoke-WmiMethod
Limit-EventLog
New-EventLog
New-WebServiceProxy
Register-WmiEvent
Remove-Computer
Remove-EventLog
Remove-WmiObject
Reset-ComputerMachinePassword
Restore-Computer
Set-WmiInstance
Show-ControlPanelItem
Show-EventLog
Start-Transaction
Test-ComputerSecureChannel
Undo-Transaction
Use-Transaction
Write-EventLog
Microsoft.PowerShell.Utility
Convert-String
ConvertFrom-String
PSDesiredStateConfiguration
Disable-DscDebug
Enable-DscDebug
Get-DscConfiguration
Get-DscConfigurationStatus
Get-DscLocalConfigurationManager
Publish-DscConfiguration
Remove-DscConfigurationDocument
Restore-DscConfiguration
Set-DscLocalConfigurationManager
Start-DscConfiguration
Stop-DscConfiguration
Test-DscConfiguration
Update-DscConfiguration
WMI v1-cmdlets
De volgende WMI v1-cmdlets zijn verwijderd uit PowerShell:
Register-WmiEvent
Set-WmiInstance
Invoke-WmiMethod
Get-WmiObject
Remove-WmiObject
De CimCmdlets-module -cmdlets (ook wel WMI v2 genoemd) voeren dezelfde functie uit en bieden nieuwe functionaliteit en een opnieuw ontworpen syntaxis.
New-WebServiceProxy
cmdlet verwijderd
.NET Core biedt geen ondersteuning voor Windows Communication Framework, dat services biedt voor het gebruik van het SOAP-protocol. Deze cmdlet is verwijderd omdat soap is vereist.
*-Transaction
cmdlets verwijderd
Deze cmdlets hadden een zeer beperkt gebruik. De beslissing werd genomen om de steun voor hen te stoppen.
Complete-Transaction
Get-Transaction
Start-Transaction
Undo-Transaction
Use-Transaction
*-EventLog
Cmdlets
Vanwege het gebruik van niet-ondersteunde API's zijn de *-EventLog
cmdlets verwijderd uit PowerShell.
Get-WinEvent
en New-WinEvent
zijn beschikbaar om gebeurtenissen op te halen en te maken in Windows.
Cmdlets die gebruikmaken van het Windows Presentation Framework (WPF)
.NET Core 3.1 heeft ondersteuning toegevoegd voor WPF, waardoor de release van PowerShell 7.0 de volgende Windows-specifieke functies heeft hersteld:
- De
Show-Command
cmdlet - De
Out-GridView
cmdlet - De parameter ShowWindow van
Get-Help
Wijzigingen in PowerShell Desired State Configuration (DSC)
Invoke-DscResource
is hersteld als experimentele functie in PowerShell 7.0.
Vanaf PowerShell 7.2 is de PSDesiredStateConfiguration-module verwijderd uit PowerShell en gepubliceerd naar de PowerShell-galerie. Zie de aankondiging in de PowerShell Team-blog voor meer informatie.
Uitvoerbare PowerShell-wijzigingen
Naam van powershell.exe
gewijzigd in pwsh.exe
De binaire naam voor PowerShell is gewijzigd van powershell(.exe)
in pwsh(.exe)
. Deze wijziging biedt een deterministische manier voor gebruikers om PowerShell uit te voeren op computers en ondersteuning te bieden voor side-by-side installaties van Windows PowerShell en PowerShell.
Aanvullende wijzigingen in pwsh(.exe)
van powershell.exe
:
- De eerste positionele parameter gewijzigd van
-Command
in-File
. Met deze wijziging wordt het gebruik van#!
(ook wel shebang genoemd) in PowerShell-scripts opgelost die worden uitgevoerd vanuit niet-PowerShell-shells op niet-Windows-platforms. Het betekent ook dat u opdrachten zoalspwsh foo.ps1
ofpwsh fooScript
zonder op te-File
geven kunt uitvoeren. Voor deze wijziging moet u echter expliciet opgeven-c
of-Command
bij het uitvoeren van opdrachten zoalspwsh.exe -Command Get-Command
. pwsh
accepteert de-i
schakeloptie (of-Interactive
) om een interactieve shell aan te geven. Hierdoor kan PowerShell worden gebruikt als een standaardshell op Unix-platforms.-ImportSystemModules
Parameters verwijderd en-PSConsoleFile
vanpwsh.exe
.- Aangepaste
pwsh -version
en ingebouwde hulp ompwsh.exe
te worden uitgelijnd met andere systeemeigen hulpprogramma's. - Ongeldige argumentfoutberichten voor
-File
en-Command
afsluitcodes die consistent zijn met Unix-standaarden - Parameter toegevoegd
-WindowStyle
in Windows. Op dezelfde manier zijn installaties op basis van pakketten op niet-Windows-platforms in-place updates.
De verkorte naam is ook consistent met het benoemen van shells op niet-Windows-platforms.
Ondersteuning voor het uitvoeren van een PowerShell-script met boolparameter
Voorheen heeft het gebruik van het uitvoeren van pwsh.exe
een PowerShell-script geen -File
manier om als parameterwaarden door te geven/$true
$false
. Ondersteuning voor $true
/$false
als geparseerde waarden aan parameters is toegevoegd. Schakelwaarden worden ook ondersteund.
Verbeterde compatibiliteit met eerdere versies met Windows PowerShell
Voor Windows wordt een nieuwe switchparameter UseWindowsPowerShell toegevoegd aan Import-Module
. Met deze switch maakt u een proxymodule in PowerShell 7 die gebruikmaakt van een lokaal Windows PowerShell-proces om impliciet cmdlets uit te voeren die in die module zijn opgenomen. Zie Import-Module voor meer informatie.
Zie de compatibiliteitstabel voor modules van Microsoft met PowerShell 7.0 voor meer informatie over welke Microsoft-modules werken met PowerShell 7.0.
Microsoft Update-ondersteuning voor Windows
PowerShell 7.2 heeft ondersteuning toegevoegd voor Microsoft Update. Wanneer u deze functie inschakelt, krijgt u de nieuwste PowerShell 7-updates in uw traditionele Windows Update-beheerstroom (WU), ongeacht of dat met Windows Update voor Bedrijven, WSUS, SCCM of het interactieve WU-dialoogvenster in Instellingen.
Het MSI-pakket van PowerShell 7.2 bevat de volgende opdrachtregelopties:
USE_MU
- Deze eigenschap heeft twee mogelijke waarden:1
(standaard): kiest voor het bijwerken via Microsoft Update of WSUS0
- Meld u niet aan voor het bijwerken via Microsoft Update of WSUS
ENABLE_MU
1
(standaard): kiest u voor het gebruik van Microsoft Update de automatische updates of Windows Update0
- Kies niet voor het gebruik van Microsoft Update de automatische updates of Windows Update
Enginewijzigingen
Ondersteuning voor PowerShell als standaard Unix-shell
Op Unix is het een conventie voor shells om te accepteren -i
voor een interactieve shell en veel hulpprogramma's verwachten dit gedrag (script
bijvoorbeeld wanneer u PowerShell instelt als de standaardshell) en de shell aanroept met de -i
switch. Deze wijziging breekt in dat -i
eerder kon worden gebruikt als korte hand om te matchen -inputformat
, wat nu moet zijn -in
.
Aangepaste modules
PowerShell-modules zijn een voorafgaande aan PowerShell-modules die geen wijdverspreide acceptatie hebben in de PowerShell-community.
Vanwege de complexiteit van het ondersteunen van modules en hun gebrek aan gebruik in de community, ondersteunen we geen aangepaste modules meer in PowerShell.
Experimentele functievlagmen
Ondersteuning voor Experimentele functies met PowerShell 6.2 ingeschakeld. Hierdoor kunnen PowerShell-ontwikkelaars nieuwe functies leveren en feedback krijgen voordat het ontwerp is voltooid. Op deze manier vermijden we wijzigingen die fouten veroorzaken naarmate het ontwerp zich ontwikkelt.
Hiermee Get-ExperimentalFeature
haalt u een lijst met beschikbare experimentele functies op. U kunt deze functies in- of uitschakelen met Enable-ExperimentalFeature
en Disable-ExperimentalFeature
.
Assembly laden vanuit het basispad van de module voordat u probeert te laden vanuit de GAC
Toen een binaire module de moduleassembly in GAC heeft, hebben we de assembly van GAC geladen voordat we deze vanuit het basispad van de module proberen te laden.
Null-elementcontrole overslaan voor verzamelingen met een elementtype waarde
Voor de Mandatory
parameter en ValidateNotNull
ValidateNotNullOrEmpty
kenmerken slaat u de null-elementcontrole over of het elementtype van de verzameling een waardetype is.
Behouden $?
voor ParenExpression, SubExpression en ArrayExpression
Deze pull-aanvraag wijzigt de manier waarop we subpipelines (...)
, subexpressies $(...)
en matrixexpressies compileren @()
, zodat dit $?
niet automatisch waar is. In plaats daarvan is de waarde afhankelijk van $?
het resultaat van de pijplijn of instructies die worden uitgevoerd.
Oplossing $?
om niet te zijn $false
wanneer systeemeigen opdrachten worden geschreven naar stderr
$?
is niet ingesteld op $false
wanneer systeemeigen opdrachten worden geschreven naar stderr
. Het is gebruikelijk dat systeemeigen opdrachten naar schrijven stderr
zonder een fout aan te geven. $?
is alleen ingesteld op $false
wanneer de systeemeigen opdracht een afsluitcode zonder nul heeft.
Geen $ErrorActionPreference
invloed hebben op stderr
de uitvoer van systeemeigen opdrachten
Het is gebruikelijk dat systeemeigen opdrachten naar schrijven stderr
zonder een fout aan te geven. Met deze wijziging stderr
wordt de uitvoer nog steeds vastgelegd in ErrorRecord-objecten , maar de runtime is niet meer van toepassing $ErrorActionPreference
als de ErrorRecord afkomstig is van een systeemeigen opdracht.
Wijzigen $OutputEncoding
in het gebruik van UTF-8 NoBOM
codering in plaats van ASCII
De vorige codering, ASCII (7-bits), zou in sommige gevallen leiden tot een onjuiste wijziging van de uitvoer. Als UTF-8 NoBOM
u de standaardinstelling maakt, blijft Unicode-uitvoer behouden met een codering die wordt ondersteund door de meeste hulpprogramma's en besturingssystemen.
Cmdlets samenvoegen met parameter -Encoding
die van het type moeten zijn System.Text.Encoding
De -Encoding
waarde Byte
is verwijderd uit de cmdlets van de bestandssysteemprovider. Een nieuwe parameter, -AsByteStream
wordt nu gebruikt om op te geven dat een bytestroom is vereist als invoer of dat de uitvoer een stroom van bytes is.
Codering wijzigen New-ModuleManifest
in UTF8NoBOM
niet-Windows-platforms
New-ModuleManifest
Eerder maakt u psd1
manifesten in UTF-16 met BOM en maakt u een probleem voor Linux-hulpprogramma's. Door deze wijziging die fouten veroorzaken, wordt de codering gewijzigd in New-ModuleManifest
UTF (geen bom) in niet-Windows-platforms.
Verwijderen AllScope
uit de meeste standaardaliassen
Om het maken van het bereik te versnellen, AllScope
is verwijderd uit de meeste standaardaliassen. AllScope
werd overgelaten voor een aantal veelgebruikte aliassen waar de zoekactie sneller was.
-Verbose
en -Debug
wordt niet langer overschreven $ErrorActionPreference
Voorheen, indien -Verbose
of -Debug
was opgegeven, overschreven het gedrag van $ErrorActionPreference
. Met deze wijziging -Verbose
en -Debug
niet langer van invloed zijn op het gedrag van $ErrorActionPreference
.
-Debug
De parameter wordt ook ingesteld $DebugPreference
op Doorgaan in plaats van Inquire.
Consistent wijzigingen $PSCulture
aanbrengen in sessiecultuur
In Windows PowerShell wordt de huidige cultuurwaarde in de cache opgeslagen, waardoor de waarde kan worden gesynchroniseerd met de cultuur na het opstarten van de sessie wordt gewijzigd. Dit cachegedrag is opgelost in de PowerShell-kern.
Sta expliciet opgegeven benoemde parameter toe om dezelfde parameter te vervangen door hashtable-splatting
Met deze wijziging worden de benoemde parameters van splatting verplaatst naar het einde van de parameterlijst, zodat ze zijn gebonden nadat alle expliciet opgegeven benoemde parameters gebonden zijn. Parameterbinding voor eenvoudige functies genereert geen fout wanneer een opgegeven benoemde parameter niet kan worden gevonden. Onbekende benoemde parameters zijn gebonden aan de $args
parameter van de eenvoudige functie. Het verplaatsen van splatting naar het einde van de lijst met argumenten verandert de volgorde waarin $args
de parameters worden weergegeven.
Voorbeeld:
function SimpleTest {
param(
$Name,
$Path
)
"Name: $Name; Path: $Path; Args: $args"
}
In het vorige gedrag is MyPath niet gebonden omdat -Path
dit het derde argument in de lijst met argumenten is. ## Dus het wordt in '$args' samen met Blah = "World"
PS> $hash = @{ Name = "Hello"; Blah = "World" }
PS> SimpleTest @hash "MyPath"
Name: Hello; Path: ; Args: -Blah: World MyPath
Met deze wijziging worden de argumenten verplaatst naar het einde van de lijst met argumenten @hash
. MyPath wordt het eerste argument in de lijst, dus het is gebonden aan -Path
.
PS> SimpleTest @hash "MyPath"
Name: Hello; Path: MyPath; Args: -Blah: World
Taalwijzigingen
Operator null-coalescing ??
De operator ??
null-coalescing retourneert de waarde van de linkeroperand als deze niet null is.
Anders wordt de rechteroperand geëvalueerd en wordt het resultaat ervan geretourneerd. De ??
operator evalueert de rechteroperand niet als de linkeroperand resulteert in niet-null.
$x = $null
$x ?? 100
100
In het volgende voorbeeld wordt de rechteroperand niet geëvalueerd.
[string] $todaysDate = '1/10/2020'
$todaysDate ?? (Get-Date).ToShortDateString()
1/10/2020
Toewijzingsoperator null-coalescing ??=
De toewijzingsoperator ??=
null-coalescing wijst de waarde van de rechteroperand alleen toe aan de linkeroperand als de linkeroperand null oplevert. De ??=
operator evalueert de rechteroperand niet als de linkeroperand resulteert in niet-null.
$x = $null
$x ??= 100
$x
100
In het volgende voorbeeld wordt de rechteroperand niet geëvalueerd.
[string] $todaysDate = '1/10/2020'
$todaysDate ??= (Get-Date).ToShortDateString()
1/10/2020
Null-voorwaardelijke operators
Notitie
Deze functie is verplaatst van experimenteel naar basis in PowerShell 7.1.
Een operator met null-voorwaardelijke voorwaarden past een lidtoegang, ?.
of elementtoegang, ?[]
alleen toe op de operand als die operand niet-null evalueert; anders wordt null geretourneerd.
Omdat PowerShell deel kan ?
uitmaken van de naam van de variabele, is formele specificatie van de naam van de variabele vereist voor het gebruik van deze operators. Het is dus vereist om te gebruiken {}
rond de namen van variabelen, zoals ${a}
of wanneer ?
deel uitmaakt van de naam ${a?}
van de variabele.
In het volgende voorbeeld wordt de waarde van PropName geretourneerd.
$a = @{ PropName = 100 }
${a}?.PropName
100
In het volgende voorbeeld wordt null geretourneerd zonder toegang te krijgen tot de lidnaam PropName.
$a = $null
${a}?.PropName
Op dezelfde manier wordt de waarde van het element geretourneerd.
$a = 1..10
${a}?[0]
1
En wanneer de operand null is, wordt het element niet geopend en wordt null geretourneerd.
$a = $null
${a}?[0]
Notitie
De syntaxis van de variabelenaam mag ${<name>}
niet worden verward met de $()
operator voor subexpressie. Zie de sectie Variabelenaam van about_Variables voor meer informatie.
Operator toegevoegd &
voor taakbeheer
Als &
u een pijplijn aan het einde van een pijplijn plaatst, wordt de pijplijn uitgevoerd als een PowerShell-taak. Wanneer een pijplijn is achtergrond, wordt een taakobject geretourneerd. Zodra de pijplijn als een taak wordt uitgevoerd, kunnen alle standaard-cmdlets *-Job
worden gebruikt om de taak te beheren. Variabelen (waarbij processpecifieke variabelen worden genegeerd) die in de pijplijn worden gebruikt, worden automatisch naar de taak gekopieerd, dus Copy-Item $foo $bar &
werkt alleen. De taak wordt ook uitgevoerd in de huidige map in plaats van de basismap van de gebruiker.
Nieuwe methoden/eigenschappen op PSCustomObject
We hebben nieuwe methoden en eigenschappen toegevoegd aan PSCustomObject
. PSCustomObject
bevat nu een Count
/Length
eigenschap zoals andere objecten.
$PSCustomObject = [pscustomobject]@{foo = 1}
$PSCustomObject.Length
1
$PSCustomObject.Count
1
Dit werk omvat ForEach
ook en Where
methoden waarmee u items kunt gebruiken en filteren PSCustomObject
:
$PSCustomObject.ForEach({$_.foo + 1})
2
$PSCustomObject.Where({$_.foo -gt 0})
foo
---
1
Conversies van PSMethod naar Gedelegeerde
U kunt een PSMethod
converteren naar een gemachtigde. Op deze manier kunt u bijvoorbeeld als gemachtigde waarde doorgeven PSMethod
[M]::DoubleStrLen
aan [M]::AggregateString
:
class M {
static [int] DoubleStrLen([string] $value) { return 2 * $value.Length }
static [long] AggregateString([string[]] $values, [func[string, int]] $selector) {
[long] $res = 0
foreach($s in $values){
$res += $selector.Invoke($s)
}
return $res
}
}
[M]::AggregateString((gci).Name, [M]::DoubleStrLen)
Tekenreeksvergelijkingsgedrag gewijzigd in PowerShell 7.1
PowerShell 7.1 is gebouwd op .NET 5.0, waarmee de volgende belangrijke wijziging is geïntroduceerd:
Vanaf .NET 5.0 negeren invariante tekenreeksvergelijkingen voor cultuur niet-afdrukbare besturingstekens.
De volgende twee tekenreeksen worden bijvoorbeeld beschouwd als identiek:
# Escape sequence "`a" is Ctrl-G or [char]7
'Food' -eq "Foo`ad"
True
Nieuwe cmdLets
Nieuwe Get-Uptime-cmdlet
De cmdlet Get-Uptime retourneert de tijd die is verstreken sinds de laatste keer dat het besturingssysteem is opgestart. De cmdlet is geïntroduceerd in PowerShell 6.0.
Nieuwe cmdlet remove-alias
De cmdlet Remove-Alias verwijdert een alias uit de huidige PowerShell-sessie. De cmdlet is geïntroduceerd in PowerShell 6.0.
Nieuwe cmdlet Remove-Service
De cmdlet Remove-Service verwijdert een Windows-service in het register en in de servicedatabase. De Remove-Service
cmdlet is geïntroduceerd in PowerShell 6.0.
Nieuwe Markdown-cmdlets
Markdown is een standaard voor het maken van leesbare document zonder opmaak met basisopmaak die in HTML kan worden weergegeven.
De volgende cmdlets zijn toegevoegd in PowerShell 6.1:
- ConvertFrom-Markdown - De inhoud van een tekenreeks of een 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
Met de cmdlet Test-Json wordt getest of een tekenreeks een geldig JSON-document (JavaScript Object Notation) is en optioneel kan worden gecontroleerd of het JSON-document is ingesteld op basis van een opgegeven schema.
Deze cmdlet is geïntroduceerd in PowerShell 6.1
Nieuwe cmdlets ter ondersteuning van experimentele functies
De volgende cmdlets zijn toegevoegd in PowerShell 6.2 ter ondersteuning van experimentele functies.
Nieuwe cmdlet Join-String
De cmdlet Join-String combineert objecten uit de pijplijn in één tekenreeks. Deze cmdlet is toegevoegd in PowerShell 6.2.
Nieuwe weergave Beknopte weergave en cmdlet Get-Error
PowerShell 7.0 verbetert de weergave van foutberichten om de leesbaarheid van interactieve en scriptfouten te verbeteren met een nieuwe standaardweergave, Beknopte weergave. De weergaven kunnen door de gebruiker worden geselecteerd via de voorkeursvariabele $ErrorView
.
Als een fout niet afkomstig is van een script- of parserfout, is dit een foutbericht met één regel:
Get-Childitem -Path c:\NotReal
Get-ChildItem: Cannot find path 'C:\NotReal' because it does not exist
Als de fout optreedt tijdens het uitvoeren van een script of een parseringsfout is, retourneert PowerShell een foutbericht met meerdere regels dat de fout, een aanwijzer en een foutbericht bevat waarin wordt aangegeven waar de fout zich op die regel bevindt. Als de terminal geen ANSI-kleuren escapereeksen (VT100) ondersteunt, worden kleuren niet weergegeven.
De standaardweergave in PowerShell 7 is ConciseView. De vorige standaardweergave was NormalView en u kunt dit selecteren door de voorkeursvariabele $ErrorView
in 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-Error
cmdlet biedt een volledige gedetailleerde weergave van de volledig gekwalificeerde fout indien gewenst. De cmdlet geeft standaard de volledige details weer, inclusief binnenuitzonderingen, van de laatste fout die is opgetreden.
De Get-Error
cmdlet ondersteunt invoer van de pijplijn met behulp van de ingebouwde variabele $Error
.
Get-Error
geeft alle doorgesluisde fouten weer.
$Error | Get-Error
De Get-Error
cmdlet ondersteunt de nieuwste parameter, zodat u kunt opgeven hoeveel fouten van de huidige sessie u wilt weergeven.
Get-Error -Newest 3 # Displays the lst three errors that occurred in the session
Zie Get-Error voor meer informatie.
Cmdlet-wijzigingen
Parallelle uitvoering toegevoegd aan ForEach-Object
Vanaf PowerShell 7.0 heeft de ForEach-Object
cmdlet, die items in een verzameling herhaalt, nu ingebouwde parallelle uitvoering met de nieuwe parameter Parallel .
Parallel scriptblokken maken standaard gebruik van de huidige werkmap van de aanroeper die de parallelle taken heeft gestart.
In dit voorbeeld worden 50.000 logboekvermeldingen opgehaald uit 5 systeemlogboeken op een lokale Windows-computer:
$logNames = 'Security','Application','System','Windows PowerShell','Microsoft-Windows-Store/Operational'
$logEntries = $logNames | ForEach-Object -Parallel {
Get-WinEvent -LogName $_ -MaxEvents 10000
} -ThrottleLimit 5
$logEntries.Count
50000
Met de parameter Parallel geeft u het scriptblok op dat parallel wordt uitgevoerd voor elke naam van het invoerlogboek.
De nieuwe parameter ThrottleLimit beperkt het aantal scriptblokken dat op een bepaald moment parallel wordt uitgevoerd. De standaard is 5.
Gebruik de $_
variabele om het huidige invoerobject in het scriptblok weer te geven. Gebruik het $using:
bereik om variabele verwijzingen door te geven naar het actieve scriptblok.
Zie ForEach-Object voor meer informatie.
Controleren op system32
compatibele ingebouwde modules in Windows
In de Windows 10 1809-update en Windows Server 2019 hebben we een aantal ingebouwde PowerShell-modules bijgewerkt om deze te markeren als compatibel met PowerShell.
Wanneer PowerShell wordt gestart, wordt deze automatisch opgenomen $windir\System32
als onderdeel van de PSModulePath
omgevingsvariabele. Er worden echter alleen modules beschikbaar gesteld aan Get-Module
en Import-Module
als het CompatiblePSEdition
is gemarkeerd als compatibel met Core
.
U kunt dit gedrag overschrijven om alle modules weer te geven met behulp van de -SkipEditionCheck
switchparameter.
We hebben ook een PSEdition
eigenschap toegevoegd aan de tabeluitvoer.
-lp
alias voor alle -LiteralPath
parameters
We hebben een standaardparameteralias -lp
gemaakt voor alle ingebouwde PowerShell-cmdlets met een -LiteralPath
parameter.
Oplossen Get-Item -LiteralPath a*b
als a*b
er niet daadwerkelijk een fout wordt geretourneerd
-LiteralPath
Voorheen zou een jokerteken het hetzelfde behandelen als -Path
en als het jokerteken geen bestanden heeft gevonden, zou het op de achtergrond worden afgesloten. Correct gedrag moet zijn dat letterlijk is, -LiteralPath
dus als het bestand niet bestaat, zou het een fout moeten zijn. Wijziging is het behandelen van jokertekens die -Literal
worden gebruikt als letterlijk.
Werkmap instellen op huidige map in Start-Job
De Start-Job
cmdlet gebruikt nu de huidige map als de werkmap voor de nieuwe taak.
Verwijderen -Protocol
uit *-Computer
cmdlets
Vanwege problemen met externe communicatie van RPC in CoreFX (met name op niet-Windows-platforms) en een consistente externe ervaring in PowerShell garanderen, is de -Protocol
parameter verwijderd uit de \*-Computer
cmdlets. DCOM wordt niet meer ondersteund voor externe communicatie. De volgende cmdlets bieden alleen ondersteuning voor externe WSMAN-communicatie:
Rename-Computer
Restart-Computer
Stop-Computer
Verwijderen -ComputerName
uit *-Service
cmdlets
Om het consistente gebruik van PSRP aan te moedigen, is de -ComputerName
parameter verwijderd uit *-Service
cmdlets.
Oplossing Get-Content -Delimiter
om het scheidingsteken niet op te nemen in de geretourneerde regels
Voorheen was de uitvoer tijdens het gebruik Get-Content -Delimiter
inconsistent en onhandig omdat verdere verwerking van de gegevens nodig was om het scheidingsteken te verwijderen. Met deze wijziging wordt het scheidingsteken in geretourneerde regels verwijderd.
Wijzigingen in Format-Hex
De -Raw
parameter is nu een 'no-op' (omdat er niets gebeurt). In de toekomst wordt alle uitvoer weergegeven met een werkelijke weergave van getallen die alle bytes voor het type bevatten. Dit is wat de -Raw
parameter vóór deze wijziging deed.
Typo fix in Get-ComputerInfo property name
BiosSerialNumber
verkeerd gespeld als BiosSeralNumber
en is gewijzigd in de juiste spelling.
Toevoegen Get-StringHash
en Get-FileHash
cmdlets
Deze wijziging is dat sommige hash-algoritmen niet worden ondersteund door CoreFX, daarom zijn ze niet meer beschikbaar:
MACTripleDES
RIPEMD160
Validatie toevoegen aan Get-*
cmdlets waarbij het doorgeven van $null alle objecten retourneert in plaats van fout
Als u een van de volgende items doorgeeft $null
, treedt er nu een fout op:
Get-Credential -UserName
Get-Event -SourceIdentifier
Get-EventSubscriber -SourceIdentifier
Get-Help -Name
Get-PSBreakpoint -Script
Get-PSProvider -PSProvider
Get-PSSessionConfiguration -Name
Get-Runspace -Name
Get-RunspaceDebug -RunspaceName
Get-Service -Name
Get-TraceSource -Name
Get-Variable -Name
Ondersteuning toevoegen voor de W3C Extended Log-bestandsindeling in Import-Csv
Voorheen kan de Import-Csv
cmdlet niet worden gebruikt om de logboekbestanden rechtstreeks te importeren in de uitgebreide W3C-logboekindeling en is er extra actie vereist. Met deze wijziging wordt de uitgebreide W3C-logboekindeling ondersteund.
Import-Csv
is van toepassing PSTypeNames
bij het importeren wanneer de typegegevens aanwezig zijn in het CSV-bestand
Eerder werden objecten die werden geëxporteerd met Export-CSV
geïmporteerd, TypeInformation
ConvertFrom-Csv
de typegegevens niet behouden. Met deze wijziging wordt de typegegevens toegevoegd aan PSTypeNames
het lid, indien beschikbaar vanuit het CSV-bestand.
-NoTypeInformation
is de standaardinstelling ingeschakeld Export-Csv
Voorheen zou de Export-CSV
cmdlet een opmerking uitvoeren als de eerste regel met de typenaam van het object. De wijziging sluit standaard de typegegevens uit omdat deze niet wordt begrepen door de meeste CSV-hulpprogramma's. Deze wijziging is aangebracht om feedback van klanten aan te pakken.
Gebruik -IncludeTypeInformation
dit om het vorige gedrag te behouden.
Toestaan *
om te worden gebruikt in registerpad voor Remove-Item
-LiteralPath
Voorheen zou een jokerteken het hetzelfde behandelen als -Path
en als het jokerteken geen bestanden heeft gevonden, zou het op de achtergrond worden afgesloten. Correct gedrag moet zijn dat letterlijk is, -LiteralPath
dus als het bestand niet bestaat, zou het een fout moeten zijn. Wijziging is het behandelen van jokertekens die -Literal
worden gebruikt als letterlijk.
Groeperen-object sorteert nu de groepen
Als onderdeel van de prestatieverbetering wordt Group-Object
nu een gesorteerde lijst van de groepen geretourneerd.
Hoewel u niet op de order moet vertrouwen, kunt u worden verbroken door deze wijziging als u de eerste groep wilt. We hebben besloten dat deze prestatieverbetering de wijziging waard was, omdat de impact van het afhankelijk zijn van eerder gedrag laag is.
Standaarddeviatie in Measure-Object
De uitvoer van Measure-Object
nu bevat een StandardDeviation
eigenschap.
Get-Process | Measure-Object -Property CPU -AllStats
Count : 308
Average : 31.3720576298701
Sum : 9662.59375
Maximum : 4416.046875
Minimum :
StandardDeviation : 264.389544720926
Property : CPU
Get-PfxCertificate -Password
Get-PfxCertificate
heeft nu de Password
parameter, die een SecureString
. Op deze manier kunt u deze niet-interactief gebruiken:
$certFile = '\\server\share\pwd-protected.pfx'
$certPass = Read-Host -AsSecureString -Prompt 'Enter the password for certificate: '
$certThumbPrint = (Get-PfxCertificate -FilePath $certFile -Password $certPass ).ThumbPrint
Verwijderen van de more
functie
In het verleden heeft PowerShell een functie verzonden in Windows die dat verpakte more
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
Voorheen heeft het gebruik Set-Location
of cd
om terug te keren naar een PSDrive-gebruiker naar de standaardlocatie voor dat station verzonden. Gebruikers worden nu verzonden naar de laatst bekende huidige werkmap voor die sessie.
cd -
keert terug naar de vorige map
C:\Windows\System32> cd C:\
C:\> cd -
C:\Windows\System32>
Of op Linux:
PS /etc> cd /usr/bin
PS /usr/bin> cd -
PS /etc>
cd
En cd --
schakel over naar $HOME
.
Update-Help
als niet-beheerder
Op populaire vraag Update-Help
hoeft niet langer als beheerder te worden uitgevoerd. Update-Help
nu wordt standaard hulp opgeslagen in een map met gebruikersbereik.
Where-Object -Not
Met de toevoeging van -Not
parameter aan Where-Object
, kan een object in de pijplijn worden gefilterd op het niet bestaan van een eigenschap of een null/lege eigenschapswaarde.
Met deze opdracht worden bijvoorbeeld alle services geretourneerd waarvoor geen afhankelijke services zijn gedefinieerd:
Get-Service | Where-Object -Not DependentServices
Wijzigingen in web-cmdlets
De onderliggende .NET-API van de web-cmdlets is gewijzigd in System.Net.Http.HttpClient
. Deze wijziging biedt veel voordelen. Deze wijziging heeft echter samen met een gebrek aan interoperabiliteit met Internet Explorer geresulteerd in verschillende belangrijke wijzigingen binnen Invoke-WebRequest
en Invoke-RestMethod
.
Invoke-WebRequest
biedt nu alleen ondersteuning voor eenvoudige HTML-parsering.Invoke-WebRequest
retourneert altijd eenBasicHtmlWebResponseObject
object. DeParsedHtml
enForms
eigenschappen zijn verwijderd.BasicHtmlWebResponseObject.Headers
waarden zijn nuString[]
in plaats vanString
.BasicHtmlWebResponseObject.BaseResponse
is nu eenSystem.Net.Http.HttpResponseMessage
object.- De
Response
eigenschap uitzonderingen voor web-cmdlets is nu eenSystem.Net.Http.HttpResponseMessage
object. - Strikte RFC-headerparsering is nu standaard voor de
-Headers
en-UserAgent
parameter. Dit kan worden omzeild met-SkipHeaderValidation
. file://
enftp://
URI-schema's worden niet meer ondersteund.System.Net.ServicePointManager
instellingen worden niet meer gehonoreerd.- Er is momenteel geen verificatie op basis van certificaten beschikbaar in macOS.
- Het gebruik van
-Credential
over eenhttp://
URI leidt tot een fout. Gebruik eenhttps://
URI of geef de-AllowUnencryptedAuthentication
parameter op om de fout te onderdrukken. -MaximumRedirection
produceert nu een afsluitfout wanneer omleidingspogingen de opgegeven limiet overschrijden in plaats van de resultaten van de laatste omleiding te retourneren.- In PowerShell 6.2 is een wijziging aangebracht in UTF-8-codering voor JSON-antwoorden. Wanneer er geen tekenset wordt opgegeven voor een JSON-antwoord, moet de standaardcodering UTF-8 zijn per RFC 8259.
- Standaardcodering ingesteld op UTF-8 voor
application-json
antwoorden - Parameter toegevoegd
-SkipHeaderValidation
om headers toe te staanContent-Type
die niet compatibel zijn met standaarden - Parameter toegevoegd
-Form
ter ondersteuning van vereenvoudigdemultipart/form-data
ondersteuning - Compatibele, niet hoofdlettergevoelige verwerking van relationele sleutels
- Parameter
-Resume
toegevoegd voor web-cmdlets
Invoke-RestMethod retourneert nuttige informatie wanneer er geen gegevens worden geretourneerd
Wanneer een API alleen null
wordt geretourneerd, Invoke-RestMethod
serialiseert deze als de tekenreeks "null"
in plaats van $null
. Met deze wijziging wordt de logica Invoke-RestMethod
opgelost om een geldige JSON-letterlijke null
waarde van één waarde correct te serialiseren als $null
.
Web-cmdlets waarschuwen wanneer -Credential
wordt verzonden via niet-versleutelde verbindingen
Wanneer u HTTP gebruikt, worden inhoud met inbegrip van wachtwoorden verzonden als duidelijke tekst. Deze wijziging is om dit niet standaard toe te staan en een fout te retourneren als referenties onveilig worden doorgegeven. Gebruikers kunnen dit overslaan met behulp van de -AllowUnencryptedAuthentication
switch.
Parameter -OutFile
maken in web-cmdlets om te werken zoals -LiteralPath
Vanaf PowerShell 7.1 werkt de outfile-parameter van de web-cmdlets als LiteralPath en worden geen jokertekens verwerkt.
API-wijzigingen
Klasse verwijderen AddTypeCommandBase
De AddTypeCommandBase
klasse is verwijderd om Add-Type
de prestaties te verbeteren. Deze klasse wordt alleen gebruikt door de Add-Type
cmdlet en mag geen invloed hebben op gebruikers.
Verwijderd VisualBasic
als een ondersteunde taal in Add-Type
In het verleden kunt u Visual Basic-code compileren met behulp van de Add-Type
cmdlet. Visual Basic is zelden gebruikt met Add-Type
. Deze functie is verwijderd om de grootte van PowerShell te verkleinen.
Ondersteuning verwijderd RunspaceConfiguration
Voorheen kon u bij het programmatisch maken van een PowerShell-runspace met behulp van de API de verouderde RunspaceConfiguration
of nieuwere InitialSessionState
klassen gebruiken. Deze wijziging heeft ondersteuning verwijderd voor RunspaceConfiguration
en ondersteunt InitialSessionState
alleen .
CommandInvocationIntrinsics.InvokeScript
argumenten binden aan $input
in plaats van $args
Een onjuiste positie van een parameter heeft geresulteerd in de argumenten die als invoer zijn doorgegeven in plaats van als argumenten.
Verwijderen ClrVersion
en BuildVersion
eigenschappen uit $PSVersionTable
De ClrVersion
eigenschap van $PSVersionTable
is niet nuttig bij CoreCLR. Eindgebruikers mogen die waarde niet gebruiken om de compatibiliteit te bepalen.
De BuildVersion
eigenschap is gekoppeld aan de Windows-buildversie, die niet beschikbaar is op niet-Windows-platforms. Gebruik de GitCommitId
eigenschap om de exacte buildversie van PowerShell op te halen.
Unicode-escapeparsering implementeren
`u####
of `u{####}
wordt geconverteerd naar het bijbehorende Unicode-teken. Als u een letterlijke bewerking `u
wilt uitvoeren, ontsnapt u aan de backtick: ``u
.
Parameterbindingsprobleem met ValueFromRemainingArguments
in PS-functies
ValueFromRemainingArguments
retourneert nu de waarden als een matrix in plaats van één waarde die zelf een matrix is.
Opgeschoond gebruik van CommandTypes.Workflow
en WorkflowInfoCleaned
Code opschonen met betrekking tot het gebruik van CommandTypes.Workflow
en WorkflowInfo
in System.Management.Automation.
Deze kleine wijzigingen die fouten veroorzaken, zijn voornamelijk van invloed op help-providercode.
- Wijzig de openbare constructors van
WorkflowInfo
in intern. We bieden geen ondersteuning meer voor werkstroom, dus het is logisch dat mensen geen exemplaren kunnen makenWorkflow
. - Verwijder het type System.Management.Automation.DebugSource , omdat dit alleen wordt gebruikt voor foutopsporing van werkstromen.
- Verwijder de overbelasting van
SetParent
het abstracte foutopsporingsprogramma van de klasse die alleen wordt gebruikt voor foutopsporing van werkstromen. - Verwijder dezelfde overbelasting van
SetParent
de afgeleide klasse RemotingJobDebugger.
Retourresultaat niet verpakken bij PSObject
het converteren van een ScriptBlock
naar een gemachtigde
Wanneer een ScriptBlock
wordt geconverteerd naar een gemachtigdentype dat moet worden gebruikt in de C#-context, wordt het resultaat verpakt in een PSObject
onnodige problemen:
- Wanneer de waarde wordt geconverteerd naar het retourtype gedelegeerde, wordt de
PSObject
waarde in wezen uitgepakt.PSObject
Het is dus onnodig. - Wanneer het retourtype gedelegeerde is
object
, wordt het verpakt zodatPSObject
het moeilijk is om mee te werken in C#-code.
Na deze wijziging is het geretourneerde object het onderliggende object.
Ondersteuning voor externe toegang
Voor externe communicatie van PowerShell (PSRP) met WinRM op Unix-platforms is NTLM/Negotiate of Basic-verificatie via HTTPS vereist. PSRP in macOS ondersteunt alleen Basic-verificatie via HTTPS. Verificatie op basis van Kerberos wordt niet ondersteund voor niet-Windows-platforms.
PowerShell biedt ook ondersteuning voor externe communicatie van PowerShell (PSRP) via SSH op alle platforms (Windows, macOS en Linux). Zie voor meer informatie SSH remoting in PowerShell.
PowerShell Direct for Containers probeert eerst te gebruiken pwsh
PowerShell Direct is een functie van PowerShell en Hyper-V waarmee u verbinding kunt maken met een Virtuele Hyper-V-machine of -container zonder netwerkverbinding of andere services voor extern beheer.
In het verleden is PowerShell Direct verbonden met behulp van het ingebouwde Windows PowerShell-exemplaar in de container. PowerShell Direct probeert nu eerst verbinding te maken met elke beschikbare pwsh.exe
PATH
omgevingsvariabele. Als pwsh.exe
dit niet beschikbaar is, valt PowerShell Direct terug om te gebruiken powershell.exe
.
Enable-PSRemoting
maakt nu afzonderlijke externe eindpunten voor preview-versies
Enable-PSRemoting
maakt nu twee configuraties voor externe sessies:
- Een voor de primaire versie van PowerShell. Bijvoorbeeld:
PowerShell.6
. Dit eindpunt dat kan worden vertrouwd op secundaire versie-updates als de powershell 6-sessieconfiguratie voor de hele systeembrede versie - Eén versiespecifieke sessieconfiguratie, bijvoorbeeld:
PowerShell.6.1.0
Dit gedrag is handig als u meerdere PowerShell 6-versies wilt installeren en toegankelijk wilt maken op dezelfde computer.
Daarnaast krijgen preview-versies van PowerShell nu hun eigen configuraties voor externe communicatie na het uitvoeren van de Enable-PSRemoting
cmdlet:
C:\WINDOWS\system32> Enable-PSRemoting
De uitvoer kan afwijken als u WinRM nog niet eerder hebt ingesteld.
WinRM is already set up to receive requests on this computer.
WinRM is already set up for remote management on this computer.
Vervolgens ziet u afzonderlijke PowerShell-sessieconfiguraties voor de preview en stabiele builds van PowerShell 6 en voor elke specifieke versie.
Get-PSSessionConfiguration
Name : PowerShell.6.2-preview.1
PSVersion : 6.2
StartupScript :
RunAsUser :
Permission : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed
Name : PowerShell.6-preview
PSVersion : 6.2
StartupScript :
RunAsUser :
Permission : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed
Name : powershell.6
PSVersion : 6.1
StartupScript :
RunAsUser :
Permission : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed
Name : powershell.6.1.0
PSVersion : 6.1
StartupScript :
RunAsUser :
Permission : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed
user@host:port
syntaxis die wordt ondersteund voor SSH
SSH-clients ondersteunen doorgaans een verbindingsreeks in de indelinguser@host:port
. Met de toevoeging van SSH als protocol voor externe communicatie met PowerShell hebben we ondersteuning toegevoegd voor deze indeling van verbindingsreeks:
Enter-PSSession -HostName fooUser@ssh.contoso.com:2222
Telemetrie kan alleen worden uitgeschakeld met een omgevingsvariabele
PowerShell verzendt basistelemetriegegevens naar Microsoft wanneer deze worden gestart. De gegevens bevatten de naam van het besturingssysteem, de versie van het besturingssysteem en de PowerShell-versie. Met deze gegevens kunnen we beter inzicht krijgen in de omgevingen waarin PowerShell wordt gebruikt en kunnen we prioriteit geven aan nieuwe functies en oplossingen.
Als u zich wilt afmelden voor deze telemetrie, stelt u de omgevingsvariabele POWERSHELL_TELEMETRY_OPTOUT
true
in op , yes
of 1
. Het verwijderen van het bestand DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY
wordt niet meer ondersteund om telemetrie uit te schakelen.