Az Windows PowerShell 5.1 és a PowerShell 7.x közötti különbségek

A Windows PowerShell 5.1 a .NET-keretrendszer 4.5-ös verzióra épül. A PowerShell 6.0 kiadásával a PowerShell a .NET Core 2.0-ra épülő nyílt forráskód projektté vált. A .NET-keretrendszer a .NET Core-ra való váltás lehetővé tette, hogy a PowerShell platformfüggetlen megoldássá váljon. A PowerShell Windows, macOS és Linux rendszeren fut.

A PowerShell nyelvében kevés különbség van a Windows PowerShell és a PowerShell között. A legfontosabb különbségek a PowerShell-parancsmagok Rendelkezésre állása és viselkedése a Windows és a nem Windows platformok között, valamint a .NET-keretrendszer és a .NET Core közötti különbségekből eredő változások.

Ez a cikk a Windows PowerShell és a PowerShell jelenlegi verziója közötti jelentős különbségeket és kompatibilitástörő változásokat foglalja össze. Ez az összefoglalás nem tartalmaz új szolgáltatásokat vagy parancsmagokat, amelyeket hozzáadtak. Ez a cikk azt sem ismerteti, hogy mi változott a verziók között. A cikk célja, hogy bemutassuk a PowerShell jelenlegi állapotát, és azt, hogy miben különbözik a Windows PowerShelltől. A verziók közötti változások és az új funkciók hozzáadásának részletes ismertetéséhez tekintse meg az egyes verziók újdonságait ismertető cikkeket.

.NET-keretrendszer és .NET Core

A Linuxon és macOS-en futó PowerShell .NET core-t használ, amely a Microsoft Windows teljes .NET-keretrendszer részhalmaza. Ez azért jelentős, mert a PowerShell közvetlen hozzáférést biztosít az alapul szolgáló keretrendszertípusokhoz és metódusokhoz. Ennek eredményeképpen előfordulhat, hogy a Windowson futó szkriptek nem windowsos platformokon futnak a keretrendszerek közötti különbségek miatt. A .NET Core változásairól további információt a .NET-keretrendszer-ről a .NET Core-ra való migrálás kompatibilitástörő változásairól talál.

A PowerShell minden új kiadása a .NET újabb verziójára épül. A .NET-ben kompatibilitástörő változások lehetnek, amelyek hatással vannak a PowerShellre.

  • PowerShell 7.5 – A .NET 9.0-ra épül
  • PowerShell 7.4 – A .NET 8.0-ra épül
  • PowerShell 7.3 – A .NET 7.0-ra épül
  • PowerShell 7.2 (LTS-current) – .NET 6.0-ra (LTS-current) épül
  • PowerShell 7.1 – .NET 5.0-s verzióra épül
  • PowerShell 7.0 (LTS) – .NET Core 3.1 (LTS) alapú
  • PowerShell 6.2 – .NET Core 2.1-alapú
  • PowerShell 6.1 – .NET Core 2.1-alapú
  • PowerShell 6.0 – A .NET Core 2.0-ra épül

A .NET Standard 2.0 megjelenésével a PowerShell módosítás nélkül betölthet számos hagyományos Windows PowerShell-modult. Emellett a PowerShell 7 tartalmaz egy Windows PowerShell kompatibilitási funkciót is, amely lehetővé teszi a teljes keretrendszert igénylő Windows PowerShell-modulok használatát.

További információk:

Vegye figyelembe a .NET-metódus változásait

Bár a .NET-metódusok módosításai nem a PowerShellre vonatkoznak, hatással lehetnek a szkriptekre, különösen akkor, ha közvetlenül .NET-metódusokat hív meg. Emellett előfordulhat, hogy a konstruktorok túlterheltek. Ez hatással lehet arra, hogyan hozhat létre objektumokat a módszerrel New-Object vagy a [type]::new() módszerrel.

A .NET például túlterheléseket adott hozzá a [System.String]::Split() metódushoz, amelyek nem érhetők el a .NET-keretrendszer 4.5-ben. Az alábbi lista a Windows PowerShell 5.1-ben elérhető metódus túlterheléseit Split() mutatja be:

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)

Az alábbi lista a PowerShell 7-ben elérhető metódus túlterheléseit Split() mutatja be:

"".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)

A Windows PowerShell 5.1-ben egy karaktertömböt (char[]) adhat át a Split() metódusnak string. A metódus felosztja a célsztringet a tömb egyik karakterének előfordulásakor. A következő parancs felosztja a célsztringet a Windows PowerShell 5.1-ben, a PowerShell 7-ben azonban nem:

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

A megfelelő túlterheléshez való kötéshez a sztringet karaktertömbbe kell beírnia:

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

A PowerShell-lel már nem szállított modulok

Különböző kompatibilitási okokból a következő modulok már nem szerepelnek a PowerShellben.

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

PowerShell-munkafolyamat

A PowerShell-munkafolyamat a Windows PowerShell egyik funkciója, amely a Windows Workflow Foundation (WF) rendszerre épül, amely lehetővé teszi robusztus runbookok létrehozását a hosszú ideig futó vagy párhuzamos feladatokhoz.

A .NET Core-ban a Windows Workflow Foundation támogatásának hiánya miatt eltávolítottuk a PowerShell-munkafolyamatot a PowerShellből.

A jövőben szeretnénk engedélyezni a natív párhuzamosságot/egyidejűséget a PowerShell-nyelven anélkül, hogy PowerShell-munkafolyamatra lenne szükség.

Ha az operációs rendszer újraindítása után ellenőrzőpontokat kell használni a szkriptek folytatásához, javasoljuk, hogy a Feladatütemezővel futtasson egy szkriptet az operációs rendszer indításakor, de a szkriptnek meg kell őriznie a saját állapotát (például egy fájlban kell megőriznie).

