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.
- PowerShell 7.5'teki yenilikler
- PowerShell 7.4'teki yenilikler
- PowerShell 7.3'teki yenilikler
- PowerShell 7.2'deki yenilikler
- PowerShell 7.1'deki yenilikler
- PowerShell 7.0'daki yenilikler
- PowerShell 6.x'teki yenilikler
.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 string
geç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 parametresi
Get-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.exe
yapılan ek değişikliklerpwsh(.exe)
:
- İlk konumsal parametresi olarak
-Command
-File
değ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 gibipwsh foo.ps1
veyapwsh fooScript
belirtmeden-File
komut çalıştırabileceğiniz anlamına gelir. Ancak, bu değişiklik veya gibipwsh.exe -Command Get-Command
komutları çalıştırmaya çalışırken açıkça belirtmenizi-c
-Command
gerektirir. pwsh
etkileş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ştirilenpwsh -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-Module
eklenir. 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 eder0
- 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 eder0
- 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 -inputformat
iç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-ExperimentalFeature
ile 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 ValidateNotNull
ValidateNotNullOrEmpty
ö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 stderr
olarak 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 -Encoding
Byte
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 -AsByteStream
kullanı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ı $ErrorActionPreference
etkilemez.
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 $args
gö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 -Path
bağ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]::AggregateString
olanak 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 $ErrorView
aracı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 $ErrorView
ayarlayarak 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-Error
cmdlet, 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 $Error
kullanarak 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 Core
uyumlu 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-Csv
PSTypeNames
, 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 SecureString
alı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-Location
cd
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 cd
cd --
olarak $HOME
değ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 -Not
Where-Object
eklenmesiyle, 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.HttpClient
değ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-RestMethod
iç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 birBasicHtmlWebResponseObject
nesne döndürür.ParsedHtml
veForms
özellikleri kaldırıldı.BasicHtmlWebResponseObject.Headers
değerleri artıkString[]
yerineString
kullanılır.BasicHtmlWebResponseObject.BaseResponse
artık birSystem.Net.Http.HttpResponseMessage
nesnedir.Response
Web Cmdlet özel durumlarında özelliği artık birSystem.Net.Http.HttpResponseMessage
nesnedir.- Katı RFC üst bilgi ayrıştırma artık ve
-UserAgent
parametresi için-Headers
varsayılandır. Bu, ile-SkipHeaderValidation
atlanabilir. file://
veftp://
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
üzerindehttp://
kullanılması hataya neden olur. Hatayı engellemek için birhttps://
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 null
Invoke-RestMethod
döndürdüğünde, bunu yerine dize "null"
$null
olarak serileştiriyordu. Bu değişiklik, geçerli bir tek değerli JSON null
değişmez değerini olarak $null
dü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-Type
nadiren 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.InvokeScript
yerine 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 `u
değ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ınaWorkflow
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 birPSObject
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.exe
geri 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:port
bir 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
, yes
veya 1
olarak true
ayarlayın. Telemetriyi devre dışı bırakmak için dosyanın DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY
silinmesini artık desteklemiyoruz.
PowerShell