Aracılığıyla paylaş


PowerShell 7.1'de Ne Yenilikler Var

11 Kasım 2020'de PowerShell 7.1'in genel kullanıma sunulduğunu duyurduk . PowerShell 7.0'da kurulan temel üzerine inşa edilen çabalarımız topluluk sorunlarına odaklandı ve birçok iyileştirme ve düzeltme içeriyordu. PowerShell'in istikrarlı ve performanslı bir platform olarak kalmasını sağlamaya kararlıyız.

PowerShell 7.1 aşağıdaki özellikleri, güncellemeleri ve son değişiklikleri içerir.

  • PSReadLine 2.1.0, Predictive IntelliSense'i de içerir
  • PowerShell 7.1 Microsoft Store'da yayınlandı
  • ARM64 desteğiyle yeni işletim sistemi sürümleri için güncellenen kurulum paketleri
  • 4 yeni deneysel özellik ve 2 deneysel özellik ana akıma tanıtıldı
  • Kullanılabilirliği artırmak için birkaç önemli değişiklik

Değişikliklerin tam listesi için GitHub deposunda CHANGELOG bölümüne bakın.

PSReadLine 2.1.0

PowerShell 7.1 ayrıca PSReadLine 2.1.0 da içerir. Bu sürümde Predictive IntelliSense (Tahmin Edici Zeki) da bulunmaktadır. Predictive IntelliSense özelliği hakkında daha fazla bilgi için PowerShell blogundaki duyuruya bakınız.

Microsoft Store kurulum paketi

PowerShell 7.1 Microsoft Store'a yayımlandı. PowerShell sürümünü Microsoft Store web sitesinde veya Windows'taki Store uygulamasında bulabilirsiniz.

Microsoft Store paketinin avantajları:

  • Doğrudan Windows'ta yerleşik otomatik güncelleştirmeler
  • Intune ve SCCM gibi diğer yazılım dağıtım mekanizmalarıyla entegre olur

Uyarı

Sistem düzeyinde depolanan $PSHOME herhangi bir yapılandırma ayarları değiştirilemez. Bu, WSMAN yapılandırmasını içerir. Bu, uzak oturumların PowerShell'in Mağaza tabanlı yüklemelerine bağlanmasını engeller. Kullanıcı düzeyinde yapılandırmalar ve SSH uzaktan iletişim desteklenir.

Diğer kurulumcular

Desteklenen işletim sistemleri ve destek yaşam döngüsü hakkında daha fazla up-tobilgi için PowerShell Destek Yaşam Döngüsü'ne bakınız.

Tercih ettiğiniz işletim sistemi için kurulum talimatlarını kontrol edin:

Ayrıca, PowerShell 7.1 Debian, Ubuntu ve ARM64 Alpine Linux'un ARM32 ve ARM64 versiyonlarını destekler.

Resmi olarak desteklenmese de, topluluk Arch ve Kali Linux için paketler de sağlamıştır.

Uyarı

Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine ve Arm şu anda WinRM uzaktan kumandasını desteklemiyor. SSH tabanlı uzaktan kurma hakkında detaylar için PowerShell Remoting over SSH sayfasına bakınız.

Deneysel Özellikler

Deneysel Özellikler hakkında daha fazla bilgi için bkz. Deneysel Özellikleri Kullanma.

Aşağıdaki deneysel özellikler artık bu yayında ana akım özellikler haline geldi:

Bu sürümde aşağıdaki deneysel özellikler eklenmiştir:

  • Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace

    • PowerShell 7.1, bu deneysel özelliği Runspace parametresini tüm *-PSBreakpoint cmdlet'lere ekleyerek genişletir. Runspace parametresi, belirtilen çalışma alanındaki kesinti noktalarıyla etkileşime girecek bir Runspace nesnesini belirtir.
  • PSNativePSPathResolution - Bu özellik, PowerShell yol sözdizimi desteklemeyen yerel komutlara PowerShell sağlayıcı yollarını aktarmanızı sağlar.

  • PSCultureInvariantReplaceOperator - Bir -replace operatör ifadesindeki sol el operandı bir dize değilse, o operand bir dize dönüştürülür. Özellik etkinleştirildiğinde, dönüşüm dize dönüştürme için Kültür ayarlarını kullanmaz.

  • PSSubsystemPluginModel , gelecekteki Predictive IntelliSense eklentilerini desteklemek için temel atar.

