A PowerShell 7.1 újdonságai

2020. november 11-én bejelentettük a PowerShell 7.1 általános elérhetőségét. A PowerShell 7.0-s verziójában létrehozott alaprendszerre építve a közösségi problémákra összpontosítottunk, és számos fejlesztést és javítást tartalmaztak. Elkötelezettek vagyunk annak biztosítása mellett, hogy a PowerShell stabil és hatékony platform maradjon.

A PowerShell 7.1 a következő funkciókat, frissítéseket és kompatibilitástörő változásokat tartalmazza.

  • PSReadLine 2.1.0, amely tartalmazza a prediktív IntelliSense-t
  • A PowerShell 7.1 közzé lett téve a Microsoft Store-ban
  • Új operációsrendszer-verziókhoz frissített telepítőcsomagok ARM64-támogatással
  • 4 új kísérleti funkció és 2 kísérleti funkció, amelyek általánosan elterjedtek
  • Számos kompatibilitástörő változás a használhatóság javítása érdekében

A módosítások teljes listáját a GitHub-adattár CHANGELOG című témakörében találja.

PSReadLine 2.1.0

A PowerShell 7.1 a PSReadLine 2.1.0-t is tartalmazza. Ez a verzió tartalmazza a prediktív IntelliSense-t. A prediktív IntelliSense funkcióval kapcsolatos további információkért tekintse meg a PowerShell-blog bejelentését .

Microsoft Store telepítőcsomag

A PowerShell 7.1 közzé lett téve a Microsoft Store-ban. A PowerShell-kiadás a Microsoft Store webhelyén vagy a Windows Áruház alkalmazásban található.

A Microsoft Store-csomag előnyei:

  • A Windows beépített automatikus frissítései
  • Integrálható más szoftverterjesztési mechanizmusokkal, például a Intune és az SCCM-mel

Megjegyzés

A rendszerszintű konfigurációs beállítások $PSHOME nem módosíthatók. Ez magában foglalja a WSMAN-konfigurációt is. Ez megakadályozza, hogy a távoli munkamenetek a PowerShell Áruház-alapú telepítéseihez csatlakozzanak. A felhasználói szintű konfigurációk és az SSH-újraegyenlítés támogatott.

Egyéb telepítők

A támogatott operációs rendszerekkel és a támogatási életciklussal kapcsolatos naprakész információkért tekintse meg a PowerShell támogatási életciklusát.

Ellenőrizze az előnyben részesített operációs rendszer telepítési utasításait:

Emellett a PowerShell 7.1 támogatja a Debian, az Ubuntu és az ARM64 Alpine Linux ARM32 és ARM64 változatait.

Bár hivatalosan nem támogatott, a közösség az Archhoz és a Kali Linuxhoz is biztosított csomagokat.

Megjegyzés

A Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine és Arm jelenleg nem támogatja a WinRM-távelérést. Az SSH-alapú távelérés beállításával kapcsolatos részletekért lásd: PowerShell-távelérés SSH-n keresztül.

Kísérleti funkciók

A kísérleti funkciókról további információt a Kísérleti funkciók használata című témakörben talál.

A következő kísérleti funkciók már alapvető funkciók ebben a kiadásban:

Ebben a kiadásban a következő kísérleti funkciók lettek hozzáadva:

  • Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace

    • A PowerShell 7.1 kibővíti ezt a kísérleti funkciót, hogy hozzáadja a Runspace paramétert az összes *-PSBreakpoint parancsmaghoz. A Runspace paraméter egy runspace objektumot ad meg, amely a megadott runspace töréspontjaival kommunikál.
  • PSNativePSPathResolution – Ez a funkció lehetővé teszi, hogy a PowerShell-szolgáltató elérési útjait olyan natív parancsoknak adja át, amelyek nem támogatják a PowerShell elérési útjának szintaxisát.

  • PSCultureInvariantReplaceOperator – Ha egy operátori utasítás bal oldali operandusa -replace nem sztring, az operandus sztringgé lesz konvertálva. Ha a funkció engedélyezve van, a konvertálás nem használja a kulturális környezet beállításait a sztringkonvertáláshoz.

  • A PSSubsystemPluginModel fekteti le az alapokat a jövőbeli prediktív IntelliSense beépülő modulok támogatásához.

