Windows PowerShell 5.1 ile PowerShell 7.x arasındaki farklar

Windows PowerShell 5.1, .NET Framework v4.5'in üzerine kurulmuştur. PowerShell 6.0 sürümüyle PowerShell, .NET Core 2.0 üzerinde oluşturulmuş açık kaynak bir proje haline geldi. .NET Framework'ten .NET Core'a geçiş, PowerShell'in platformlar arası bir çözüm haline gelmesine izin verdi. PowerShell, Windows, macOS ve Linux üzerinde çalışır.

Windows PowerShell ile PowerShell arasında PowerShell dilinde birkaç fark vardır. En önemli farklar, Windows ve Windows dışı platformlar arasındaki PowerShell cmdlet'lerinin kullanılabilirliği ve davranışı ile .NET Framework ile .NET Core arasındaki farklardan kaynaklanan değişikliklerdir.

Bu makalede, Windows PowerShell ile PowerShell'in geçerli sürümü arasındaki önemli farklar ve önemli değişiklikler özetlemektedir. Bu özet, eklenen yeni özellikleri veya cmdlet'leri içermez. Bu makalede sürümler arasında nelerin değiştiği de anlatılmaz. Bu makalenin amacı, PowerShell'in geçerli durumunu ve bunun Windows PowerShell'den ne kadar farklı olduğunu sunmaktır. Sürümler arasındaki değişiklikler ve yeni özelliklerin eklenmesiyle ilgili ayrıntılı bir tartışma için, her sürüm için Yenilikler makalelerine bakın.

.NET Framework ile .NET Core karşılaştırması

Linux ve macOS üzerinde PowerShell, Microsoft Windows üzerinde tam .NET Framework'ün bir alt kümesi olan .NET core'u kullanır. PowerShell temel alınan çerçeve türlerine ve yöntemlerine doğrudan erişim sağladığından bu önemli bir durumdur. Sonuç olarak, Windows üzerinde çalışan betikler, çerçevelerdeki farklılıklar nedeniyle Windows dışı platformlarda çalışmayabilir. .NET Core'daki değişiklikler hakkında daha fazla bilgi için bkz . .NET Framework'ten .NET Core'a geçiş için hataya neden olan değişiklikler.

PowerShell'in her yeni sürümü daha yeni bir .NET sürümü üzerine kurulmuştur. .NET'te PowerShell'i etkileyen hataya neden olan değişiklikler olabilir.

  • PowerShell 7.5 - .NET 9.0 üzerinde oluşturulmuş
  • PowerShell 7.4 - .NET 8.0 üzerinde oluşturulmuş
  • PowerShell 7.3 - .NET 7.0 üzerinde oluşturulmuş
  • PowerShell 7.2 (LTS-current) - .NET 6.0 (LTS-current) üzerine kurulmuştur
  • PowerShell 7.1 - .NET 5.0 üzerinde oluşturulmuş
  • PowerShell 7.0 (LTS) - .NET Core 3.1 (LTS) üzerine kurulmuştur
  • PowerShell 6.2 - .NET Core 2.1 üzerine kurulmuştur
  • PowerShell 6.1 - .NET Core 2.1 üzerine kurulmuştur
  • PowerShell 6.0 - .NET Core 2.0 üzerinde oluşturulmuş

.NET Standard 2.0'ın ortaya çıkmasıyla, PowerShell birçok geleneksel Windows PowerShell modülünü değişiklik yapmadan yükleyebilir. Ayrıca PowerShell 7, tam çerçeve gerektiren Windows PowerShell modüllerini kullanmanıza olanak tanıyan bir Windows PowerShell Uyumluluğu özelliği içerir.

Daha fazla bilgi için bkz.:

.NET yöntemi değişikliklerine dikkat edin

.NET yöntemi değişiklikleri PowerShell'e özgü olmasa da, özellikle .NET yöntemlerini doğrudan çağırıyorsanız betiklerinizi etkileyebilir. Ayrıca, oluşturucular için yeni aşırı yüklemeler olabilir. Bunun, kullanarak veya [type]::new() yöntemini kullanarak New-Object nesneleri oluşturma şekliniz üzerinde etkisi olabilir.

Örneğin, .NET yöntemine [System.String]::Split() .NET Framework 4.5'te bulunmayan aşırı yüklemeler ekledi. Aşağıdaki listede, Windows PowerShell 5.1'de kullanılabilen yöntemin Split() aşırı yüklemeleri gösterilmektedir:

PS> "".Split

OverloadDefinitions
-------------------
string[] Split(Params char[] separator)
string[] Split(char[] separator, int count)
string[] Split(char[] separator, System.StringSplitOptions options)
string[] Split(char[] separator, int count, System.StringSplitOptions options)
string[] Split(string[] separator, System.StringSplitOptions options)
string[] Split(string[] separator, int count, System.StringSplitOptions options)

Aşağıdaki listede PowerShell 7'de kullanılabilen yöntemin Split() aşırı yüklemeleri gösterilmektedir:

"".Split

OverloadDefinitions
-------------------
string[] Split(char separator, System.StringSplitOptions options)
string[] Split(char separator, int count, System.StringSplitOptions options)
string[] Split(Params char[] separator)
string[] Split(char[] separator, int count)
string[] Split(char[] separator, System.StringSplitOptions options)
string[] Split(char[] separator, int count, System.StringSplitOptions options)
string[] Split(string separator, System.StringSplitOptions options)
string[] Split(string separator, int count, System.StringSplitOptions options)
string[] Split(string[] separator, System.StringSplitOptions options)
string[] Split(string[] separator, int count, System.StringSplitOptions options)

Windows PowerShell 5.1'de bir karakter dizisini (char[]) yöntemine Split() olarak stringgeçirebilirsiniz. yöntemi, dizideki bir karakterin herhangi bir örneğinde hedef dizeyi böler. Aşağıdaki komut, Hedef dizeyi Windows PowerShell 5.1'de böler, ancak PowerShell 7'de bölmez:

# PowerShell 7 example
"1111p2222q3333".Split('pq')
1111p2222q3333

Doğru aşırı yüklemeye bağlanmak için dizeyi bir karakter dizisine yayınlamalısınız:

# PowerShell 7 example
"1111p2222q3333".Split([char[]]'pq')
1111
2222
3333

Modüller artık PowerShell ile gönderilmemiş

Çeşitli uyumluluk nedenleriyle, aşağıdaki modüller artık PowerShell'e dahil değildir.

  • ISE
  • Microsoft.PowerShell.LocalAccounts
  • Microsoft.PowerShell.ODataUtils
  • Microsoft.PowerShell.Operation.Validation
  • PSScheduledJob
  • PSWorkflow
  • PSWorkflowUtility