A PowerShellből eltávolított parancsmagok

A PowerShellben található modulok esetében a következő parancsmagok különböző kompatibilitási okokból vagy nem támogatott API-k használata miatt lettek eltávolítva a PowerShellből.

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-parancsmagok

A következő WMI v1-parancsmagok el lettek távolítva a PowerShellből:

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

A CimCmdlets modul (más néven WMI v2) parancsmagok ugyanazt a függvényt hajtják végre, és új funkciókat és újratervezett szintaxist biztosítanak.

New-WebServiceProxy a parancsmag el lett távolítva

A .NET Core nem támogatja a Windows kommunikációs keretrendszert, amely szolgáltatásokat nyújt a SOAP protokoll használatához. Ez a parancsmag el lett távolítva, mert SOAP-t igényel.

*-Transaction eltávolított parancsmagok

Ezek a parancsmagok nagyon korlátozottan voltak használatban. Döntés született a támogatás megszüntetéséről.

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

*-EventLog Parancsmagok

A nem támogatott API-k használata miatt a parancsmagok el lettek távolítva a *-EventLog PowerShellből. Get-WinEvent és New-WinEvent elérhetők események lekéréséhez és létrehozásához Windows rendszeren.

A Windows-bemutató keretrendszert (WPF) használó parancsmagok

A .NET Core 3.1 támogatja a WPF-et, ezért a PowerShell 7.0 kiadása a következő Windows-specifikus funkciókat állította vissza:

  • A Show-Command parancsmag
  • A Out-GridView parancsmag
  • A ShowWindow paraméter Get-Help

A PowerShell kívánt állapotkonfigurációjának (DSC) változásai

Invoke-DscResource a PowerShell 7.0 kísérleti funkciójaként lett visszaállítva.

A PowerShell 7.2-től kezdve a PSDesiredStateConfiguration modul el lett távolítva a PowerShellből, és közzé lett téve a PowerShell-galéria. További információkért tekintse meg a PowerShell-csapat blogjában található közleményt .

Végrehajtható PowerShell-módosítások

A powershell.exe átnevezve: pwsh.exe

A PowerShell bináris neve a következőre módosult powershell(.exe)pwsh(.exe): . Ez a módosítás determinisztikus módot biztosít a felhasználók számára a PowerShell gépeken való futtatására, valamint a Windows PowerShell és a PowerShell egymás melletti telepítéseinek támogatására.

További módosítások a pwsh(.exe) következőtől powershell.exe:

  • Az első pozícióparamétert a következőre -Command-Filemódosította: . Ez a módosítás kijavítja a (más néven shebangként) használt PowerShell-szkriptek használatát #! , amelyeket nem PowerShell-rendszerhéjakból hajtanak végre nem Windows-platformokon. Azt is jelenti, hogy parancsokat futtathat, például pwsh foo.ps1 vagy pwsh fooScript anélkül -File. Ehhez a módosításhoz azonban explicit módon kell megadnia -c a parancsokat, vagy -Command olyan parancsokat kell futtatnia, mint a pwsh.exe -Command Get-Command.
  • pwsh-i a (vagy -Interactive) kapcsolót fogadja el egy interaktív rendszerhéj jelzésére. Ez lehetővé teszi, hogy a PowerShell alapértelmezett rendszerhéjként legyen használva a Unix-platformokon.
  • Eltávolított paraméterek -ImportSystemModules és -PSConsoleFile a pwsh.exe.
  • pwsh -version Módosított és beépített súgó más natív eszközökhöz való igazításhozpwsh.exe.
  • Érvénytelen argumentumhiba a Unix-szabványokkal konzisztens kódokhoz -File és -Command kilépési kódokhoz
  • Paraméter hozzáadva -WindowStyle a Windowshoz. Hasonlóképpen, a nem Windows-platformok csomagalapú telepítéseinek frissítései helyben frissülnek.

A rövidített név összhangban van a nem Windows-platformokon futó rendszerhéjak elnevezésével is.

PowerShell-szkript futtatásának támogatása bool paraméterrel

pwsh.exe Korábban egy PowerShell-szkript -File futtatásával, a megadott módon nem adhat át $true/$false paraméterértékeket. $true/$false A paraméterelemzett értékek támogatása hozzáadva. A kapcsolóértékek is támogatottak.

Továbbfejlesztett visszamenőleges kompatibilitás a Windows PowerShell-lel

Windows esetén a rendszer hozzáad egy új kapcsolóparamétert a UseWindowsPowerShellhezImport-Module. Ez a kapcsoló létrehoz egy proxymodult a PowerShell 7-ben, amely egy helyi Windows PowerShell-folyamatot használ a modulban található parancsmagok implicit futtatásához. További információ: Import-Module.

A Microsoft-modulok PowerShell 7.0-val való működéséről további információt a Modulkompatibilitási táblázat tartalmaz.

A Windows Microsoft Update támogatása

A PowerShell 7.2 támogatja a Microsoft Update-et. Ha engedélyezi ezt a funkciót, a hagyományos Windows Update (WU) felügyeleti folyamat legújabb PowerShell 7-frissítéseit fogja megkapni, legyen szó a Windows Update vállalati verzióról, a WSUS-ról, az SCCM-ről vagy a Gépház interaktív WU-párbeszédpaneljéről.

A PowerShell 7.2 MSI-csomag a következő parancssori beállításokat tartalmazza:

  • USE_MU - Ez a tulajdonság két lehetséges értékkel rendelkezik:
    • 1 (alapértelmezett) – A Microsoft Update vagy a WSUS frissítését választja
    • 0 – Ne válasszon a Microsoft Update vagy a WSUS segítségével történő frissítés mellett
  • ENABLE_MU
    • 1(alapértelmezett) – A Microsoft Update automatikus Frissítések vagy Windows Update használatát választja
    • 0– Ne használja a Microsoft Update automatikus Frissítések vagy Windows Update használatát