Kırıcı Değişiklikler ve İyileştirmeler

  • .NET 5.0'da dizi karşılaştırma davranışı değişti

    PowerShell 7.1, aşağıdaki kırılma değişikliğini getiren .NET 5.0 üzerine inşa edilmiştir:

    .NET 5.0'dan itibaren, kültür değişmez dizi karşılaştırmaları baskılanmayan kontrol karakterlerini görmezden gelir.

    Örneğin, aşağıdaki iki dizi aynı kabul edilir:

    # Escape sequence "`a" is Ctrl-G or [char]7
    'Food' -eq "Foo`ad"
    
    True
    
  • Yerel komut yazıldığında stderr (#13395) olmama düzeltimi $?$false

    Yerel komutların hata belirtmek amacıyla yazması stderr yaygındır. Bu değişiklikle $? sadece yerel komut sıfır olmayan çıkış koduna sahip olduğunda ayarlanır $false . Bu değişim, deneysel özellikle PSNotApplyErrorActionToStderrilgisizdir.

  • $ErrorActionPreference Yerel komutların çıktısını etkilememe stderr (#13361)

    Yerel komutların hata belirtmek amacıyla yazması stderr yaygındır. Bu değişiklikle, stderr çıktı hâlâ ErrorRecord nesnelerinde yakalanıyor, ancak ErrorRecord yerel bir komuttan geliyorsa çalışma zamanı artık geçerli olmaz$ErrorActionPreference.

  • Unix zaman girişine izin vermek için adını -FromUnixTime-UnixTimeSeconds on Get-Date olarak değiştirin (#13084) (Teşekkürler @aetos382!)

    Parametre -FromUnixTime 7.1-preview.2 sırasında eklenmiştir. Parametre, veri tipine daha iyi uyacak şekilde yeniden adlandırıldı. Bu parametre, 1 Ocak 1970'ten itibaren saniye cinsinden temsil edilen tam sayı değerini alır, 0:00:00.

    Bu örnek, bir Unix zamanını (1970-01-01 0:00:00'dan itibaren saniye sayısıyla gösterilen) DateTime'a dönüştürür.

    Get-Date -UnixTimeSeconds 1577836800
    
    Wednesday, January 01, 2020 12:00:00 AM
    
  • Açıkça belirtilmiş adlandırılmış parametrenin, hashtable splatting'deki aynı parametrenin yerini almasına izin ver (#13162)

    Bu değişiklikle, splatting'den çıkan adlandırılmış parametreler parametre listesinin sonuna taşınır ve böylece tüm açıkça belirtilmiş adlandırılmış parametreler bağlandıktan sonra sınırlandırılır. Basit fonksiyonlar için parametre bağlama, belirli bir adlandırılmış parametre bulunamayınca hata yapmaz. Bilinmeyen adlandırılmış parametreler, basit fonksiyonun parametresine bağlıdır $args . Splatting'i argüman listesinin sonuna taşımak, parametrelerin içinde $argsgörünme sırasını değiştirir.

    Örneğin:

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

    Önceki davranışta, MyPath buna bağlı -Path değildir çünkü argüman listesinde üçüncü argümandır. ## Sonunda '$args' ile birlikte dolduruluyor Blah = "World"

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

    Bu değişiklikle, argümanlar argüman @hash listesinin sonuna taşınır. MyPath listedeki ilk argüman olur, bu yüzden 'ye -Pathbağlıdır.

    PS> SimpleTest @hash "MyPath"
    Name: Hello; Path: MyPath; Args: -Blah: World
    
  • (#12960) için anahtar parametresini -Qualifier konumsal Split-Path olmayan hale getir (Teşekkürler@yecril71pl!)

  • Çalışma dizinini belirtilmediğinde (#11946) literal yol Start-Process olarak çöz (Teşekkürler) (Teşekkürler@NoMoreFood!)

  • -OutFile Web cmdlet'lerinde parametreyi (#11701) gibi -LiteralPath çalıştırın (Teşekkürler)@iSazonov!)

  • Sayısal literaller için BigInteger string parametre bağlamasını düzeltin (#11634) (Teşekkürler @vexx32!)

  • Windows'ta, Start-Process mevcut oturumdaki tüm ortam değişkenleriyle bir süreç ortamı oluşturur ve -UseNewEnvironment yeni bir varsayılan süreç ortamı oluşturur (#10830) (Teşekkürler) @iSazonov!)

  • A'yı ScriptBlock delegeye dönüştürürken dönüş sonucunu PSObject kapatmayın (#10619)

    A ScriptBlock , C# bağlamında kullanılacak bir delege türüne dönüştürüldüğünde, sonucu a PSObject olarak sarmak gereksiz sorunlar yaratır:

    • Değer delege dönüş türüne dönüştürüldüğünde, aslında PSObject açılır. Yani gereksiz PSObject bir durum.
    • Delege dönüş tipi objectolduğunda, C# kodunda çalışmayı zorlaştıran bir PSObject tür ile sarılır.

    Bu değişiklikten sonra, geri dönen nesne altta yatan nesnedir.