Share via


PowerShell 7.1'deki Yenilikler

11 Kasım 2020'de PowerShell 7.1'in genel kullanıma sunulduğunu duyurmuştuk . PowerShell 7.0'da kurulan temeli temel alan çalışmalarımız topluluk sorunlarına odaklandı ve bir dizi iyileştirme ve düzeltme içeriyor. PowerShell'in kararlı ve performanslı bir platform olarak kalmasını sağlamaya kararlıyız.

PowerShell 7.1 aşağıdaki özellikleri, güncelleştirmeleri ve hataya neden olan değişiklikleri içerir.

  • Tahmine Dayalı IntelliSense içeren PSReadLine 2.1.0
  • PowerShell 7.1 Microsoft Store'da yayımlandı
  • ARM64 desteğiyle yeni işletim sistemi sürümleri için güncelleştirilen yükleyici paketleri
  • 4 yeni deneysel özellik ve 2 deneysel özellik temele yükseltildi
  • Kullanılabilirliği geliştirmek için birkaç hataya neden olan değişiklik

Değişikliklerin tam listesi için GitHub deposundaKI DEĞİşİkLİk GÜNLÜĞÜ'ne bakın.

PSReadLine 2.1.0

PowerShell 7.1, PSReadLine 2.1.0'a da sahiptir. Bu sürüm Tahmine Dayalı IntelliSense'i içerir. Tahmine Dayalı IntelliSense özelliği hakkında daha fazla bilgi için PowerShell blogundaki duyuruya bakın.

Microsoft Store yükleyici paketi

PowerShell 7.1, Microsoft Store'da yayımlanmıştır. PowerShell sürümünü Microsoft Store web sitesinde veya Windows'da Mağaza 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 tümleşir

Not

içinde $PSHOME depolanan sistem düzeyindeki 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 yükleyiciler

Desteklenen işletim sistemleri ve destek yaşam döngüsü hakkında daha güncel bilgiler için bkz. PowerShell Destek Yaşam Döngüsü.

Tercih ettiğiniz işletim sistemi için yükleme yönergelerini denetleyin:

Buna ek olarak, PowerShell 7.1 Arm32 ve ARM64'ün Debian, Ubuntu ve ARM64 Alpine Linux çeşitlerini destekler.

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

Not

Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine ve Arm şu anda WinRM uzaktan iletişimini desteklemiyor. SSH tabanlı uzaktan iletişim kurma hakkında ayrıntılı bilgi için bkz. SSH üzerinden PowerShell Uzaktan İletişimi.

Deneysel Özellikler

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

Aşağıdaki deneysel özellikler artık bu sürümdeki temel özelliklerdir:

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

  • Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace

    • PowerShell 7.1, runspace parametresini tüm *-PSBreakpoint cmdlet'lere eklemek için bu deneysel özelliği genişletir. Runspace parametresi, belirtilen çalışma alanında kesme noktalarıyla etkileşim kurmak için bir Runspace nesnesi belirtir.
  • PSNativePSPathResolution - Bu özellik, PowerShell sağlayıcı yollarını PowerShell yol söz dizimlerini desteklemeyen yerel komutlara geçirmenize olanak tanır.

  • PSCultureInvariantReplaceOperator - bir -replace işleç deyimindeki sol işlenen bir dize olmadığında, bu işlenen dizeye dönüştürülür. Özellik etkinleştirildiğinde, dönüştürme işlemi dize dönüştürme için Kültür ayarlarını kullanmaz.

  • PSSubsystemPluginModel , gelecekteki Tahmine Dayalı IntelliSense eklentilerini desteklemek için temelleri oluşturur.