PowerShell İş Akışı

PowerShell İş Akışı , Windows PowerShell'de Windows Workflow Foundation'ın (WF) üzerine inşa edilen ve uzun süre çalışan veya paralelleştirilmiş görevler için sağlam runbook'lar oluşturulmasını sağlayan bir özelliktir.

.NET Core'da Windows Workflow Foundation desteğinin olmaması nedeniyle PowerShell İş Akışı'nı PowerShell'den kaldırdık.

Gelecekte, PowerShell İş Akışına gerek kalmadan PowerShell dilinde yerel paralelliği/eşzamanlılığı etkinleştirmek istiyoruz.

İşletim sistemi yeniden başlatıldıktan sonra bir betiği sürdürmek için denetim noktalarının kullanılması gerekiyorsa, işletim sistemi başlatma sırasında bir betik çalıştırmak için Görev Zamanlayıcı'yı kullanmanızı öneririz, ancak betiğin kendi durumunu (dosyada kalıcı hale getirmek gibi) olması gerekir.

PowerShell'den kaldırılan cmdlet'ler

PowerShell'e dahil edilen modüller için, aşağıdaki cmdlet'ler çeşitli uyumluluk nedenleriyle veya desteklenmeyen API'lerin kullanımından dolayı PowerShell'den kaldırılmıştır.

CimCmdlets

  • Export-BinaryMiLog

Microsoft.PowerShell.Core

  • Add-PSSnapin
  • Export-Console
  • Get-PSSnapin
  • Remove-PSSnapin
  • Resume-Job
  • Suspend-Job

Microsoft.PowerShell.Diagnostics

  • Export-Counter
  • Import-Counter

Microsoft.PowerShell.Management

  • Add-Computer
  • Checkpoint-Computer
  • Clear-EventLog
  • Complete-Transaction
  • Disable-ComputerRestore
  • Enable-ComputerRestore
  • Get-ComputerRestorePoint
  • Get-ControlPanelItem
  • Get-EventLog
  • Get-Transaction
  • Get-WmiObject
  • Invoke-WmiMethod
  • Limit-EventLog
  • New-EventLog
  • New-WebServiceProxy
  • Register-WmiEvent
  • Remove-Computer
  • Remove-EventLog
  • Remove-WmiObject
  • Reset-ComputerMachinePassword
  • Restore-Computer
  • Set-WmiInstance
  • Show-ControlPanelItem
  • Show-EventLog
  • Start-Transaction
  • Test-ComputerSecureChannel
  • Undo-Transaction
  • Use-Transaction
  • Write-EventLog

Microsoft.PowerShell.Utility

  • Convert-String
  • ConvertFrom-String

PSDesiredStateConfiguration

  • Disable-DscDebug
  • Enable-DscDebug
  • Get-DscConfiguration
  • Get-DscConfigurationStatus
  • Get-DscLocalConfigurationManager
  • Publish-DscConfiguration
  • Remove-DscConfigurationDocument
  • Restore-DscConfiguration
  • Set-DscLocalConfigurationManager
  • Start-DscConfiguration
  • Stop-DscConfiguration
  • Test-DscConfiguration
  • Update-DscConfiguration

WMI v1 cmdlet'leri

Aşağıdaki WMI v1 cmdlet'leri PowerShell'den kaldırıldı:

  • Register-WmiEvent
  • Set-WmiInstance
  • Invoke-WmiMethod
  • Get-WmiObject
  • Remove-WmiObject

CimCmdlets modülü (diğer adıyla WMI v2) cmdlet'leri aynı işlevi gerçekleştirir ve yeni işlevsellik ve yeniden tasarlanmış bir söz dizimi sağlar.

New-WebServiceProxy cmdlet kaldırıldı

.NET Core, SOAP protokollerini kullanmaya yönelik hizmetler sağlayan Windows Communication Framework'leri desteklemez. Bu cmdlet SOAP gerektirdiği için kaldırıldı.

*-Transaction cmdlet'ler kaldırıldı

Bu cmdlet'lerin kullanımı çok sınırlı. Kendilerine verilen desteğin kesilmesi kararı alınmıştı.

  • Complete-Transaction
  • Get-Transaction
  • Start-Transaction
  • Undo-Transaction
  • Use-Transaction

*-EventLog Cmdlet 'leri

Desteklenmeyen API'lerin *-EventLog kullanılması nedeniyle cmdlet'ler PowerShell'den kaldırılmıştır. Get-WinEvent ve New-WinEvent Windows'da olay almak ve oluşturmak için kullanılabilir.

Windows Presentation Framework (WPF) kullanan cmdlet'ler

.NET Core 3.1 WPF desteği ekledi, bu nedenle PowerShell 7.0 sürümü aşağıdaki Windows'a özgü özellikleri geri yükledi:

  • cmdlet'i Show-Command
  • cmdlet'i Out-GridView
  • ShowWindow parametresiGet-Help

PowerShell İstenen Durum Yapılandırması (DSC) değişiklikleri

Invoke-DscResource PowerShell 7.0'da deneysel bir özellik olarak geri yüklendi.

PowerShell 7.2'den başlayarak PSDesiredStateConfiguration modülü PowerShell'den kaldırılmıştır ve PowerShell Galerisi yayımlanmıştır. Daha fazla bilgi için PowerShell Ekibi blogundaki duyuruya bakın.

PowerShell yürütülebilir değişiklikleri

powershell.exe adı pwsh.exe olarak değiştirildi

PowerShell'in ikili adı olarak değiştirildi powershell(.exe)pwsh(.exe). Bu değişiklik, kullanıcıların Makinelerde PowerShell çalıştırması için belirleyici bir yol sağlar ve Windows PowerShell ve PowerShell'in yan yana yüklemelerini destekler.

uygulamasından powershell.exeyapılan ek değişikliklerpwsh(.exe):

  • İlk konumsal parametresi olarak -Command-Filedeğiştirildi. Bu değişiklik, Windows dışı platformlarda PowerShell dışı kabuklardan yürütülen PowerShell betiklerinde (shebang olarak da bilinir) kullanımını #! düzeltir. Ayrıca gibi pwsh foo.ps1 veya pwsh fooScript belirtmeden -Filekomut çalıştırabileceğiniz anlamına gelir. Ancak, bu değişiklik veya gibi pwsh.exe -Command Get-Commandkomutları çalıştırmaya çalışırken açıkça belirtmenizi -c-Command gerektirir.
  • pwshetkileşimli bir kabuğu göstermek için (veya -Interactive) anahtarını kabul eder -i . Bu, PowerShell'in Unix platformlarında varsayılan kabuk olarak kullanılmasını sağlar.
  • ve -PSConsoleFile parametreleri -ImportSystemModules kaldırıldıpwsh.exe.
  • Diğer yerel araçlarla uyumlu hale getirmek için pwsh.exe değiştirilen pwsh -version ve yerleşik yardım.
  • Unix standartlarıyla tutarlı ve -Command çıkış kodları için -File geçersiz bağımsız değişken hata iletileri
  • Windows'da parametre eklendi -WindowStyle . Benzer şekilde, Windows olmayan platformlardaki paket tabanlı yükleme güncelleştirmeleri de yerinde güncelleştirmelerdir.