Motorváltozások

A PowerShell támogatása alapértelmezett Unix-rendszerhéjként

A Unix esetében a rendszerhéjakra vonatkozó konvenció, hogy egy interaktív rendszerhéjat fogadjanak el -i , és számos eszköz elvárja ezt a viselkedést (script például amikor a PowerShellt állítja be alapértelmezett rendszerhéjként), és meghívja a rendszerhéjat a -i kapcsolóval. Ez a változás azért törik meg , mert -i korábban rövid kézként -inputformatis használható volt , ami most már szükséges .-in

Egyéni beépülő modulok

A PowerShell beépülő modulok olyan PowerShell-modulok elődjei, amelyek nem rendelkeznek széles körű bevezetéssel a PowerShell-közösségben.

A beépülő modulok támogatásának összetettsége és a közösségen belüli használat hiánya miatt a Továbbiakban nem támogatjuk az egyéni beépülő modulokat a PowerShellben.

Kísérleti funkciójelzők

A PowerShell 6.2 támogatja a kísérleti funkciókat. Ez lehetővé teszi, hogy a PowerShell-fejlesztők új funkciókat nyújtsanak, és visszajelzést kérjenek a tervezés befejezése előtt. Így elkerüljük a kompatibilitástörő változtatásokat a kialakítás fejlődésével.

Az elérhető kísérleti funkciók listájának lekérésére használható Get-ExperimentalFeature . Ezeket a funkciókat engedélyezheti vagy letilthatja a következővel Enable-ExperimentalFeature : és Disable-ExperimentalFeature.

Szerelvény betöltése a modul alapútvonaláról, mielőtt megpróbálna betöltődni a GAC-ból

Korábban, amikor egy bináris modul rendelkezik a modul szerelvényével a GAC-ban, betöltöttük a szerelvényt a GAC-ból, mielőtt megpróbálnánk betölteni a modul alapútvonaláról.

Érték típusú elemtípusú gyűjtemények nullelemes ellenőrzésének kihagyása

A paraméter és ValidateNotNullValidateNotNullOrEmpty az Mandatory attribútumok esetében hagyja ki a null elem ellenőrzését, hogy a gyűjtemény elemtípusa értéktípus-e.

ParenExpression, SubExpression és ArrayExpression megőrzése $?

Ez a lekéréses kérelem megváltoztatja az alhálózatok (...), alkifejezések $(...) és tömbkifejezések @() fordításának módját, hogy $? az ne legyen automatikusan igaz. Ehelyett a $? folyamat vagy a végrehajtott utasítások eredményétől függ.

Javítás $? , hogy ne legyen, $false amikor a natív parancs ide ír stderr

$? nincs beállítva, amikor a $false natív parancs a következőre stderrír: . Gyakori, hogy stderr a natív parancsok nem kívánják jelezni a hibát. $? csak akkor van beállítva, $false ha a natív parancs nem nulla kilépési kóddal rendelkezik.

Ne $ErrorActionPreference befolyásolja stderr a natív parancsok kimenetét

Gyakori, hogy stderr a natív parancsok nem kívánják jelezni a hibát. Ezzel a módosítással stderr a kimenet továbbra is rögzítve lesz Az ErrorRecord objektumokban, de a futtatókörnyezet már nem érvényes$ErrorActionPreference, ha az ErrorRecord natív parancsból származik.

Váltás $OutputEncoding kódolásra UTF-8 NoBOM az ASCII helyett

Az előző kódolás, az ASCII (7 bites) bizonyos esetekben helytelenül változtatná meg a kimenetet. Az alapértelmezett beállítás UTF-8 NoBOM megőrzi a Unicode-kimenetet a legtöbb eszköz és operációs rendszer által támogatott kódolással.

A parancsmagok egyesítése a típusnak megfelelő paraméterrel -EncodingSystem.Text.Encoding

Az -Encoding érték Byte el lett távolítva a fájlrendszer-szolgáltató parancsmagjaiból. A rendszer most egy új paramétert használ annak megadására, -AsByteStreamhogy a bájtfolyam bemenetként szükséges-e, vagy hogy a kimenet bájtok adatfolyama.

UTF8NoBOM Kódolás módosítása New-ModuleManifest nem Windows-platformokra

New-ModuleManifest Korábban jegyzékfájlokat hozott létre psd1 az UTF-16-ban a BOM használatával, ami problémát okoz a Linux-eszközökhöz. Ez a kompatibilitástörő változás megváltoztatja az UTF (nincs BOM) kódolását New-ModuleManifest a nem Windows-platformokon.

Eltávolítás AllScope a legtöbb alapértelmezett aliasból

A hatókör létrehozásának AllScope felgyorsításához a legtöbb alapértelmezett alias el lett távolítva. AllScope néhány gyakran használt aliasra maradt, ahol a keresés gyorsabb volt.

-Verbose és -Debug többé nem bírálja felül a $ErrorActionPreference

Korábban, ha -Verbose meg lett adva vagy -Debug meg lett adva, felülírja a viselkedését $ErrorActionPreference. Ezzel a módosítással, -Verbose és -Debug a továbbiakban nem befolyásolja a viselkedését $ErrorActionPreference.

Emellett a paraméter az Inquire helyett a Continue (Folytatás) értékre van adva $DebugPreference.-Debug

Konzisztens $PSCulture tükrözés a munkamenet-kultúra változásaival

A Windows PowerShellben a rendszer gyorsítótárazza az aktuális kulturális értéket, amely lehetővé teszi, hogy az érték a munkamenet indítása után megváltozzon a kultúrával való szinkronizálásból. Ez a gyorsítótárazási viselkedés a PowerShell-magban van javítva.

