Aracılığıyla paylaş


PowerShell 7.5'teki Yenilikler

PowerShell 7.5.0 aşağıdaki özellikleri, güncelleştirmeleri ve önemli değişiklikleri içerir. PowerShell 7.5, .NET 9.0.1 GA sürümü üzerine kurulmuştur.

Değişikliklerin tam listesi için GitHub deposunda CHANGELOG bölümüne bakın. .NET 9 hakkında daha fazla bilgi için bkz. [.NET 9'daki yenilikler][07].

Kırıcı Değişiklikler

  • için ve parametrelerini, ve tarih aralığı (#20942) kullanırken düzelt (Teşekkürler
    • Birlikte belirtilirse daha önce -OlderThan yoksayılırdı
  • Varsayılan değeri 2 olarak değiştir New-FileCatalog -CatalogVersion (#20428) (Teşekkürler @ThomasNieto!)
  • Kısıtlı uzaktan iletişim oturumlarında ağ konumlarından yardım almayı engelleme (#20593)
  • Windows yükleyicisi artık kullanılan yükleme seçeneklerini anımsar ve bunları bir sonraki yükleme için seçenekleri başlatmak için kullanır (#20420) (Teşekkürler @reduckted!)
  • ConvertTo-Json BigInteger şimdi bir sayı olarak serileştirilir (#21000) (Teşekkürler @jborean93!)
  • .NET 9, BinaryFormatter cmdlet'inde regresyona neden olan Out-GridView uygulamasını kaldırdı. Out-GridView arama özelliği PowerShell 7.5'te çalışmaz. Bu sorun, Sorun #24749içinde izlenir.

Güncelleştirilmiş modüller

PowerShell 7.5.0 aşağıdaki güncelleştirilmiş modülleri içerir:

  • Microsoft.PowerShell.PSResourceGet v1.1.0
  • PSReadLine v2.3.6

Sekme tamamlama geliştirmeleri

Sekmenin tamamlanmasını iyileştirmeye yönelik tüm çalışmaları için @ArmaanMcleod ve diğer kişilere çok teşekkür ederiz.

  • Hashtable anahtar-değeri güvenli ifadeden alınamadığında tür çıkarımına geri dön (#21184) (Teşekkürler @MartinGC94!)
  • (#21223) için $_ tür çıkarımı yaparken regresyon düzeltin (Teşekkürler@MartinGC94!)
  • Sekme tamamlama ile ~'yi Windows'da $HOME olarak genişlet (#21529)
  • Parametre adı ve sınıf üyesi bildirilirken tamamlanmıyor (#21182) (Teşekkürler @MartinGC94!)
  • Sekme tuşu ile tür adlarını tamamlarken dosya tamamlamaya dönüşü engelle (#20084) (Teşekkürler @MartinGC94)
  • -Version için Set-StrictMode bağımsız değişken tamlayıcı ekle (#20554) (Teşekkürler @ArmaanMcleod!))
  • -Verb Get-Verb / için bağımsız değişken tamlayıcı ekleyin ve Get-Verb öğesini yeniden düzenleyin (#20286) (Teşekkürler @ArmaanMcleod))
  • -Verb için Start-Process bağımsız değişken tamlayıcı ekleyin (#20415) (Teşekkürler @ArmaanMcleod))
  • için bağımsız değişken tamlayıcı ekleme -Scope , *-Variable & *-Alias komutları (*-PSDrive) (Teşekkürler @ArmaanMcleod)
  • Komutlar için -ModuleSave-Help/Update-Help tamamlama ekleme (#20678) (Teşekkürler @ArmaanMcleod))

Yeni cmdlet’ler

  • ConvertTo-CliXml ve ConvertFrom-CliXml cmdlet'leri ekle (#21063) (Teşekkürler @ArmaanMcleod!))

Web cmdlet'lerindeki geliştirmeler

  • -PassThru ve -Outfile birlikte çalışmasına izin vermek için düzeltme (#24086)
  • OutFile'da WebResponseObject özelliği ekleme (#24047)
  • dosya adını, Invoke-WebRequest -OutFile -Verbose'da göster (#24041)
  • -Body belirtildiğinde ancak ContentType belirtilmediğinde WebCmdlet'leri düzeltildi (#23952) (Teşekkürler @CarloToso!))
  • -Resume belirtildiğinde Invoke-WebRequest'un doğru boyutu bildirmesi için düzeltme yapıldı (#20207) (Teşekkürler@LNKLEO!)
  • Web Cmdlet'leri düzeltip WinForm uygulamaların düzgün çalışmasını sağla (#20606)

Diğer cmdlet iyileştirmeleri

  • Etkinleştir -NoRestart, Register-PSSessionConfiguration ile çalışmak için (#23891)
  • Test-Json cmdlet'ine IgnoreComments ve AllowTrailingCommas seçeneklerini ekleme (#23817) (Teşekkürler @ArmaanMcleod!)
  • Get-Help, ValueFromRemainingArguments özelliği olan parametreleri işlem hattında kullanılabilir olarak bildirebilir (#23871)
  • LineNumber türünü Select-String içinde ulong olarak değiştirin (#24075) (Teşekkürler @Snowman-25!))
  • Get-Process: -IncludeUserName için yönetici gereksinimi kaldırıldı (#21302) (Teşekkürler @jborean93!))
  • Geçersiz yol ve dosya adı karakterlerini kontrol eden bir düzeltme yapın Test-Path -IsValid (#21358)
  • Hata raporlamasına RecommendedAction ekleme ConciseView (#20826) (Teşekkürler@JustinGrote!)
  • cmdlet için Remove-Item ilerleme çubuğu eklendi (#20778) (Teşekkürler @ArmaanMcleod!)
  • .NET 8 değişiklikleri nedeniyle Test-Connection düzeltildi (#20369)
  • Sonlandırılmayan hata iletisini kategori içerecek şekilde düzeltme Get-Service (#20276)
  • -Empty ve -InputObject parametrelerini New-Guid'ye ekle (#20014) (Teşekkürler @CarloToso!))
  • Parametre -Recurse için Get-ChildItem komutuna r diğer adını ekleyin (#20100) (Teşekkürler @kilasuit!))
  • Eksik olan işlevlerin diğer adlarına LP ekleyin LiteralPath (#20820)
  • Import-LocalizedData içine örtük yerelleştirme geri dönüşü ekleme (#19896) (Teşekkürler @chrisdent-de!))
  • Tarafından Aliases döndürülen parametrenin yardım içeriğini biçimlendirirken gösterilen özelliklere ekleyin Get-Help (#20994)
  • HelpUri öğesini Remove-Service (#20476) ekle
  • SCCM sağlayıcısı için tamamlama çökmesi düzeltildi (#20815, #20919, #20915) (Teşekkürler @MartinGC94!))
  • Get-Content içindeki gerilemeyi, -Tail 0 ve -Wait birlikte kullanıldığında düzeltin (#20734) (Teşekkürler @CarloToso!)
  • Start-Process -PassThru için düzeltme yap, böylece döndürülen Process nesnesinin ExitCode özelliğine erişilebilir olsun (#20749) (Teşekkürler @CodeCyclone!))
  • Group-Object üzerinde çıkışı için geçerli kültürü kullanacak şekilde düzeltme yap (#20608)
  • İnterpolasyon dizelerini kullanarak Group-Object çıktısını düzeltme (#20745) (Teşekkürler @mawosoft!)
  • Ağ için DisplayRoot işleme düzeltmesi PSDrive (#20793)
  • İlerleme durumunu yalnızca tüm dosyalar kopyalandığında gösterilecek şekilde düzeltildi Copy-Item (#20517)
  • UNC yolu tamamlama regresyonu düzeltin (#20419) (Teşekkürler @MartinGC94!)
  • Geçersiz -ExecutionPolicypwsh'ye geçirildiyse hata bildir (#20460 )
  • Kullanımı izlemek için WinGetCommandNotFound ve CompletionPredictor modülleri ekleme (#21040)
  • DateKind parametresini ConvertFrom-Json ekleyin (#20925) (Teşekkürler @jborean93!))
  • DirectoryInfo'yu OutputType'a New-Item için ekle (#21126) (Teşekkürler @MartinGC94!))
  • Dizi değerlerinin serileştirmesini düzeltme Get-Error (#21085) (Teşekkürler @jborean93!)
  • UNC yolunu kullanabilmesi için düzeltme Test-ModuleManifest (#24115)
  • önce veri toplamak yerine işlem hattına hemen yazma düzeltmesi Get-TypeData (#24236) (Teşekkürler @MartinGC94)
  • Joker karakter gizli dosyalarını desteklemek için Resolve-Path ve Convert-Path cmdlet'lerine -Force parametresi ekleyin #20981 (Teşekkürler @ArmaanMcleod!))

Motor geliştirmeleri

  • ANSI Hata Rengi'ni açıkça başlatma ve durdurma (#24065) (Teşekkürler @JustinGrote!)
  • Genel yöntemlerin .NET aşırı yükleme tanımını geliştirme (#21326) (Teşekkürler @jborean93!)
  • += Bir nesne dizisi olduğunda bir koleksiyon için işlemi iyileştirme (#23901) (Teşekkürler@jborean93!)
  • Modülü içeri aktarırken belirli etiketleri denetlemek için telemetri ekleme (#20371)
  • Add PSAdapter ve ConsoleGuiTools modül yükleme telemetrisi izin listesine (#20641)
  • Kullanımı izlemek için WinGet modülü ekleme (#21040)
  • WDAC ETW olayları günlüğe yazılırken dosya adının null olmadığından emin olun (#20910) (Teşekkürler @jborean93!)
  • WDAC günlük özelliği tarafından tanıtılan dört regresyon düzeltildi (#20913)
  • Giriş, çıkış ve hata tanıtıcılarını yönlendirilmedikleri zaman boş bırakın (#20853)
  • Ortak parametreler üzerinde işlem yapacak şekilde gizli uzaktan iletişim proxy cmdlet'lerini düzeltme (#20367)
  • Modül bulunamadığında modül sürümünü hata iletilerine ekleyin (#20144) (Teşekkürler @ArmaanMcleod!)
  • Dosya yürütülebilir olmadığında unixmode, setuid ve sticky işlemek için düzeltin ( #20366).
  • Derleme yolları oluşturulurken Path.Combine kullanılmasını sağlamak için derleme kullanımı düzeltildi (#21169)
  • Geçersiz ad alanlarının bildirilmesini önlemek için anlam denetimleri sırasında ad alanını kullanma değerini doğrulayın (#21162)
  • PATH'e $PSHOME eklerken genel aracı özel olarak ele al (#24228)

Deneysel özellikler

Aşağıdaki deneysel özellikler PowerShell 7.5-rc.1'deki temel özelliklere dönüştürüldü:

Aşağıdaki deneysel özellikler PowerShell 7.5-rc.1'e dahildir:

Performans iyileştirmeleri

PowerShell 7.5-rc.1, PR#23901 içeren ve bir nesne dizisi için @jborean93 işleminin performansını geliştiren += içermektedir.

Aşağıdaki örnek, bir diziye öğe eklemenin farklı yöntemlerinin performansını ölçer.

$tests = @{
    'Direct Assignment' = {
        param($count)

    $result = foreach($i in 1..$count) {
            $i
        }
    }
    'List<T>.Add(T)' = {
        param($count)

        $result = [Collections.Generic.List[int]]::new()
        foreach($i in 1..$count) {
            $result.Add($i)
        }
    }
    'Array+= Operator' = {
        param($count)

        $result = @()
        foreach($i in 1..$count) {
            $result += $i
        }
    }
}

5kb, 10kb | ForEach-Object {
    $groupResult = foreach($test in $tests.GetEnumerator()) {
        $ms = (Measure-Command { & $test.Value -Count $_ }).TotalMilliseconds

        [pscustomobject]@{
            CollectionSize    = $_
            Test              = $test.Key
            TotalMilliseconds = [Math]::Round($ms, 2)
        }

        [GC]::Collect()
            [GC]::WaitForPendingFinalizers()
    }

    $groupResult = $groupResult | Sort-Object TotalMilliseconds
        $groupResult | Select-Object *, @{
            Name       = 'RelativeSpeed'
            Expression = {
                $relativeSpeed = $_.TotalMilliseconds / $groupResult[0].TotalMilliseconds
                $speed = [Math]::Round($relativeSpeed, 2).ToString() + 'x'
                if ($speed -eq '1x') { $speed } else { $speed + ' slower' }
            }
        } | Format-Table -AutoSize
}

Betiği PowerShell 7.4.6'da çalıştırdığınızda, += işlecini kullanmanın en yavaş yöntem olduğunu görürsünüz.

CollectionSize Test                TotalMilliseconds RelativeSpeed
-------------- ----                ----------------- -------------
          5120 Direct Assignment                4.17 1x
          5120 List<T>.Add(T)                  90.79 21.77x slower
          5120 Array+= Operator               342.58 82.15x slower


CollectionSize Test                TotalMilliseconds RelativeSpeed
-------------- ----                ----------------- -------------
         10240 Direct Assignment                0.64 1x
         10240 List<T>.Add(T)                 184.10 287.66x slower
         10240 Array+= Operator              1668.13 2606.45x slower

Betiği PowerShell 7.5-rc.1'de çalıştırdığınızda, += işlecini kullanmanın PowerShell 7.4.6'dan çok daha hızlı olduğunu görürsünüz. Artık List<T>.Add(T) yöntemini kullanmaktan da daha hızlıdır.

CollectionSize Test                TotalMilliseconds RelativeSpeed
-------------- ----                ----------------- -------------
          5120 Direct Assignment                4.71 1x
          5120 Array+= Operator                40.42 8.58x slower
          5120 List<T>.Add(T)                  92.17 19.57x slower


CollectionSize Test                TotalMilliseconds RelativeSpeed
-------------- ----                ----------------- -------------
         10240 Direct Assignment                1.76 1x
         10240 Array+= Operator               104.73 59.51x slower
         10240 List<T>.Add(T)                 173.00 98.3x slower

[07]: /dotnet/core/whats-new/dotnet-9/overview)