Kısaltılmış ad, Windows dışı platformlarda kabukların adlandırılmasıyla da tutarlıdır.

Bool parametresiyle PowerShell betiğini çalıştırma desteği

Daha önce kullanarak pwsh.exe bir PowerShell betiği -File yürütürken parametre değerleri olarak geçirmenin $true/$false hiçbir yolu yoktu. Parametrelere $true/$false ayrıştırılmış değerler olarak desteği eklendi. Anahtar değerleri de desteklenir.

Windows PowerShell ile geliştirilmiş geriye dönük uyumluluk

Windows için useWindowsPowerShell adlı yeni bir anahtar parametresi öğesine Import-Moduleeklenir. Bu anahtar, PowerShell 7'de, bu modülde yer alan cmdlet'leri örtük olarak çalıştırmak için yerel bir Windows PowerShell işlemi kullanan bir proxy modülü oluşturur. Daha fazla bilgi için bkz . Import-Module.

PowerShell 7.0 ile hangi Microsoft modüllerinin çalıştığı hakkında daha fazla bilgi için bkz. Modül Uyumluluğu Tablosu.

Windows için Microsoft Update desteği

PowerShell 7.2, Microsoft Update desteği ekledi. Bu özelliği etkinleştirdiğinizde, ister İş için Windows Update, WSUS, SCCM ister Ayarlar'daki etkileşimli WU iletişim kutusu olsun, geleneksel Windows Update (WU) yönetim akışınızda en son PowerShell 7 güncelleştirmelerini alırsınız.

PowerShell 7.2 MSI paketi aşağıdaki komut satırı seçeneklerini içerir:

  • USE_MU - Bu özelliğin iki olası değeri vardır:
    • 1 (varsayılan) - Microsoft Update veya WSUS aracılığıyla güncelleştirmeyi kabul eder
    • 0 - Microsoft Update veya WSUS aracılığıyla güncelleştirmeyi kabul etmeyin
  • ENABLE_MU
    • 1(varsayılan) - Microsoft Update'i Otomatik Güncelleştirmeler veya Windows Update'i kullanmayı kabul eder
    • 0- Microsoft Update'i Otomatik Güncelleştirmeler veya Windows Update'i kullanmayı kabul etmeyin

Altyapı değişiklikleri

PowerShell'i varsayılan Unix kabuğu olarak destekleme

Unix'te, kabukların etkileşimli bir kabuk için kabul -i etme kuralıdır ve birçok araç bu davranışı bekler (script örneğin, PowerShell'i varsayılan kabuk olarak ayarlarken) ve anahtarla -i kabuğu çağırır. Bu değişiklik, daha önce eşleşmek -inputformatiçin kısa el olarak kullanılabildiği -i ve artık olması gereken hataya neden oluyor-in.

Özel ek bileşenler

PowerShell ek bileşenleri, PowerShell topluluğunda yaygın olarak benimsenmeyen PowerShell modüllerinin öncüllerinden biridir.

Ek bileşenleri desteklemenin karmaşıklığı ve topluluktaki kullanım yetersizliği nedeniyle artık PowerShell'de özel ek bileşenleri desteklemiyoruz.

Deneysel özellik bayrakları

Deneysel Özellikler için PowerShell 6.2 desteği etkinleştirildi. Bu, PowerShell geliştiricilerinin tasarım tamamlanmadan önce yeni özellikler sunmasına ve geri bildirim almasına olanak tanır. Bu şekilde tasarım geliştikçe hataya neden olan değişiklikler yapmaktan kaçınıyoruz.

Kullanılabilir deneysel özelliklerin listesini almak için kullanın Get-ExperimentalFeature . ve Disable-ExperimentalFeatureile Enable-ExperimentalFeature bu özellikleri etkinleştirebilir veya devre dışı bırakabilirsiniz.

GAC'den yüklemeye çalışmadan önce modül temel yolundan derleme yükleme

Daha önce, bir ikili modül GAC'de modül derlemesine sahip olduğunda, modülü temel yolundan yüklemeye çalışmadan önce derlemeyi GAC'den yüklemiştik.

Değer türü öğe türüne sahip koleksiyonlar için null öğe denetimini atlama

parametresi ve ValidateNotNullValidateNotNullOrEmpty öznitelikleri için, koleksiyonun Mandatory öğe türünün değer türü olup olmadığını null öğe denetimini atlayın.

ParenExpression, SubExpression ve ArrayExpression için koru $?

Bu çekme isteği, otomatik olarak doğru olmaması için alt diziler (...), alt ifadeler $(...) ve dizi ifadelerini @()$? derleme şeklimizi değiştirir. Bunun yerine değeri $? işlem hattının veya yürütülen deyimlerin sonucuna bağlıdır.

Yerel komut şunun için yazıldığında olmaması $false düzeltilir$?:stderr

$? , yerel komut öğesine $false yazdığında stderrolarak ayarlanmadı. Yerel komutların hata belirtmeye gerek kalmadan yazılması stderr yaygın bir durumdur. $? yalnızca yerel komutun sıfır olmayan bir çıkış kodu olduğunda olarak ayarlanır $false .

$ErrorActionPreference Yerel komutların çıkışını etkilemez stderr

Yerel komutların hata belirtmeye gerek kalmadan 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.

ASCII yerine kodlama kullanacak UTF-8 NoBOM şekilde değiştirme $OutputEncoding

Önceki kodlama olan ASCII (7 bit), bazı durumlarda çıkışın yanlış değiştirilmesine neden olabilir. Varsayılan ayarın yapılması UTF-8 NoBOM , çoğu araç ve işletim sistemi tarafından desteklenen bir kodlama ile Unicode çıkışını korur.

Cmdlet'leri parametre -Encoding türünde olacak şekilde birleştirin System.Text.Encoding

Değer -EncodingByte dosya sistemi sağlayıcısı cmdlet'lerinden kaldırılmıştır. Giriş olarak bayt akışının gerekli olduğunu veya çıkışın bir bayt akışı olduğunu belirtmek için artık yeni bir parametresi -AsByteStreamkullanılır.

Windows dışı platformlarda kodlamayı UTF8NoBOM olarak değiştirme New-ModuleManifest