Kompatibilitástörő változások és fejlesztések

  • A sztringek összehasonlítási viselkedése megváltozott a .NET 5.0-ban

    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ától a kulturális környezetbeli sztringek összehasonlítása figyelmen kívül hagyja a nem nyomtatható vezérlőkarakterek használatát.

    A rendszer például a következő két sztringet tekinti azonosnak:

    # Escape sequence "`a" is Ctrl-G or [char]7
    'Food' -eq "Foo`ad"
    
    True
    
  • Ki lett javítva$?, hogy ne legyen$false, amikor a natív parancs a(z) (#13395) fájlba stderr ír

    A natív parancsok gyakran nem stderr jeleznek hibát. Ezzel a módosítással $? csak akkor van beállítva, $false ha a natív parancs nem nulla kilépési kóddal is rendelkezik. Ez a változás nem kapcsolódik a kísérleti funkcióhoz PSNotApplyErrorActionToStderr.

  • Ne $ErrorActionPreference befolyásolja stderr a natív parancsok kimenetét (#13361)

    A natív parancsok gyakran nem stderr jeleznek 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.

  • Átnevezés -FromUnixTime a -UnixTimeSeconds Unix Get-Date időbevitelének engedélyezéséhez (#13084) (köszönet @aetos382!)

    A -FromUnixTime paraméter a 7.1-preview.2 verzióban lett hozzáadva. A paramétert átnevezték, hogy jobban megfeleljen az adattípusnak. Ez a paraméter egy 1970. január 1. és 0:00:00 között másodpercben megadott egész számot vesz fel.

    Ez a példa egy Unix-időt (amelyet az 1970-01-01 0:00:00 óta eltelt másodpercek száma jelöl) DateTime-ra konvertál.

    Get-Date -UnixTimeSeconds 1577836800
    
    Wednesday, January 01, 2020 12:00:00 AM
    
  • Engedélyezi, hogy az explicit módon megadott elnevezett paraméter felülírja ugyanazt a kivonattáblázat-halmazból (#13162)

    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, így azok az összes explicit módon megadott elnevezett paraméter kötése után lesznek kötve. Az egyszerű függvények paraméterkötése nem jelez 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. A splatting argumentumlista végére való áthelyezése megváltoztatja a paraméterek megjelenési sorrendjét $args.

    Például:

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

    Az előző viselkedésben a MyPath nincs kötve -Path , mert ez az argumentumlista harmadik argumentuma. ## Í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 a lista első argumentuma, ezért hozzá van kötve -Path.

    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: MyPath; Args: -Blah: World
    
  • Állítsa a kapcsolóparamétert -Qualifier nem pozícióba Split-Path (#12960) (Köszönet @yecril71pl!)

  • A munkakönyvtár feloldása konstans elérési útként Start-Process , ha nincs megadva (#11946) (Köszönet @NoMoreFood!)

  • A webes parancsmagok paraméterének létrehozása -OutFile a következőhöz hasonlóan -LiteralPath működik: (#11701) (Köszönjük @iSazonov!)

  • Sztringparaméter-kötés BigInteger javítása numerikus literálokhoz (#11634) (Köszönet @vexx32!)

  • Windows Start-Process rendszeren létrehoz egy folyamatkörnyezetet az aktuális munkamenet összes környezeti változójával, és -UseNewEnvironment létrehoz egy új alapértelmezett folyamatkörnyezetet (#10830) (Köszönet @iSazonov!)

  • Delegálttá alakításkor ne törje körbe a visszaadott ScriptBlock eredményt PSObject (#10619)

    Ha a ScriptBlock C#-környezetben használandó delegált típussá alakul át, az eredmény PSObject körbefuttatása felesleges problémákat okoz:

    • Amikor a delegált visszatérési típusra konvertálja az értéket, a rendszer lényegében feloldja a PSObject hozzárendelést. Tehát a PSObject felesleges.
    • Ha a delegált visszatérési típus be van objectcsomagolva, PSObject az megnehezíti a C#-kódban való munkát.

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