A explicit módon megadott elnevezett paraméter felülírja ugyanazt a kivonatoló splatting paramétert

Ezzel a módosítással a rendszer áthelyezi a névvel ellátott paramétereket a splattingból a paraméterlista végére, hogy az összes explicit módon megadott elnevezett paraméter kötött legyen. Az egyszerű függvények paraméterkötése nem ad hibát, ha egy megadott elnevezett paraméter nem található. Az ismeretlen elnevezett paraméterek az $args egyszerű függvény paraméteréhez vannak kötve. Az argumentumlista végére való áthelyezés megváltoztatja a paraméterek megjelenési sorrendjét $args.

Példa:

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

Az előző viselkedésben a MyPath nem kötelező-Path, mert ez a harmadik argumentum az argumentumlistában. ## Így végül a "$args" és a Blah = "World"

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

Ezzel a módosítással az argumentumok @hash az argumentumlista végére kerülnek. A MyPath lesz az első argumentum a listában, ezért a következőhöz -Pathvan kötve: .

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

Nyelvi változások

Null-szénerősítési operátor ??

A null-szenesítő operátor ?? a bal oldali operandus értékét adja vissza, ha nem null. Ellenkező esetben kiértékeli a jobb oldali operandust, és visszaadja annak eredményét. Az ?? operátor nem értékeli ki a jobb oldali operandusát, ha a bal oldali operandus értéke nem null.

$x = $null
$x ?? 100
100

Az alábbi példában a jobb oldali operandus nem lesz kiértékelve.

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

Null-szenesítési hozzárendelés operátora ??=

A null-szenesítés-hozzárendelési operátor ??= csak akkor rendeli hozzá a jobb oldali operandus értékét a bal oldali operandushoz, ha a bal oldali operandus null értékű. Az ??= operátor nem értékeli ki a jobb oldali operandusát, ha a bal oldali operandus értéke nem null.

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

Az alábbi példában a jobb oldali operandus nem lesz kiértékelve.

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

Null feltételes operátorok

Feljegyzés

Ezt a funkciót a PowerShell 7.1-ben a kísérleti verzióról a mainstreamre helyezték át.

A null feltételes operátor csak akkor alkalmaz taghozzáférést vagy ?.elemhozzáférést az operandusra, ?[]ha az operandus nem null értékű; ellenkező esetben null értéket ad vissza.

Mivel a PowerShell lehetővé teszi ? , hogy a változónév része legyen, a változó nevének formális specifikációja szükséges az operátorok használatához. Ezért a változónevek körül kell használni {} , például ${a} vagy amikor ? a változónév ${a?}része.

Az alábbi példában a PropName értéke lesz visszaadva.

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

Az alábbi példa null értéket ad vissza, anélkül, hogy megpróbálná elérni a PropName tagnevet.

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

Hasonlóképpen az elem értékét is visszaadja a rendszer.

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

Ha az operandus null értékű, az elem nem érhető el, és a null értéket adja vissza.

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

Feljegyzés

A változónév szintaxisa ${<name>} nem tévesztendő össze az $() alexpressziós operátorral. További információt a about_Variables Változónév szakaszában talál.

Operátor hozzáadva & a feladatvezérléshez

A folyamat végére helyezéssel & a folyamat PowerShell-feladatként fut. Ha egy folyamat háttérrendszerrel rendelkezik, egy feladatobjektum lesz visszaadva. Miután a folyamat feladatként fut, az összes szabványos *-Job parancsmag használható a feladat kezelésére. A folyamat során használt változók (a folyamatspecifikus változók figyelmen kívül hagyása) automatikusan át lesznek másolva a feladatba, így Copy-Item $foo $bar & egyszerűen működik. A feladat a felhasználó kezdőkönyvtára helyett az aktuális könyvtárban is fut.

Új metódusok/tulajdonságok bekapcsolva PSCustomObject

Új metódusokat és tulajdonságokat adtunk hozzá.PSCustomObject PSCustomObject Mostantól a többi objektumhoz hasonló tulajdonságot is tartalmaz Count/Length .

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

$PSCustomObject.Length
1
$PSCustomObject.Count
1

Ez a munka olyan módszereket is tartalmaz ForEach , Where amelyek lehetővé teszik az elemek üzemeltetését és szűrését PSCustomObject :

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

Konvertálás PSMethodról meghatalmazottra

Delegálttá alakíthat egy PSMethod meghatalmazottat. Ez lehetővé teszi például, hogy delegált PSMethod[M]::DoubleStrLen értékként adja át a [M]::AggregateStringkövetkezőt:

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)

A sztringek összehasonlítási viselkedése megváltozott a PowerShell 7.1-ben

A PowerShell 7.1 a .NET 5.0-ra épül, amely a következő kompatibilitástörő változást vezette be:

A .NET 5.0-s verziójában a kulturális invariáns sztring-összehasonlítások figyelmen kívül hagyják a nem nyomtatható vezérlőkarakterek karaktereit.

A következő két sztring például azonosnak tekinthető:

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

Új parancsmagok

Új Get-Uptime parancsmag

A Get-Uptime parancsmag az operációs rendszer utolsó indítása óta eltelt időt adja vissza. A parancsmag a PowerShell 6.0-ban lett bevezetve.

Új Remove-Alias parancsmag

Az Alias eltávolítása parancsmag eltávolít egy aliast az aktuális PowerShell-munkamenetből. A parancsmag a PowerShell 6.0-ban lett bevezetve.

Új parancsmag – Szolgáltatás eltávolítása

A Remove-Service parancsmag eltávolít egy Windows-szolgáltatást a beállításjegyzékben és a szolgáltatásadatbázisban. A Remove-Service parancsmag a PowerShell 6.0-ban lett bevezetve.