New-ModuleManifest Daha önce BOM ile UTF-16'da bildirimler oluşturarak psd1 Linux araçları için bir sorun oluşturuyor. Bu hataya neden olan değişiklik, kodlamasını New-ModuleManifest Windows dışı platformlarda UTF (BOM yok) olarak değiştirir.

Çoğu varsayılan diğer addan kaldırma AllScope

Kapsam oluşturmayı hızlandırmak için çoğu AllScope varsayılan diğer addan kaldırıldı. AllScope aramanın daha hızlı olduğu birkaç sık kullanılan diğer ad için bırakıldı.

-Verbose ve -Debug artık geçersiz kılma yok $ErrorActionPreference

Daha önce, belirtilmişse veya belirtildiyse-Verbose, davranışını aşıyordu$ErrorActionPreference.-Debug Bu değişiklikle -Verbose ve -Debug artık davranışını $ErrorActionPreferenceetkilemez.

Ayrıca parametre, -Debug Inquire yerine Continue olarak ayarlar $DebugPreference.

$PSCulture Oturum içi kültür değişikliklerini tutarlı bir şekilde yansıtma

Windows PowerShell'de geçerli kültür değeri önbelleğe alınır ve bu da değerin oturum başlatma işleminden sonra kültürle eşitlenmemiş durumdan çıkmasını sağlayabilir. Bu önbelleğe alma davranışı PowerShell çekirdeğinde düzeltildi.

Karma tablo sıçramasından aynı parametrenin yerini almak için açıkça belirtilen adlandırılmış parametreye izin ver

Bu değişiklikle, açıkça belirtilen tüm adlandırılmış parametreler bağlandıktan sonra bağlı olmaları için, splatting'den 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 parametresine bağlıdır $args . Bağımsız değişken listesinin sonuna sıçrayarak 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, bağımsız değişken listesindeki üçüncü bağımsız değişken olduğundan bağlı değildir-Path. ## Böylece '$args' ile birlikte dolmaya başlanır 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 olur, bu nedenle öğesine -Pathbağlıdır.

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

Dil değişiklikleri

Null birleşim işleci ??

Null birleşim işleci ?? , null değilse sol tarafındaki işlenenin değerini döndürür. Aksi takdirde sağ işleneni değerlendirir ve sonucunu döndürür. ?? Sol işlenen null olmayan olarak değerlendirilirse işleç sağ işlenenini değerlendirmez.

$x = $null
$x ?? 100
100

Aşağıdaki örnekte sağ işlenen değerlendirilmez.

[string] $todaysDate = '1/10/2020'
$todaysDate ?? (Get-Date).ToShortDateString()
1/10/2020

Null birleşim atama işleci ??=

Null birleşim atama işleci ??= , sağ işleneninin değerini yalnızca soldaki işlenen null olarak değerlendirilirse sol işlenenine atar. ??= Sol işlenen null olmayan olarak değerlendirilirse işleç sağ işlenenini değerlendirmez.

$x = $null
$x ??= 100
$x
100

Aşağıdaki örnekte sağ işlenen değerlendirilmez.

[string] $todaysDate = '1/10/2020'
$todaysDate ??= (Get-Date).ToShortDateString()
1/10/2020

Null koşullu işleçler

Not

Bu özellik PowerShell 7.1'de deneyselden temele taşındı.

Null koşullu işleç, bir üye erişimi, ?.veya öğe erişimi, ?[], işlemini yalnızca işlenen null olmayan olarak değerlendirirse, işlecine uygular; aksi takdirde null döndürür.

PowerShell değişken adının bir parçası olmasını sağladığından ? , bu işleçleri kullanmak için değişken adının resmi belirtimi gerekir. Bu nedenle veya değişken adının ${a?}bir parçası olduğunda ? gibi ${a} değişken adlarının çevresinde kullanılması {} gerekir.

Aşağıdaki örnekte PropName değeri döndürülür.

$a = @{ PropName = 100 }
${a}?.PropName
100

Aşağıdaki örnek, PropName üye adına erişmeye çalışmadan null döndürür.

$a = $null
${a}?.PropName

Benzer şekilde, öğesinin değeri döndürülür.

$a = 1..10
${a}?[0]
1

İşlenen null olduğunda, öğeye erişilir ve null döndürülür.

$a = $null
${a}?[0]

Not

değişken adı söz dizimi ${<name>} alt ifade işleciyle $() karıştırılmamalıdır. Daha fazla bilgi için about_Variables değişken adı bölümüne bakın.

İş denetimi için işleç eklendi &

İşlem & hattının sonuna koymak, işlem hattının PowerShell işi olarak çalıştırılmasına neden olur. bir işlem hattı arka planlandığında, bir iş nesnesi döndürülür. İşlem hattı bir iş olarak çalıştırıldıktan sonra, işi yönetmek için tüm standart *-Job cmdlet'ler kullanılabilir. İşlem hattında kullanılan değişkenler (işleme özgü değişkenler yoksayılarak) işe otomatik olarak kopyalanır, bu nedenle Copy-Item $foo $bar & yalnızca çalışır. İş, kullanıcının giriş dizini yerine geçerli dizinde de çalıştırılır.

Yeni yöntemler/özellikler PSCustomObject

öğesine yeni yöntemler ve özellikler ekledik PSCustomObject. PSCustomObject şimdi diğer nesneler gibi bir Count/Length özellik içerir.

$PSCustomObject = [pscustomobject]@{foo = 1}

$PSCustomObject.Length
1
$PSCustomObject.Count
1

Bu çalışma, öğeleri çalıştırmanıza ve filtrelemenize PSCustomObject olanak sağlayan ve Where yöntemlerini de içerirForEach:

$PSCustomObject.ForEach({$_.foo + 1})
2
$PSCustomObject.Where({$_.foo -gt 0})
foo
---
  1

PSMethod'tan Temsilciye Dönüştürmeler

bir PSMethod temsilciye dönüştürebilirsiniz. Bu, içine temsilci değeri olarak geçirme PSMethod[M]::DoubleStrLen gibi işlemler yapmanıza [M]::AggregateStringolanak tanır:

class M {
    static [int] DoubleStrLen([string] $value) { return 2 * $value.Length }

    static [long] AggregateString([string[]] $values, [func[string, int]] $selector) {
        [long] $res = 0
        foreach($s in $values){
            $res += $selector.Invoke($s)
        }
        return $res
    }
}

[M]::AggregateString((gci).Name, [M]::DoubleStrLen)

PowerShell 7.1'de dize karşılaştırma davranışı değiştirildi

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

.NET 5.0 itibarıyla kültür sabiti 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

Yeni cmdlet’ler

Yeni Get-Uptime cmdlet'i