Hataya Neden Olan Değişiklikler ve Geliştirmeler

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

    PowerShell 7.1, .NET 5.0 üzerine kurulmuştur ve bu da aşağıdaki hataya neden olan değişikliği kullanıma sunar:

    .NET 5.0 itibarıyla kültür sabit dize karşılaştırmaları, yazdırılmayan denetim karakterlerini yoksayar.

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

    # Escape sequence "`a" is Ctrl-G or [char]7
    'Food' -eq "Foo`ad"
    
    True
    
  • Yerel komut 'a yazdığında olmaması $false için stderr düzeltme $? (#13395)

    Yerel komutların hata göstermeyi amaçlamadan yazılması stderr yaygın bir durumdur. Bu değişiklikle $? , yalnızca yerel komutun sıfır olmayan bir çıkış kodu olduğunda olarak ayarlanır $false . Bu değişiklik deneysel özelliğiyle PSNotApplyErrorActionToStderrilgili değildir.

  • $ErrorActionPreference Yerel komutların çıkışını etkilemez stderr (#13361)

    Yerel komutların hata göstermeyi amaçlamadan yazılması stderr yaygın bir durumdur. Bu değişiklikle, stderr çıkış ErrorRecord nesnelerinde yakalanmaya devam eder $ErrorActionPreference , ancak ErrorRecord yerel bir komuttan geliyorsa çalışma zamanı artık uygulanmaz.

  • -UnixTimeSeconds Unix zaman girişine izin vermek için olarak Get-Date yeniden adlandırın -FromUnixTime (#13084) (Teşekkürler@aetos382!)

    -FromUnixTime parametresi 7.1-preview.2 sırasında eklendi. Parametre, veri türüyle daha iyi eşleşecek şekilde yeniden adlandırıldı. Bu parametre, 1 Ocak 1970, 0:00:00 tarihinden itibaren saniye cinsinden temsil eden bir tamsayı değeri alır.

    Bu örnek bir Unix saatini (1970-01-01 0:00:00'dan bu yana saniye sayısıyla gösterilir) DateTime'a dönüştürür.

    Get-Date -UnixTimeSeconds 1577836800
    
    Wednesday, January 01, 2020 12:00:00 AM
    
  • Açıkça belirtilen adlandırılmış parametrenin karma tablo sıçramasından aynı parametrenin yerini almasına izin ver (#13162)

    Bu değişiklikle, açıkça belirtilen tüm adlandırılmış parametreler bağlandıktan sonra bağlanabilmeleri için, sıçrayan adlandırılmış parametreler parametre listesinin sonuna taşınır. Belirtilen adlandırılmış parametre bulunamadığında basit işlevler için parametre bağlaması hata oluşturmaz. Bilinmeyen adlandırılmış parametreler basit işlevin $args parametresine bağlıdır. Bağımsız değişken listesinin sonuna sıçrayabilmek, parametrelerin içinde $argsgörünme sırasını değiştirir.

    Örnek:

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

    Önceki davranışta MyPath , -Path bağımsız değişken listesindeki üçüncü bağımsız değişken olduğundan bağlı değildir. ## Böylece '$args' içine doldurulmuş olur Blah = "World"

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

    Bu değişiklikle, bağımsız değişkenleri bağımsız değişken @hash listesinin sonuna taşınır. MyPath listedeki ilk bağımsız değişken olduğundan öğesine bağlıdır -Path.

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

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

  • Web cmdlet'lerinde parametresini (#11701) gibi çalışacak şekilde -LiteralPath oluşturun -OutFile (Teşekkürler@iSazonov!)

  • Sayısal değişmez değerler için BigInteger dize parametresi bağlamasını düzeltme (#11634) (Teşekkürler @vexx32!)

  • Windows'da, Start-Process kullanarak geçerli oturumdaki tüm ortam değişkenleriyle bir işlem ortamı oluşturur, kullanarak -UseNewEnvironment yeni bir varsayılan işlem ortamı oluşturur (#10830) (Teşekkürler @iSazonov!)

  • Bir temsilciye dönüştürürken ScriptBlock dönüş sonucunu PSObject sarmalama (#10619)

    C ScriptBlock # bağlamında kullanılacak bir temsilci türüne dönüştürüldüğünde, sonucun bir PSObject içinde sarmalanması gereksiz sorunlara neden olur:

    • Değer temsilci dönüş türüne dönüştürüldüğünde, PSObject temel olarak eşlenmemiş olur. PSObject Bu yüzden gereksiz.
    • Temsilci dönüş türü olduğunda object, C# kodunda çalışmayı zorlaştıran bir PSObject içinde sarmalanır.

    Bu değişiklik sonrasında, döndürülen nesne temel alınan nesnedir.