Új Markdown-parancsmagok

A Markdown a HTML-ben megjeleníthető egyszerű szöveges dokumentumok egyszerű formázással történő létrehozására szolgáló szabvány.

A Következő parancsmagok lettek hozzáadva a PowerShell 6.1-ben:

  • ConvertFrom-Markdown – Sztring vagy fájl tartalmának átalakítása MarkdownInfo-objektummá.
  • Get-MarkdownOption – A Markdown-tartalom konzolon való megjelenítéséhez használt aktuális színeket és stílusokat adja vissza.
  • Set-MarkdownOption – Beállítja a Markdown-tartalom konzolon való megjelenítéséhez használt színeket és stílusokat.
  • Show-Markdown – Markdown-tartalom megjelenítése a konzolon vagy HTML formátumban

Új Test-Json-parancsmag

A Test-Json parancsmag ellenőrzi, hogy egy sztring érvényes JavaScript Object Notation -dokumentum-e, és opcionálisan ellenőrizheti, hogy a JSON-dokumentum egy megadott sémán van-e.

Ez a parancsmag a PowerShell 6.1-ben lett bevezetve

Új parancsmagok a kísérleti funkciók támogatásához

A PowerShell 6.2-ben a következő parancsmagok lettek hozzáadva a kísérleti funkciók támogatásához.

Új illesztősztring-parancsmag

A Join-String parancsmag egyetlen sztringbe egyesíti a folyamat objektumait. Ez a parancsmag a PowerShell 6.2-ben lett hozzáadva.

Új nézet ConciseView és parancsmag get-error

A PowerShell 7.0 új alapértelmezett nézetével, a ConciseView-val javítja a hibaüzenetek megjelenítését az interaktív és szkripthibák olvashatóságának javítása érdekében. A nézetek a beállításváltozón $ErrorViewkeresztül választhatók ki.

A ConciseView esetén, ha egy hiba nem szkriptből vagy elemzési hibából származik, akkor ez egy egysoros hibaüzenet:

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

Ha a hiba a szkript végrehajtása során vagy elemzési hiba, a PowerShell egy többsoros hibaüzenetet ad vissza, amely tartalmazza a hibát, egy mutatót és egy hibaüzenetet, amely azt jelzi, hogy hol található a hiba az adott sorban. Ha a terminál nem támogatja az ANSI színkioldó sorozatokat (VT100), akkor a színek nem jelennek meg.

A PowerShell 7 alapértelmezett nézete a ConciseView. Az előző alapértelmezett nézet a NormalView volt, és ezt a beállítási változó $ErrorViewbeállításával választhatja ki.

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

Feljegyzés

Az ErrorAccentColor új tulajdonságot ad hozzá a hibaüzenet jelölőszínének módosításához$Host.PrivateData.

Az új Get-Errorparancsmag részletes áttekintést nyújt a teljes hibaről, ha szükséges. Alapértelmezés szerint a parancsmag megjeleníti az utolsó hiba teljes részleteit, beleértve a belső kivételeket is.

A Get-Error parancsmag támogatja a folyamat bemenetét a beépített változó $Errorhasználatával. Get-Error megjeleníti az összes csőhibát.

$Error | Get-Error

A Get-Error parancsmag támogatja a Legújabb paramétert, így megadhatja, hogy hány hiba jelenjen meg az aktuális munkamenetből.

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

További információ: Get-Error.

A parancsmag módosításai

Párhuzamos végrehajtás hozzáadva a ForEach-Objecthoz

A PowerShell 7.0-tól kezdve a ForEach-Object gyűjtemény elemeit iteráló parancsmag beépített párhuzamossággal rendelkezik az új Párhuzamos paraméterrel.

A párhuzamos szkriptblokkok alapértelmezés szerint a párhuzamos feladatokat kezdeményező hívó aktuális munkakönyvtárát használják.

Ez a példa 50 000 naplóbejegyzést kér le 5 rendszernaplóból egy helyi Windows-gépen:

$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

A Párhuzamos paraméter az egyes bemeneti naplónevekhez párhuzamosan futó szkriptblokkot adja meg.

Az új ThrottleLimit paraméter korlátozza az egy adott időpontban párhuzamosan futó szkriptblokkok számát. Az alapértelmezett érték 5.

A változóval $_ a szkriptblokk aktuális bemeneti objektumát jelölheti. $using: A hatókör használatával változóhivatkozásokat adhat át a futó szkriptblokknak.

További információ: ForEach-Object.

Kompatibilis beépített modulok keresése system32 Windows rendszeren

A Windows 10 1809 frissítésében és a Windows Server 2019-ben számos beépített PowerShell-modult frissítettünk, hogy kompatibilisek legyenek a PowerShell-lel.

A PowerShell indításakor automatikusan bele fog tartozni $windir\System32 a PSModulePath környezeti változóba. Azonban csak akkor teszi elérhetővé a Get-ModuleImport-Module modulokat, ha azok CompatiblePSEdition kompatibilisként vannak megjelölve.Core

Ezt a viselkedést felülbírálhatja, hogy az összes modul megjelenjen a -SkipEditionCheck kapcsolóparaméter használatával. Egy tulajdonságot is hozzáadtunk PSEdition a tábla kimenetéhez.

-lp alias az összes -LiteralPath paraméterhez

Létrehoztunk egy szabványos paraméter aliast -lp az összes beépített PowerShell-parancsmaghoz, amely rendelkezik paraméterrel -LiteralPath .

Javítás Get-Item -LiteralPath a*b , ha a*b valójában nem létezik a visszatérési hiba

