Megosztás a következőn keresztül:


Mi újság a PowerShell 7.1-ben

2020. november 11-én bejelentettük a PowerShell 7.1 általános elérhetőségét. A PowerShell 7.0 alapjaira építve erőfeszítéseink a közösségi problémákra összpontosítottak, és számos fejlesztést és javítást tartalmaztunk. Elkötelezettek vagyunk amellett, hogy a PowerShell stabil és teljesítményteljes platform maradjon.

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

  • PSReadLine 2.1.0, amely tartalmazza a Predictive IntelliSense-t
  • A PowerShell 7.1 megjelent a Microsoft Store-ban
  • Telepítő csomagok frissítve az új operációs rendszer verziókhoz, ARM64 támogatással
  • 4 új kísérleti és 2 kísérleti funkció került a mainstreambe
  • Több törőképes változtatás a használhatóság javítására

A módosítások teljes listáját a GitHub-adattár VÁLTOZÁSNAPLÓjában találja.

PSReadLine 2.1.0

A PowerShell 7.1 tartalmazza a PSReadLine 2.1.0-t is. Ez a verzió tartalmazza a Predictive IntelliSense-t is. További információért a Predictive IntelliSense funkcióról a PowerShell blog bejelentésében található.

Microsoft Store telepítő csomag

A PowerShell 7.1 megjelent a Microsoft Store-ban. A PowerShell kiadást megtalálod a Microsoft Store weboldalán vagy a Windows Store alkalmazásában.

A Microsoft Store-csomag előnyei:

  • Automatikus frissítések közvetlenül a Windowsba
  • Integrálódik más szoftverterjesztési mechanizmusokkal, mint az Intune és az SCCM

Megjegyzés:

A rendszerszintű konfigurációs beállítások $PSHOME nem módosíthatók. Ebbe beletartozik a WSMAN konfigurációja is. Ez megakadályozza, hogy a távoli munkamenetek a PowerShell áruházalapú telepítéséhez csatlakozzanak. A felhasználói szintű konfigurációk és az SSH távoli hozzáférés támogatott.

Egyéb telepítők

További up-toinformációért a támogatott operációs rendszerekről és a támogatási életciklusról a PowerShell Support Lifecycle-ben található.

Nézd meg a kedvenc operációs rendszered telepítési útmutatóját:

Ezen felül a PowerShell 7.1 támogatja az ARM32 és ARM64 változatokat a Debian, Ubuntu és ARM64 Alpine Linux verzióiban.

Bár hivatalosan nem támogatott, a közösség csomagokat is biztosított Arch és Kali Linux számára.

Megjegyzés:

A Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine és Arm jelenleg nem támogatják a WinRM távirányítót. Az SSH-alapú távollés beállításáról a PowerShell Remoting over SSH oldalán részletekért lásd.

Kísérleti funkciók

További információ a kísérleti funkciókról: A kísérleti funkciók használata.

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

A következő kísérleti funkciók kerültek hozzá ebben a kiadásban:

  • Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace

    • A PowerShell 7.1 kiterjeszti ezt a kísérleti funkciót, hogy a Runspace paramétert minden *-PSBreakpoint cmdlethez hozzáadja. A Runspace paraméter egy Runspace objektumot határoz meg, amely a megadott futótérben lévő megszakítási pontokat érinti.
  • PSNativePSPathResolution – Ez a funkció lehetővé teszi, hogy a PowerShell szolgáltató útvonalait olyan natív parancsokhoz adj, amelyek nem támogatják a PowerShell útszintaxist.

  • PSCultureInvariantReplaceOperator – Ha egy operátor utasításban a bal oldali operandum -replace nem string, az operánd átalakul egy stringré. Ha ez a funkció be van kapcsolva, a konverzió nem használja a Culture beállításokat a string átalakításhoz.

  • A PSSubsystemPluginModel megalapozza a jövőbeli Predictive IntelliSense bővítmények támogatását.