Get-Uptime cmdlet'i, işletim sisteminin son önyüklemesinin üzerinden geçen süreyi döndürür. Cmdlet, PowerShell 6.0'da kullanıma sunulmuştur.

Yeni Remove-Alias cmdlet'i

Remove-Alias cmdlet'i geçerli PowerShell oturumundan bir diğer adı kaldırır. Cmdlet, PowerShell 6.0'da kullanıma sunulmuştur.

Yeni cmdlet Remove-Service

Remove-Service cmdlet'i, kayıt defterinde ve hizmet veritabanındaki bir Windows hizmetini kaldırır. Remove-Service Cmdlet, PowerShell 6.0'da kullanıma sunulmuştur.

Yeni Markdown cmdlet'leri

Markdown, HTML biçiminde işlenebilen temel biçimlendirmeye sahip okunabilir düz metin belgeleri oluşturmaya yönelik bir standarttır.

Aşağıdaki cmdlet'ler PowerShell 6.1'e eklendi:

  • ConvertFrom-Markdown - Bir dizenin veya dosyanın içeriğini MarkdownInfo nesnesine dönüştürün.
  • Get-MarkdownOption - Konsolda Markdown içeriğini işlemek için kullanılan geçerli renkleri ve stilleri döndürür.
  • Set-MarkdownOption - Konsolda Markdown içeriğini işlemek için kullanılan renkleri ve stilleri ayarlar.
  • Markdown'i Göster - Konsolda veya HTML olarak Markdown içeriğini görüntüler

Yeni Test-Json cmdlet'i

Test-Json cmdlet'i bir dizenin geçerli bir JavaScript Nesne Gösterimi (JSON) belgesi olup olmadığını test eder ve isteğe bağlı olarak sağlanan şemada JSON belgesini doğrulayabilir.

Bu cmdlet PowerShell 6.1'de kullanıma sunulmuştur

Deneysel Özellikleri desteklemek için yeni cmdlet'ler

Deneysel Özellikleri desteklemek için PowerShell 6.2'ye aşağıdaki cmdlet'ler eklendi.

Yeni Birleştirme Dizesi cmdlet'i

Join-String cmdlet'i, işlem hattındaki nesneleri tek bir dizede birleştirir. Bu cmdlet PowerShell 6.2'ye eklendi.

Yeni görünüm ConciseView ve cmdlet Get-Error

PowerShell 7.0, yeni bir varsayılan görünüm olan ConciseView ile etkileşimli ve betik hatalarının okunabilirliğini geliştirmek için hata iletilerinin görüntülenmesini geliştirir. Görünümler, tercih değişkeni $ErrorViewaracılığıyla kullanıcı tarafından seçilebilir.

ConciseView ile hata bir betikten veya ayrıştırıcı hatasından değilse, bu tek satırlık bir hata iletisidir:

Get-Childitem -Path c:\NotReal
Get-ChildItem: Cannot find path 'C:\NotReal' because it does not exist

Hata betik yürütme sırasında oluşuyorsa veya ayrıştırma hatasıysa, PowerShell hatayı içeren çok satırlı bir hata iletisi, bir işaretçi ve hatanın bu satırda nerede olduğunu gösteren bir hata iletisi döndürür. Terminal ANSI renk kaçış dizilerini (VT100) desteklemiyorsa renkler görüntülenmez.

PowerShell 7'deki varsayılan görünüm ConciseView'dır. Önceki varsayılan görünüm NormalView'dı ve tercih değişkenini $ErrorViewayarlayarak bunu seçebilirsiniz.

$ErrorView = 'NormalView' # Sets the error view to NormalView
$ErrorView = 'ConciseView' # Sets the error view to ConciseView

Not

Hata iletisinin vurgu rengini değiştirmeyi desteklemek için errorAccentColor$Host.PrivateData adlı yeni bir özellik eklendi.

Yeni Get-Errorcmdlet, istendiğinde tam hatanın tam kapsamlı bir görünümünü sağlar. Varsayılan olarak cmdlet, oluşan son hatanın iç özel durumları da dahil olmak üzere tüm ayrıntılarını görüntüler.

Get-Error cmdlet'i yerleşik değişkenini $Errorkullanarak işlem hattından girişi destekler. Get-Error tüm kanallı hataları görüntüler.

$Error | Get-Error

Cmdlet, Get-Error geçerli oturumda görüntülenmesini istediğiniz hata sayısını belirtmenize olanak tanıyarak En Yeni parametresini destekler.

Get-Error -Newest 3 # Displays the lst three errors that occurred in the session

Daha fazla bilgi için bkz . Get-Error.

Cmdlet değişiklikleri

ForEach-Object'e paralel yürütme eklendi

PowerShell 7.0'dan başlayarak, ForEach-Object bir koleksiyondaki öğeleri yineleyen cmdlet artık yeni Parallel parametresiyle yerleşik paralelliğe sahiptir.

Varsayılan olarak, paralel betik blokları paralel görevleri başlatan çağıranın geçerli çalışma dizinini kullanır.

Bu örnek, yerel bir Windows makinesindeki 5 sistem günlüğünden 50.000 günlük girdisi alır:

$logNames = 'Security','Application','System','Windows PowerShell','Microsoft-Windows-Store/Operational'

$logEntries = $logNames | ForEach-Object -Parallel {
    Get-WinEvent -LogName $_ -MaxEvents 10000
} -ThrottleLimit 5

$logEntries.Count

50000

Parallel parametresi, her giriş günlüğü adı için paralel olarak çalıştırılacak betik bloğunu belirtir.

Yeni ThrottleLimit parametresi, belirli bir zamanda paralel çalışan betik bloklarının sayısını sınırlar. Varsayılan 5'dir.

$_ Betik bloğundaki geçerli giriş nesnesini temsil etmek için değişkenini kullanın. $using: Değişken başvurularını çalışan betik bloğuna geçirmek için kapsamı kullanın.

Daha fazla bilgi için bkz . ForEach-Object.

Windows'da uyumlu yerleşik modülleri denetleme system32

Windows 10 1809 güncelleştirmesi ve Windows Server 2019'da, bir dizi yerleşik PowerShell modülünü PowerShell ile uyumlu olarak işaretlenecek şekilde güncelleştirdik.

PowerShell başlatıldığında, ortam değişkeninin PSModulePath bir parçası olarak otomatik olarak içerir$windir\System32. Ancak, modülleri yalnızca ve ile Coreuyumlu olarak işaretlenmişse CompatiblePSEdition kullanıma sunarGet-Module.Import-Module

Switch parametresini kullanarak -SkipEditionCheck tüm modülleri göstermek için bu davranışı geçersiz kılabilirsiniz. Ayrıca tablo çıkışına bir PSEdition özellik ekledik.

-lp tüm -LiteralPath parametreler için diğer ad