Korábban a -LiteralPath helyettesítő karakterek ugyanúgy kezelik, mint -Path a helyettesítő karaktert, és ha a helyettesítő karakter nem talál fájlokat, akkor csendben kilépne. A helyes viselkedésnek konstansnak kell lennie, -LiteralPath ezért ha a fájl nem létezik, hiba kell, hogy legyen. A módosítás a konstansként használt -Literal helyettesítő karaktereket kezeli.

A munkakönyvtár beállítása az aktuális könyvtárra a következő helyen: Start-Job

A Start-Job parancsmag most az aktuális könyvtárat használja az új feladat munkakönyvtáraként.

*-Computer Eltávolítás -Protocol parancsmagokból

A CoreFX-ben (különösen a nem Windows-platformokon) végzett RPC-újraformálással és a PowerShell konzisztens újraformálási élményének biztosításával kapcsolatos problémák miatt a -Protocol paraméter el lett távolítva a \*-Computer parancsmagokból. A DCOM már nem támogatott az újraküldéshez. A következő parancsmagok csak a WSMAN-újraküldést támogatják:

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

*-Service Eltávolítás -ComputerName parancsmagokból

A PSRP konzisztens használatának ösztönzése érdekében a paraméter el lett távolítva *-Service a -ComputerName parancsmagokból.

Javítás Get-Content -Delimiter , hogy ne tartalmazza a határolót a visszaadott sorokban

Korábban a használat Get-Content -Delimiter közbeni kimenet inkonzisztens és kényelmetlen volt, mivel az adatok további feldolgozására volt szükség a határoló eltávolításához. Ez a módosítás eltávolítja a visszaküldött sorok elválasztójelét.

Változások a Format-Hex

A -Raw paraméter most egy "no-op" (abban, hogy nem csinál semmit). Az összes kimenet előrehaladtával a számok valódi ábrázolása jelenik meg, amely a típushoz tartozó összes bájtot tartalmazza. Ezt tette a -Raw paraméter a módosítás előtt.

Elírás javítása a Get-ComputerInfo tulajdonságnévben

BiosSerialNumber hibásan lett elírva BiosSeralNumber , és a megfelelő helyesírásra lett módosítva.

Parancsmagok hozzáadása Get-StringHash és Get-FileHash parancsmagok

Ez a változás azt jelzi, hogy egyes kivonatoló algoritmusokat a CoreFX nem támogat, ezért ezek már nem érhetők el:

  • MACTripleDES
  • RIPEMD160

Érvényesítés Get-* hozzáadása olyan parancsmagokhoz, ahol a továbbítási $null hiba helyett az összes objektumot visszaadja

Az alábbiak bármelyikének való $null átadáskor hiba jelenik meg:

  • 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

A W3C kiterjesztett naplófájlformátum támogatása a következőben: Import-Csv

Korábban a Import-Csv parancsmag nem használható a naplófájlok W3C kiterjesztett naplófájlformátumban való közvetlen importálására, és további műveletre lenne szükség. Ezzel a módosítással a W3C kiterjesztett naplóformátuma támogatott.

Import-Csv az importáláskor alkalmazandó PSTypeNames , ha a CSV-ben típusinformációk találhatók

Korábban az importált objektumokkal TypeInformationConvertFrom-Csv exportált Export-CSV objektumok nem őrizték meg a típusadatokat. Ez a módosítás hozzáadja a típusadatokat a taghoz PSTypeNames , ha elérhetők a CSV-fájlból.

-NoTypeInformation az alapértelmezett beállítás: Export-Csv

Korábban a Export-CSV parancsmag egy megjegyzést adott ki az objektum típusnevét tartalmazó első sorként. A módosítás alapértelmezés szerint kizárja a típusadatokat, mert a legtöbb CSV-eszköz nem érti. Ez a módosítás az ügyfelek visszajelzésének kezelése érdekében történt.

Az előző viselkedés megőrzésére használható -IncludeTypeInformation .

A beállításjegyzék elérési útjának engedélyezése * a következőhöz: Remove-Item

Korábban a -LiteralPath helyettesítő karakterek ugyanúgy kezelik, mint -Path a helyettesítő karaktert, és ha a helyettesítő karakter nem talál fájlokat, akkor csendben kilépne. A helyes viselkedésnek konstansnak kell lennie, -LiteralPath ezért ha a fájl nem létezik, hiba kell, hogy legyen. A módosítás a konstansként használt -Literal helyettesítő karaktereket kezeli.

A Group-Object mostantól rendezi a csoportokat

A teljesítményjavítás Group-Object részeként most a csoportok rendezett listáját adja vissza. Bár nem szabad a sorrendre támaszkodnia, az első csoport használata esetén ez a változás megtörheti. Úgy döntöttünk, hogy ez a teljesítménybeli javulás megéri a változást, mivel a korábbi viselkedéstől való függés hatása alacsony.

Szórás a következőben: Measure-Object

A kimenet mostantól Measure-Object tartalmaz egy tulajdonságot StandardDeviation .

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 most már rendelkezik a Password paraméterrel, amely egy SecureString. Ez lehetővé teszi, hogy nem interaktív módon használja:

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

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

A more függvény eltávolítása

Korábban a PowerShell egy olyan függvényt szállított a Windowsba, amelyet burkoltnak neveztek moremore.com. Ezt a függvényt eltávolítottuk.

Emellett a help függvény windowsosra more.com változott, vagy a rendszer nem Windows-platformokon megadott $env:PAGER alapértelmezett lapozójára.

cd DriveName: most visszaadja a felhasználókat a meghajtó aktuális munkakönyvtárába

Korábban a PSDrive használatával Set-Location vagy cd visszatérésével a felhasználók az adott meghajtó alapértelmezett helyére küldték a felhasználókat. A rendszer a felhasználókat a munkamenet utolsó ismert aktuális munkakönyvtárába küldi.

cd - visszakerül az előző könyvtárba

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

Vagy Linuxon:

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

