PowerShell 7.5'teki Yenilikler

PowerShell 7.5.6 aşağıdaki özellikleri, güncellemeleri ve uyumsuzluk yaratan değişiklikleri içerir. PowerShell 7.5.6, .NET 9.0.15 çalışma zamanı üzerinde oluşturulur.

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.

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 şimdi BigInteger sayı olarak seri hale geliyor (#21000) (Teşekkürler @jborean93!)

Güncelleştirilmiş modüller

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

  • Microsoft. PowerShell.PSResourceGet v1.1.1
  • 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ün (#21184) (Teşekkürler @MartinGC94!)
  • ($_) için tür çıkarımı yaparken regresyon düzeltin (Teşekkürler@MartinGC94!)
  • Windows'da sekme tamamlama ile ~ öğesini $HOME olarak genişletme (#21529)
  • Parametre adı ve sınıf üyesi bildirildiğinde otomatik tamamlamayı yapmayın (#21182) (Teşekkürler @MartinGC94!))
  • Sekme ile tür adlarını tamamlarken dosya tamamlamaya geri dönüşü engelle (#20084) (Teşekkürler @MartinGC94)
  • -Version'ye, Set-StrictMode için bağımsız değişken tamamlayıcı ekleme (#20554) (Teşekkürler @ArmaanMcleod!))
  • -Verb bağımsız değişken tamlayıcı Get-Verb/ Get-Command için ekleyin ve Get-Verb'u yeniden düzenleyin (#20286) (Teşekkürler @ArmaanMcleod))
  • (-Verb) için Start-Process bağımsız değişken tamlayıcı ekleme (Teşekkürler@ArmaanMcleod)
  • için bağımsız değişken tamlayıcı ekleme -Scope , *-Variable & *-Alias komutları (*-PSDrive) (Teşekkürler @ArmaanMcleod)
  • -Module tamamlaması ekle Save-Help/Update-Help komutları için (#20678) (Teşekkürler @ArmaanMcleod))

Yeni cmdlet’ler

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

Web cmdlet'lerindeki geliştirmeler

  • -PassThru ve -Outfile öğelerinin birlikte çalışabilmesi için yapılan düzeltme (#24086)
  • 'de OutFile özellik ekleme WebResponseObject (#24047)
  • Dosya adını göster (Invoke-WebRequest -OutFile -Verbose#24041)
  • WebCmdlet'lerin -Body belirtildiğinde ancak ContentType belirtilmediğinde düzeltilmesi (#23952) (Teşekkürler @CarloToso!))
  • Belirtildiğinde doğru boyutu bildirme düzeltmesi Invoke-WebRequest (-Resume) (Teşekkürler @LNKLEO!)
  • Uygulamaların düzgün çalışmasına izin vermek WinForm için Web Cmdlet'lerini düzeltme (#20606)

Diğer cmdlet iyileştirmeleri

  • MaxVisitCount ve MaxHashtableKeyCount, VisitorSafeValueContextSkipLimitCheck için doğruysa Import-PowerShellDataFile güncelleştirin.
  • Alt ssh işlemi oluşturulduktan sonra kanal istemci tanıtıcılarını kapatma (#26822)
  • Betik cmdlet'lerinde ilerleme tercih değişkenini düzeltme (#26791) (Teşekkürler @cmkb3!)
  • Özel bir uygulamayla eski Out-GridView kullanımı değiştirerek BinaryFormatter düzenleyin (#25559)
  • -NoRestart'i Register-PSSessionConfiguration ile çalışmak için etkinleştir (#23891)
  • IgnoreComments cmdlet'ine AllowTrailingCommas ve Test-Json seçeneklerini ekle (#23817) (Teşekkürler @ArmaanMcleod!)
  • Get-Help, özniteliğe sahip ValueFromRemainingArguments parametreleri işlem hattına alınabilir olarak bildirebilir (#23871)
  • "LineNumber türünü ulong'de Select-String olarak değiştirin (#24075) (Teşekkürler @Snowman-25!)"
  • Get-Process: (-IncludeUserName) için yönetici gereksinimini kaldırın (Teşekkürler@jborean93!)
  • Geçersiz yol ve dosya adı karakterlerini kontrol etmek için düzeltme Test-Path -IsValid (#21358)
  • Hata raporlamasına RecommendedAction'e ConciseView ekleyin (#20826) (Teşekkürler @JustinGrote!))
  • cmdlet için Remove-Item ilerleme çubuğu eklendi (#20778) (Teşekkürler @ArmaanMcleod!)
  • Düzelt Test-Connection, .NET 8 değişiklikleri nedeniyle (#20369)
  • Sonlandırılmayan hata iletisini kategori içerecek şekilde düzeltme Get-Service (#20276)
  • -Empty ve -InputObject parametrelerini New-Guid öğesine ekleyin (#20014) (Teşekkürler @CarloToso!))
  • Komutun parametresine r-Recurse diğer adı Get-ChildItem ekleyin (#20100) (Teşekkürler@kilasuit!)
  • Fonksiyonlar için eksik olan diğer adlara LP'yu LiteralPath olarak ekle (#20820)
  • "Import-LocalizedData için örtük yerelleştirme geri dönüşü ekle (#19896) (Teşekkürler @chrisdent-de!)"
  • Yardım içeriği biçimlendirilirken Aliases tarafından döndürülen parametrenin gösterilen özelliklerine Get-Help ekleyin (#20994).
  • HelpUri Remove-Service ekle (#20476)
  • SCCM sağlayıcısı için tamamlama çökmesi düzeltildi (#20815, #20919, #20915) (Teşekkürler @MartinGC94!))
  • Get-Content içindeki regresyonu, -Tail 0 ve -Wait birlikte kullanıldığında düzeltin (#20734) (Teşekkürler @CarloToso!)
  • Döndürülen Start-Process -PassThru nesne için özelliğin ExitCode erişilebilir olduğundan emin olmak için düzeltme Process (#20749) (Teşekkürler@CodeCyclone!)
  • Group-Object üzerinde çıkışı için geçerli kültürü kullanacak şekilde düzeltme yap (#20608)
  • Interpolasyonlu dizeler kullanarak Group-Object çıktısını düzelt (#20745) (Teşekkürler
  • DisplayRoot için PSDrive işleme düzeltmesi (#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)
  • (#20925) öğesine ConvertFrom-JsonDateKind parametresi ekleme (Teşekkürler@jborean93!)
  • New-Item için OutputType'a DirectoryInfo ekleme (#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)
  • Get-TypeData'ı önce veri toplamadan hemen işlem hattına yazacak şekilde düzeltin (#24236) (Teşekkürler @MartinGC94)
  • -Force ve Resolve-Path cmdlet'lerine joker karakter gizli dosyalarını desteklemek için Convert-Path parametresini ekle #20981 (Teşekkürler @ArmaanMcleod!)).
  • (-NoNewWindow) ile işlem başlatırken standart tanıtıcıları açıkça ayarlayın
  • Devralınan korumalı iç örnek üyelerini sınıf kapsamında erişilebilir hale getirin. (#25547) (Teşekkürler @mawosoft!)
  • Eski belirsiz öneriyi kaldırın ve yerel betik dosyası adı önerisini düzeltin (#25330)
  • Düzeltme PSMethodInvocationConstraints.GetHashCode yöntemi (#25306) (Teşekkürler @crazyjncsu!)

Motor geliştirmeleri

  • PATH'de ssh yürütülebilir dosyasını bulma mantığını düzeltme (#26165) (Teşekkürler @jborean93!)
  • .NET yöntemi çağrı günlüğünü, yöntem bağımsız değişkenleri için gerekli tür dönüşümü yapıldıktan sonra taşıyın (#25357)
  • AppLocker'dan sonra WldpCanExecuteFile geri dönme (#25305)
  • 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)
  • Modül yükleme telemetri izin listesine PSAdapter ve ConsoleGuiTools ekle (#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 getirilen dört regresyonu düzeltin (#20913)
  • Giriş, çıkış ve hata tanıtıcıları yeniden yönlendirilmediğinde varsayılan bırakın (#20853)
  • Ortak parametreler üzerinde işlem yapmak için örtük uzaktan kumanda vekil cmdlet'lerini düzeltme (#20367)
  • Modül bulunamadığında modül sürümünü hata iletilerine ekleyin (#20144) (Teşekkürler @ArmaanMcleod!)
  • unixmode, dosya yürütülebilir bir dosya olmadığında setuid ve sticky işleyecek şekilde düzeltin (#20366)
  • Derleme yolları oluştururken Path.Combine kullanmak için derleme kullanma sorunu 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 baştan ekleme sırasında küresel aracı özel olarak ele almak (#24228)
  • Tüm paketlerin kullanılabilir olmasını sağlamak için güncelleştirme bildirimini bir hafta geciktirme (#27220)

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, bir nesne dizisi için işlemin performansını geliştiren @jborean93+= içerir.

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