Törő változások és fejlesztések

  • A string-összehasonlító viselkedés megváltozott a .NET 5.0-ban

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

    A .NET 5.0-tól a kultúrainvariáns string-összehasonlítások figyelmen kívül hagyják a nem nyomtatott vezérlő karaktereket.

    Például a következő két húrt azonosnak tekintjük:

    # Escape sequence "`a" is Ctrl-G or [char]7
    'Food' -eq "Foo`ad"
    
    True
    
  • Javítás$?, hogy ne legyen $false akkor a natív parancs (stderr#13395) címhez ír

    Gyakori, hogy a natív parancsok stderr nem akarnak hibát jelezni. Ezzel a változással $? csak akkor van beállítva $false , ha a natív parancsnak is van nulla nélküli kilépési kódja. Ez a változás nem kapcsolódik a kísérleti jellemzőhöz PSNotApplyErrorActionToStderr.

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

    Gyakori, hogy a natív parancsok stderr nem akarnak hibát jelezni. Ezzel a változással a stderr kimenetet továbbra is rögzítik a ErrorRecord objektumokban, de a futás már nem érvényes $ErrorActionPreference , ha a ErrorRecord natív parancsból származik.

  • Átnevezni -FromUnixTime be, Get-Date hogy -UnixTimeSeconds engedélyezze a Unix időbevitelét (#13084) (Köszönöm)@aetos382!)

    A -FromUnixTime paramétert a 7.1-preview.2 során adták hozzá. A paramétert átnevezték, hogy jobban illeszkedjen az adattípushoz. Ez a paraméter egy egész számot vesz fel, amely másodpercekben jelenik meg 1970. január 1-je óta, 0:00:00 óta.

    Ez a példa egy Unix időt (amit a másodpercek száma képvisel 1970-01-01 0:00 óta) átalakítja DateTime-ra.

    Get-Date -UnixTimeSeconds 1577836800
    
    Wednesday, January 01, 2020 12:00:00 AM
    
  • Engedélyezzük, hogy a kifejezetten meghatározott nevelt paraméter leváltsa ugyanazt a hashtable splatting (#13162) paraméterét

    Ezzel a változással a splattingből származó elnevezett paraméterek a paraméterlista végére kerülnek, így az összes explicit módon megadott név paraméter megkötése után is megkötöttek őket. Egyszerű függvények paraméterkötése nem dob hibát, ha egy meghatározott nevelt paraméter nem található. Az ismeretlen elnevezett paraméterek az egyszerű függvény paraméteréhez vannak kötve $args . Ha a splatting az argumentuslista végére kerül, az megváltoztatja a paraméterek sorrendjét .$args

    Például:

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

    Az előző viselkedésben a MyPath nem kötött hozzá -Path , mert ez a harmadik érv az érvelési listán. ## Szóval végül beletömik a '$args'-be a Blah = "World"

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

    Ezzel a változással az argumentumok a lista @hash végére kerülnek. A MyPath lesz az első argumentum a listán, így kötött .-Path

    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: MyPath; Args: -Blah: World
    
  • Legyen a kapcsoló paraméter -Qualifier ne pozicionális (Split-Path#12960) esetén (Köszönöm)@yecril71pl!)

  • A munkakönyvtárat literális útként oldani fel arra Start-Process az esetre, ha nincs megadva (#11946) (Köszönöm @NoMoreFood!)

  • A -OutFile webes cmdletekben olyan paramétert alakítsd meg, hogy működjön (-LiteralPath#11701) (Köszi@iSazonov!)

  • Fix string paraméterkötés numerikus BigInteger literálisokhoz (#11634) (Köszönöm @vexx32!)

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

  • Ne csomagold be a return eredményt a PSObjectScriptBlock transzformáláskor (#10619)

    Amikor az a ScriptBlock delegált típussá konvertálva C# kontextusban használható, az eredmény a-ba PSObject csomagolása felesleges problémákat okoz:

    • Amikor az értéket átalakítjuk a delegált visszaküldés típusra, PSObject lényegében a visszacsomagolás kerül. Szóval ez PSObject felesleges.
    • Ha a delegált visszatérési típus object, az a PSObject becsomagolódik, így nehéz vele dolgozni C# kódban.

    E változtatás után a visszaadott objektum az alapul szolgáló objektum.