Is, cd és cd -- váltson a $HOME.

Update-Help nem rendszergazdaként

A népszerű igények szerint Update-Help már nem kell rendszergazdaként futtatni. Update-Help mostantól alapértelmezés szerint egy felhasználó által hatókörrel rendelkező mappába menti a súgót.

Where-Object -Not

Ha paramétert -Not ad Where-Objecthozzá, szűrheti a folyamat objektumait egy tulajdonság nemlétezésére, vagy null/üres tulajdonságértékre.

Ez a parancs például az összes olyan szolgáltatást visszaadja, amely nem rendelkezik függő szolgáltatásokkal:

Get-Service | Where-Object -Not DependentServices

Webes parancsmagok módosítása

A webes parancsmagok mögöttes .NET API-ja a következőre System.Net.Http.HttpClientmódosult: . Ez a módosítás számos előnnyel jár. Ez a változás azonban az Internet Explorerrel való együttműködés hiányával együtt számos kompatibilitástörő változást Invoke-WebRequestInvoke-RestMethoderedményezett.

  • Invoke-WebRequest Mostantól csak az egyszerű HTML-elemzéseket támogatja. Invoke-WebRequest mindig visszaad egy objektumot BasicHtmlWebResponseObject . A ParsedHtml rendszer eltávolította a tulajdonságokat és Forms a tulajdonságokat.
  • BasicHtmlWebResponseObject.Headers az értékek most már String[] nem String.
  • BasicHtmlWebResponseObject.BaseResponsemostantól objektum.System.Net.Http.HttpResponseMessage
  • A Response webes parancsmag kivételeinek tulajdonsága mostantól System.Net.Http.HttpResponseMessage objektum.
  • A szigorú RFC-fejléc elemzése mostantól alapértelmezett a és -UserAgent a -Headers paraméter esetében. Ez megkerülhető a -SkipHeaderValidation.
  • file:// és ftp:// az URI-sémák már nem támogatottak.
  • System.Net.ServicePointManager beállítások már nem teljesülnek.
  • Jelenleg nincs elérhető tanúsítványalapú hitelesítés a macOS rendszeren.
  • -Credential Ha egy URI-t használhttp://, az hibát fog eredményezni. Használjon URI-t https:// , vagy adja meg a -AllowUnencryptedAuthentication paramétert a hiba letiltásához.
  • -MaximumRedirection Most megszűnő hibát okoz, ha az átirányítási kísérletek túllépik a megadott korlátot ahelyett, hogy az utolsó átirányítás eredményeit adják vissza.
  • A PowerShell 6.2-ben a JSON-válaszok alapértelmezett UTF-8 kódolási beállítása módosult. Ha egy JSON-válaszhoz nem ad meg karakterkészletet, az alapértelmezett kódolásnak UTF-8/RFC 8259-nek kell lennie.
  • A válaszok alapértelmezett kódolása UTF-8 értékre application-json van állítva
  • Paraméter hozzáadva -SkipHeaderValidation a szabványoknak nem megfelelő fejlécek engedélyezéséhez Content-Type
  • Paraméter hozzáadva -Form az egyszerűsített multipart/form-data támogatás támogatásához
  • A relációs kulcsok megfelelő, kis- és nagybetűkkel nem érzéketlen kezelése
  • Hozzáadott -Resume paraméter webes parancsmagokhoz

Az Invoke-RestMethod hasznos adatokat ad vissza, ha nem ad vissza adatokat

Amikor egy API csak nulla sztringet adja vissza, Invoke-RestMethod sztringként "null" szerializálta $null. Ez a módosítás kijavítja a logikátInvoke-RestMethod, hogy megfelelően szerializáljon egy érvényes JSON-literálértéketnull.$null

A webes parancsmagok figyelmeztetnek, ha -Credential a rendszer titkosítatlan kapcsolatokon keresztül küldi őket

HTTP használata esetén a rendszer a jelszavakat is tartalmazó tartalmat világos szövegként küldi el. Ez a módosítás alapértelmezés szerint nem engedélyezi ezt, és hibaüzenetet ad vissza, ha a hitelesítő adatok nem biztonságosan vannak átadva. A felhasználók ezt a kapcsolóval -AllowUnencryptedAuthentication megkerülhetik.

A -OutFile webes parancsmagok paraméterének használata -LiteralPath

A PowerShell 7.1-től kezdődően a webes parancsmagok OutFile paramétere a LiteralPathhoz hasonlóan működik, és nem dolgoz fel helyettesítő karaktereket.

API-változások

Osztály eltávolítása AddTypeCommandBase

A AddTypeCommandBase rendszer eltávolította az osztályt Add-Type a teljesítmény javítása érdekében. Ezt az osztályt csak a Add-Type parancsmag használja, és nem befolyásolhatja a felhasználókat.

Támogatott nyelvként eltávolítva VisualBasic a bővítménytípusban

Korábban a parancsmaggal lefordíthatta a Add-Type Visual Basic-kódot. A Visual Basicet ritkán használták a Add-Type. Ezt a funkciót eltávolítottuk a PowerShell méretének csökkentése érdekében.

El lett távolítva RunspaceConfiguration a támogatás

Korábban, amikor egy PowerShell-futtatóteret programozott módon hoz létre az API használatával, használhatja az örökölt RunspaceConfiguration vagy az újabb InitialSessionState osztályokat. Ez a módosítás eltávolította a támogatást, RunspaceConfiguration és csak a támogatást támogatja InitialSessionState.

CommandInvocationIntrinsics.InvokeScriptargumentumok kötése ahelyett, hogy $input$args

Egy paraméter helytelen pozíciója miatt az args bemenetként lett átadva args helyett.

Eltávolítás ClrVersion és BuildVersion tulajdonságok innen: $PSVersionTable