Parametresi olan tüm yerleşik PowerShell cmdlet'leri için standart bir -LiteralPath parametre diğer adı -lp oluşturduk.

Hata döndürmek için gerçekten mevcut değilse a*b düzeltme Get-Item -LiteralPath a*b

Daha önce joker -LiteralPath karakter, joker karakterle aynı şekilde -Path davranacaktı ve joker karakter hiçbir dosya bulamadıysa sessizce çıkacaktı. Doğru davranış -LiteralPath değişmez değer olmalıdır, bu nedenle dosya yoksa hata vermelidir. Değişiklik, ile -Literal kullanılan joker karakterleri değişmez değer olarak işlemektir.

çalışma dizinini içinde geçerli dizin olarak ayarlama Start-Job

Start-Job Cmdlet artık yeni iş için çalışma dizini olarak geçerli dizini kullanıyor.

Cmdlet'lerden *-Computer kaldırma -Protocol

CoreFX'te RPC uzaktan iletişim (özellikle Windows dışı platformlarda) ve PowerShell'de tutarlı bir uzaktan iletişim deneyimi sağlama ile ilgili sorunlar nedeniyle, -Protocol parametre cmdlet'lerden \*-Computer kaldırıldı. DCOM artık uzaktan iletişim için desteklenmiyor. Aşağıdaki cmdlet'ler yalnızca WSMAN uzaktan iletişimini destekler:

  • Rename-Computer
  • Restart-Computer
  • Stop-Computer

Cmdlet'lerden *-Service kaldırma -ComputerName

PSRP'nin -ComputerName tutarlı kullanımını teşvik etmek için parametresi cmdlet'lerden *-Service kaldırıldı.

Sınırlayıcıyı döndürülen satırlara eklememe düzeltmesi Get-Content -Delimiter

Daha önce kullanırken elde edilen çıkış Get-Content -Delimiter tutarsızdı ve sınırlayıcıyı kaldırmak için verilerin daha fazla işlenmesini gerektirdiğinden uygunsuzdu. Bu değişiklik, döndürülen satırlardaki sınırlayıcıyı kaldırır.

Değişiklikler: Format-Hex

-Raw parametresi artık bir "işlem yapılmaz" (hiçbir şey yapmaz). İleriye doğru tüm çıkış, türü için tüm baytları içeren sayıların gerçek bir gösterimiyle görüntülenir. Parametre bu -Raw değişiklik öncesinde bunu yapıyordu.

Get-ComputerInfo özellik adında yazım hatası düzeltmesi

BiosSerialNumber olarak BiosSeralNumber yanlış yazıldı ve doğru yazım denetimine değiştirildi.

Ve Get-FileHash cmdlet'leri ekleme Get-StringHash

Bu değişiklik, bazı karma algoritmaların CoreFX tarafından desteklenmemesi ve bu nedenle artık kullanılamamasıdır:

  • MACTripleDES
  • RIPEMD160

$null geçirmenin hata yerine tüm nesneleri döndürdüğü cmdlet'lere doğrulama Get-* ekleme

$null Aşağıdakilerden herhangi birine geçiş yapmak şimdi bir hata oluşturur:

  • Get-Credential -UserName
  • Get-Event -SourceIdentifier
  • Get-EventSubscriber -SourceIdentifier
  • Get-Help -Name
  • Get-PSBreakpoint -Script
  • Get-PSProvider -PSProvider
  • Get-PSSessionConfiguration -Name
  • Get-Runspace -Name
  • Get-RunspaceDebug -RunspaceName
  • Get-Service -Name
  • Get-TraceSource -Name
  • Get-Variable -Name

içinde W3C Genişletilmiş Günlük Dosyası Biçimi için destek ekleme Import-Csv

Import-Csv Daha önce, cmdlet W3C genişletilmiş günlük biçiminde günlük dosyalarını doğrudan içeri aktarmak için kullanılamayacaktı ve ek eylem gerekli olacaktı. Bu değişiklikle, W3C genişletilmiş günlük biçimi desteklenir.

Import-CsvPSTypeNames, CSV'de tür bilgileri mevcut olduğunda içeri aktarma sırasında geçerlidir

Daha önce, ile ConvertFrom-Csv ile içeri aktarılan kullanılarak TypeInformation dışarı aktarılan nesneler Export-CSV tür bilgilerini tutmuyordu. Bu değişiklik, CSV dosyasından kullanılabiliyorsa üyeye PSTypeNames tür bilgilerini ekler.

-NoTypeInformation varsayılan ayardır Export-Csv

Export-CSV Daha önce, cmdlet nesnenin tür adını içeren ilk satır olarak bir açıklama çıkışı verecekti. Çoğu CSV aracı tarafından anlaşılmadığından, değişiklik tür bilgilerini varsayılan olarak dışlar. Bu değişiklik, müşteri geri bildirimlerini ele almak için yapılmıştır.

Önceki davranışı korumak için kullanın -IncludeTypeInformation .

için kayıt defteri yolunda kullanılmasına izin ver *Remove-Item

Daha önce joker -LiteralPath karakter, joker karakterle aynı şekilde -Path davranacaktı ve joker karakter hiçbir dosya bulamadıysa sessizce çıkacaktı. Doğru davranış -LiteralPath değişmez değer olmalıdır, bu nedenle dosya yoksa hata vermelidir. Değişiklik, ile -Literal kullanılan joker karakterleri değişmez değer olarak işlemektir.

Group-Object artık grupları sıralar

Performans geliştirmesinin bir parçası olarak, Group-Object şimdi grupların sıralanmış bir listesini döndürür. Sıralamaya güvenmemeniz gerekse de, ilk grubu istiyorsanız bu değişiklikle bozulabilirsiniz. Önceki davranışa bağımlı olmanın etkisi düşük olduğundan bu performans iyileştirmesinin değer olduğuna karar verdik.

standart sapma Measure-Object

Şu andan itibaren Measure-Object çıkış bir StandardDeviation özellik içerir.

Get-Process | Measure-Object -Property CPU -AllStats
Count             : 308
Average           : 31.3720576298701
Sum               : 9662.59375
Maximum           : 4416.046875
Minimum           :
StandardDeviation : 264.389544720926
Property          : CPU

Get-PfxCertificate -Password

Get-PfxCertificate şimdi parametresine Password sahiptir ve bu parametre bir SecureStringalır. Bu, etkileşimli olmayan bir şekilde kullanmanıza olanak tanır:

$certFile = '\\server\share\pwd-protected.pfx'
$certPass = Read-Host -AsSecureString -Prompt 'Enter the password for certificate: '

$certThumbPrint = (Get-PfxCertificate -FilePath $certFile -Password $certPass ).ThumbPrint