A ClrVersion tulajdonság nem $PSVersionTable hasznos a CoreCLR-ben. A végfelhasználók nem használhatják ezt az értéket a kompatibilitás meghatározásához.

A BuildVersion tulajdonság a Windows buildverzióhoz volt kötve, amely nem Windows-platformokon érhető el. GitCommitId A tulajdonság használatával lekérheti a PowerShell pontos buildverzióját.

Unicode-feloldó elemzés implementálása

`u#### vagy `u{####} átalakítja a megfelelő Unicode-karakterre. A konstans `ukimenetéhez lépjen ki a háttérből: ``u.

Paraméterkötési probléma a PS-függvényekben ValueFromRemainingArguments

ValueFromRemainingArguments Most az értékeket tömbként adja vissza egyetlen érték helyett, amely maga is tömb.

CommandTypes.Workflow AWorkflowInfoCleaned

A System.Management.Automation használatával CommandTypes.Workflow és WorkflowInfohasználatával kapcsolatos kód törlése.

Ezek a kisebb kompatibilitástörő változások elsősorban a súgószolgáltató kódját érintik.

  • Módosítsa a nyilvános konstruktorokat WorkflowInfo belsőre. Már nem támogatjuk a munkafolyamatot, ezért érdemes nem engedélyezni a felhasználók számára a példányok létrehozását Workflow .
  • Távolítsa el a System.Management.Automation.DebugSource típust, mivel csak munkafolyamat-hibakereséshez használják.
  • Távolítsa el a csak munkafolyamat-hibakereséshez használt absztrakt osztály hibakeresőjének SetParent túlterhelését.
  • Távolítsa el a RemotingJobDebugger származtatott osztály túlterhelésétSetParent.

Nem tördelt eredmény PSObject a delegáltvá alakításkor ScriptBlock

Ha c ScriptBlock # környezetben használandó delegált típussá alakul át, az eredmény PSObject körbefuttatása szükségtelen problémákat okoz:

  • Amikor az értéket delegált visszatérési típussá konvertálja, a PSObject rendszer lényegében le lesz bontva. Tehát a PSObject felesleges.
  • Ha a delegált visszatérési típusa az object, akkor a program egy C#-kódban PSObject nehezen használható szövegbe burkolva lesz.

A módosítás után a visszaadott objektum az alapul szolgáló objektum.

Támogatás újraküldése

A WinRM-et Unix-platformokon használó PowerShell-remoting (PSRP) használatához NTLM/Egyeztetés vagy Alapszintű hitelesítés szükséges HTTPS-en keresztül. A psRP macOS rendszeren csak az alapszintű hitelesítést támogatja HTTPS-en keresztül. A Kerberos-alapú hitelesítés nem támogatott a windowsos platformokon.

A PowerShell emellett támogatja a PowerShell-remoting (PSRP) használatát SSH-n keresztül minden platformon (Windows, macOS és Linux). További információ: SSH-újraegyezés a PowerShellben.

A PowerShell Direct for Containers először megpróbálja használni pwsh

A PowerShell Direct a PowerShell és a Hyper-V egyik funkciója, amely lehetővé teszi, hogy hálózati kapcsolat vagy más távfelügyeleti szolgáltatás nélkül csatlakozzon Egy Hyper-V virtuális géphez vagy tárolóhoz.

Korábban a PowerShell Direct a tároló beépített Windows PowerShell-példányával csatlakozott. Most a PowerShell Direct először megpróbál csatlakozni a PATH környezeti változón elérhető bármely lehetőség pwsh.exe használatával. Ha pwsh.exe nem érhető el, a PowerShell Direct vissza fog állni a használatba powershell.exe.

Enable-PSRemoting mostantól külön újraegyesítési végpontokat hoz létre az előzetes verziókhoz

Enable-PSRemoting Most két újraegyesítő munkamenet-konfigurációt hoz létre:

  • A PowerShell főverziója. Például: PowerShell.6. Ez a végpont, amely az alverzió-frissítések között "rendszerszintű" PowerShell 6-munkamenetkonfigurációként használható
  • Egy verzióspecifikus munkamenet-konfiguráció, például: PowerShell.6.1.0

Ez a viselkedés akkor hasznos, ha több PowerShell 6-verziót szeretne telepíteni és elérni ugyanazon a gépen.

Emellett a PowerShell előzetes verziói a parancsmag futtatása Enable-PSRemoting után saját újrakapcsolódó munkamenet-konfigurációkat kapnak:

C:\WINDOWS\system32> Enable-PSRemoting

A kimenet eltérő lehet, ha még nem állította be a WinRM-et.

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

Ezután külön PowerShell-munkamenetkonfigurációkat láthat a PowerShell 6 előzetes és stabil buildjeihez, valamint az egyes verziókhoz.

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 SSH által támogatott szintaxis

Az SSH-ügyfelek általában támogatják a kapcsolati sztring formátumátuser@host:port. Mivel az SSH protokollként van hozzáadva a PowerShell-remotinghoz, az alábbi kapcsolati sztring formátumot támogatjuk:

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

A telemetria csak környezeti változóval tiltható le

A PowerShell alapszintű telemetriai adatokat küld a Microsoftnak az indításkor. Az adatok tartalmazzák az operációs rendszer nevét, az operációs rendszer verzióját és a PowerShell-verziót. Ezek az adatok lehetővé teszik a PowerShell használatát lehetővé tévő környezetek jobb megértését, és lehetővé teszik az új funkciók és javítások rangsorolását.

Ha le szeretné tiltani ezt a telemetriát, állítsa a környezeti változót POWERSHELL_TELEMETRY_OPTOUT a következőre true: , yesvagy 1. A telemetria letiltásához a továbbiakban nem támogatjuk a fájl DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY törlését.