İşlevin more kaldırılması

PowerShell geçmişte Windows üzerinde sarmalanan adlı more bir işlev gönderiyordu more.com. Bu işlev artık kaldırıldı.

Ayrıca işlev, help Windows'ta veya Windows dışı platformlarda tarafından $env:PAGER belirtilen sistemin varsayılan çağrı cihazında kullanılacak more.com şekilde değiştirildi.

cd DriveName: şimdi kullanıcıları bu sürücüdeki geçerli çalışma dizinine döndürür

Daha önce veya kullanarak Set-Locationcd bir PSDrive'a dönmek için kullanıcıları bu sürücünün varsayılan konumuna göndermişti. Kullanıcılar artık bu oturum için bilinen son geçerli çalışma dizinine gönderilir.

cd - önceki dizine döner

C:\Windows\System32> cd C:\
C:\> cd -
C:\Windows\System32>

Veya Linux'ta:

PS /etc> cd /usr/bin
PS /usr/bin> cd -
PS /etc>

Ayrıca ve cdcd -- olarak $HOMEdeğiştirin.

Update-Help yönetici olmayan olarak

Popüler talep üzerine, Update-Help artık yönetici olarak çalıştırılması gerekmez. Update-Help şimdi varsayılan olarak yardımı kullanıcı kapsamlı bir klasöre kaydeder.

Where-Object -Not

parametresinin -NotWhere-Objecteklenmesiyle, bir özelliğin varolmaması veya null/boş özellik değeri için işlem hattındaki bir nesneyi filtreleyebilir.

Örneğin, bu komut tanımlı bağımlı hizmetleri olmayan tüm hizmetleri döndürür:

Get-Service | Where-Object -Not DependentServices

Web Cmdlet'lerindeki değişiklikler

Web Cmdlet'lerinin temel alınan .NET API'si olarak System.Net.Http.HttpClientdeğiştirildi. Bu değişiklik birçok avantaj sağlar. Ancak, bu değişiklik internet explorer ile birlikte çalışabilirlik eksikliği ile birlikte ve Invoke-RestMethodiçinde Invoke-WebRequest birkaç hataya neden oldu.

  • Invoke-WebRequest artık yalnızca temel HTML Ayrıştırma'sını destekliyor. Invoke-WebRequest her zaman bir BasicHtmlWebResponseObject nesne döndürür. ParsedHtml ve Forms özellikleri kaldırıldı.
  • BasicHtmlWebResponseObject.Headers değerleri artık String[] yerine Stringkullanılır.
  • BasicHtmlWebResponseObject.BaseResponse artık bir System.Net.Http.HttpResponseMessage nesnedir.
  • Response Web Cmdlet özel durumlarında özelliği artık bir System.Net.Http.HttpResponseMessage nesnedir.
  • Katı RFC üst bilgi ayrıştırma artık ve -UserAgent parametresi için -Headers varsayılandır. Bu, ile -SkipHeaderValidationatlanabilir.
  • file:// ve ftp:// URI düzenleri artık desteklenmiyor.
  • System.Net.ServicePointManager ayarları artık kabul edilmez.
  • Şu anda macOS'ta sertifika tabanlı kimlik doğrulaması yoktur.
  • Bir URI'nin -Credential üzerinde http:// kullanılması hataya neden olur. Hatayı engellemek için bir https:// URI kullanın veya parametresini sağlayın -AllowUnencryptedAuthentication .
  • -MaximumRedirection artık yeniden yönlendirme girişimleri son yeniden yönlendirmenin sonuçlarını döndürmek yerine sağlanan sınırı aştığında sonlandırıcı bir hata üretir.
  • PowerShell 6.2'de JSON yanıtları için UTF-8 kodlamasında varsayılan olarak bir değişiklik yapıldı. JSON yanıtı için bir karakter kümesi sağlanmadığında, varsayılan kodlama RFC 8259 başına UTF-8 olmalıdır.
  • Yanıtlar için application-json varsayılan kodlama UTF-8 olarak ayarlandı
  • Standartlara uygun olmayan üst bilgilere izin vermek Content-Type için parametresi eklendi -SkipHeaderValidation
  • Basitleştirilmiş multipart/form-data desteği desteklemek için parametre eklendi -Form
  • İlişki anahtarlarının uyumlu, büyük/küçük harfe duyarlı olmayan işlenmesi
  • Web cmdlet'leri için parametre eklendi -Resume

Invoke-RestMethod, veri döndürülmediğinde yararlı bilgiler döndürür

BIR API yalnızca nullInvoke-RestMethod döndürdüğünde, bunu yerine dize "null"$nullolarak serileştiriyordu. Bu değişiklik, geçerli bir tek değerli JSON null değişmez değerini olarak $nulldüzgün bir şekilde seri hale getirmek için içindeki Invoke-RestMethod mantığı düzeltir.

Web Cmdlet'leri şifrelenmemiş bağlantılar üzerinden gönderildiğinde -Credential uyarır

HTTP kullanılırken, parolalar dahil içerik düz metin olarak gönderilir. Bu değişiklik, varsayılan olarak buna izin vermemek ve kimlik bilgileri güvenli olmayan bir şekilde geçiriliyorsa hata döndürmektir. Kullanıcılar anahtarı kullanarak -AllowUnencryptedAuthentication bunu atlayabilir.

Gibi çalışacak web cmdlet'lerinde parametre yapma -OutFile-LiteralPath

PowerShell 7.1'de başlayarak, web cmdlet'lerinin OutFile parametresi LiteralPath gibi çalışır ve joker karakterleri işlemez.

API değişiklikleri

Sınıfı kaldır AddTypeCommandBase

Sınıfı AddTypeCommandBase , performansı geliştirmek için öğesinden Add-Type kaldırıldı. Bu sınıf yalnızca cmdlet tarafından Add-Type kullanılır ve kullanıcıları etkilememelidir.

Eklenti Türü'nde desteklenen dil olarak kaldırıldı VisualBasic

Geçmişte, cmdlet'ini Add-Type kullanarak Visual Basic kodunu derleyebilirsiniz. Visual Basic ile Add-Typenadiren kullanıldı. PowerShell'in boyutunu küçültmek için bu özelliği kaldırdık.

Destek kaldırıldı RunspaceConfiguration

Daha önce API'yi kullanarak program aracılığıyla bir PowerShell runspace oluştururken eski RunspaceConfiguration veya daha InitialSessionState yeni sınıfları kullanabilirsiniz. Bu değişiklik için RunspaceConfiguration desteği kaldırdı ve yalnızca destekler InitialSessionState.

CommandInvocationIntrinsics.InvokeScriptyerine bağımsız değişkenleri bağlama $input$args

Parametrenin yanlış konumu, args olarak değil giriş olarak geçirilen arg'lerle sonuçlandı.

ve BuildVersion özelliklerini kaldırma ClrVersion$PSVersionTable

ClrVersion özelliği $PSVersionTable CoreCLR ile kullanışlı değildir. Son kullanıcılar uyumluluğu belirlemek için bu değeri kullanmamalıdır.

BuildVersion Özelliği, Windows olmayan platformlarda bulunmayan Windows derleme sürümüne bağlıydı. PowerShell'in GitCommitId tam derleme sürümünü almak için özelliğini kullanın.

Unicode kaçış ayrıştırma uygulama

`u#### veya `u{####} ilgili Unicode karakterine dönüştürülür. Sabit `udeğer çıkarmak için, arka çıtadan çıkış: ``u.

PS işlevlerinde parametre ValueFromRemainingArguments bağlama sorunu

ValueFromRemainingArguments şimdi değerleri, kendisi bir dizi olan tek bir değer yerine dizi olarak döndürür.

ve kullanımları CommandTypes.Workflow temizlendi WorkflowInfoCleaned

System.Management.Automation içindeki ve WorkflowInfo kullanımları CommandTypes.Workflow ile ilgili kodu temizleyin.

Bu küçük hataya neden olan değişiklikler çoğunlukla yardım sağlayıcısı kodunu etkiler.

  • öğesinin ortak oluşturucularını WorkflowInfo iç olarak değiştirin. artık iş akışını desteklemiyoruz, bu nedenle kişilerin örnek oluşturmasına Workflow izin vermemek mantıklıdır.
  • Yalnızca iş akışı hata ayıklaması için kullanıldığından System.Management.Automation.DebugSource türünü kaldırın.
  • öğesinin aşırı yüklemesini SetParent yalnızca iş akışı hata ayıklaması için kullanılan hata ayıklayıcı soyut sınıfından kaldırın.
  • Türetilmiş RemotingJobDebugger sınıfından aynı aşırı yüklemesini SetParent kaldırın.

Bir temsilciye dönüştürürken ScriptBlock dönüş sonucunu PSObject sarmalama

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 sorunlar getirir:

  • Değer temsilci dönüş türüne dönüştürüldüğünde, PSObject temelde 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çine sarmalanır.

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

Uzaktan İletişim Desteği

Unix platformlarında WinRM kullanan PowerShell Uzaktan İletişimi (PSRP), HTTPS üzerinden NTLM/Negotiate veya Temel Kimlik Doğrulaması gerektirir. macOS'ta PSRP yalnızca HTTPS üzerinden Temel Kimlik Doğrulamayı destekler. Windows dışı platformlarda Kerberos tabanlı kimlik doğrulaması desteklenmez.

PowerShell ayrıca tüm platformlarda (Windows, macOS ve Linux) SSH üzerinden PowerShell Uzaktan İletişimi'yi (PSRP) destekler. Daha fazla bilgi için bkz . PowerShell'de SSH uzaktan iletişim.

Kapsayıcılar için PowerShell Direct önce kullanmayı pwsh dener

PowerShell Doğrudan , ağ bağlantısı veya diğer uzaktan yönetim hizmetleri olmadan bir Hyper-V VM'sine veya Kapsayıcıya bağlanmanızı sağlayan bir PowerShell ve Hyper-V özelliğidir.

Geçmişte PowerShell Direct, Kapsayıcıdaki yerleşik Windows PowerShell örneğini kullanarak bağlanmıştı. Şimdi, PowerShell Direct ilk olarak ortam değişkeninde kullanılabilir pwsh.exe herhangi birini kullanarak bağlanmayı PATH dener. Kullanılamıyorsa pwsh.exe , PowerShell Direct kullanmaya powershell.exegeri döner.

Enable-PSRemoting şimdi önizleme sürümleri için ayrı uzaktan iletişim uç noktaları oluşturur

Enable-PSRemoting şimdi iki uzaktan iletişim oturumu yapılandırması oluşturur:

  • PowerShell'in ana sürümü için bir tane. Örneğin, PowerShell.6. "Sistem genelinde" PowerShell 6 oturum yapılandırması olarak ikincil sürüm güncelleştirmelerine dayanabilen bu uç nokta
  • Sürüme özgü bir oturum yapılandırması, örneğin: PowerShell.6.1.0

Aynı makinede birden çok PowerShell 6 sürümünün yüklü ve erişilebilir olmasını istiyorsanız bu davranış yararlıdır.

Ayrıca, PowerShell'in önizleme sürümleri artık cmdlet'ini çalıştırdıktan Enable-PSRemoting sonra kendi uzaktan iletişim oturumu yapılandırmalarına sahip olur:

C:\WINDOWS\system32> Enable-PSRemoting

Daha önce WinRM'i ayarlamadıysanız çıkışınız farklı olabilir.

WinRM is already set up to receive requests on this computer.
WinRM is already set up for remote management on this computer.

Ardından, PowerShell 6'nın önizlemesi ve kararlı derlemeleri ve belirli her sürüm için ayrı PowerShell oturum yapılandırmaları görebilirsiniz.

Get-PSSessionConfiguration
Name          : PowerShell.6.2-preview.1
PSVersion     : 6.2
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

Name          : PowerShell.6-preview
PSVersion     : 6.2
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

Name          : powershell.6
PSVersion     : 6.1
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

Name          : powershell.6.1.0
PSVersion     : 6.1
StartupScript :
RunAsUser     :
Permission    : NT AUTHORITY\INTERACTIVE AccessAllowed, BUILTIN\Administrators AccessAllowed, BUILTIN\Remote Management Users AccessAllowed

user@host:port SSH için desteklenen söz dizimi

SSH istemcileri genellikle biçiminde user@host:portbir bağlantı dizesi destekler. PowerShell Uzaktan İletişimi için bir protokol olarak SSH'nin eklenmesiyle, şu bağlantı dizesi biçimi için destek ekledik:

Enter-PSSession -HostName fooUser@ssh.contoso.com:2222

Telemetri yalnızca bir ortam değişkeniyle devre dışı bırakılabilir

PowerShell, başlatıldığında temel telemetri verilerini Microsoft'a gönderir. Veriler işletim sistemi adını, işletim sistemi sürümünü ve PowerShell sürümünü içerir. Bu veriler, PowerShell'in kullanıldığı ortamları daha iyi anlamamıza olanak tanır ve yeni özellik ve düzeltmelere öncelik vermemizi sağlar.

Bu telemetriyi geri çevirmek için ortam değişkenini POWERSHELL_TELEMETRY_OPTOUT , yesveya 1olarak trueayarlayın. Telemetriyi devre dışı bırakmak için dosyanın DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY silinmesini artık desteklemiyoruz.