Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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ş bir açık kaynak projesi 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, .NET Framework'ten .NET Core'a geçişteki önemli değişiklikler bölümüne bakın.
PowerShell'in her yeni sürümü daha yeni bir .NET sürümü üzerine kurulmuştur. .NET'te PowerShell'i etkileyebilecek köklü 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, yapıcılar için yeni aşırı yüklemeler olabilir. Bunun, New-Object
veya [type]::new()
yöntemini kullanarak nesneleri oluşturma şekliniz üzerinde etkisi olabilir.
Örneğin .NET, .NET Framework 4.5'te bulunmayan aşırı yüklemeleri [System.String]::Split()
yöntemine 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.YerelHesaplar
- 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.
CimCmdlet'ler
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 komutları
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
-
Out-GridView
cmdlet -
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'nde 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 için ikili ad powershell(.exe)
'dan pwsh(.exe)
olarak değiştirildi. 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.
powershell.exe
'den pwsh(.exe)
'ye yapılan ek değişiklikler:
- İlk konumsal parametre
-Command
'dan-File
'e değiştiriliyor. Bu değişiklik, Windows dışı platformlarda PowerShell dışındaki kabuklardan çalıştırılan PowerShell betiklerinde, shebang olarak da bilinen#!
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,pwsh.exe -Command Get-Command
gibi komutları çalıştırmaya çalışırken-c
veya-Command
'i açıkça belirtmenizi gerektirir. -
pwsh
(veya-Interactive
) etkileşimli bir kabuğu göstermek için-i
anahtarını kabul eder. Bu, PowerShell'in Unix platformlarında varsayılan kabuk olarak kullanılmasını sağlar. -
-ImportSystemModules
ve-PSConsoleFile
parametreleripwsh.exe
.'den kaldırıldı. -
pwsh -Version
vepwsh.exe
için yerleşik yardım, diğer yerel araçlarla uyumlu hale getirilmek üzere değiştirildi. -
-File
ve-Command
için geçersiz bağımsız değişken hata iletileri ve Unix standartlarıyla tutarlı çıkış kodları. - 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 pwsh.exe
ve -File
kullanarak bir PowerShell betiği yürütürken $true
/$false
değerlerini parametre olarak geçirmenin 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, yeni bir anahtar parametre UseWindowsPowerShellImport-Module
'e eklendi. 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'i veya Windows Update'i kullanmayı kabul eder -
0
- Microsoft Update'i Otomatik Güncelleştirmeler'i veya Windows Update'i kullanmayı kabul etmeyin
-
Motor değişiklikleri
PowerShell'i varsayılan Unix kabuğu olarak destekle
Unix'te, etkileşimli bir kabuk için kabukların -i
kabul etmesi bir kuraldır ve bir çok araç bu davranışı bekler (script
örneğin, PowerShell'i varsayılan kabuk olarak ayarlarken) ve kabuğu -i
anahtar ile çağırır. Bu değişiklik, daha önce -i
'ın -InputFormat
ile eşleşmek için kısayol olarak kullanılabilmesi durumunu bozuyor ki, bu şimdi -in
olması gerekiyor.
Ö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
. Bu özellikleri Enable-ExperimentalFeature
ve Disable-ExperimentalFeature
ile etkinleştirebilir veya devre dışı bırakabilirsiniz.
GAC'den yüklemeye çalışmadan önce modül temel yolundan derlemeyi yükleyin.
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 tipi eleman türüne sahip koleksiyonlar için null eleman kontrolünün atlanması
Mandatory
parametresi ve ValidateNotNull
ile ValidateNotNullOrEmpty
öznitelikleri için, koleksiyonun öğe türü değer türü ise 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.
$?
değerinin işlem hattının veya yürütülen deyimlerin sonucuna bağlı olduğu belirtilmelidir.
Yerel komut stderr
'ye yazdığında $false
olmaması için $?
düzeltilir.
$?
yerel komut stderr
'ye yazdığında $false
olarak ayarlanmıyor. Yerel komutların hata belirtme niyeti olmaksızın stderr
yazması yaygın bir durumdur.
$?
yalnızca yerel komutun sıfır olmayan bir çıkış kodu olduğunda olarak ayarlanır $false
.
Yerel komutların çıktısını stderr
etkilemeyecek şekilde $ErrorActionPreference
yapın.
Yerel komutların başarısızlık belirtme amacı olmaksızın stderr
'e yazması yaygın bir durumdur. Bu değişiklikle, stderr
çıktısı ErrorRecord nesnelerinde yakalanmaya devam eder, ancak ErrorRecord yerel bir komuttan geliyorsa çalışma zamanı artık $ErrorActionPreference
uygulamaz.
Değiştir $OutputEncoding
'i, ASCII yerine UTF-8 NoBOM
kodlaması kullanacak şekilde.
Önceki kodlama olan ASCII (7 bit), bazı durumlarda çıkışın yanlış değiştirilmesine neden olabilir.
UTF-8 NoBOM
varsayılan olarak ayarlandığında, ç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
FileSystem sağlayıcısının cmdlet'lerinden -Encoding
değeri Byte
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 uyumsuzluk yaratan değişiklik, Windows dışı platformlarda New-ModuleManifest
kodunu BOM'suz UTF olarak değiştirir.
Çoğu varsayılan takma adlardan AllScope
'i kaldır.
Kapsam oluşturmayı hızlandırmak için çoğu varsayılan addan AllScope
kaldırıldı.
AllScope
aramanın daha hızlı olduğu birkaç sık kullanılan takma ad için bırakıldı.
-Verbose
ve -Debug
artık $ErrorActionPreference
'yi geçersiz kılmıyor
Daha önce, -Verbose
veya -Debug
belirtilmişse, $ErrorActionPreference
'nin davranışını geçersiz kılıyordu. Bu değişiklikle -Verbose
ve -Debug
artık davranışını $ErrorActionPreference
etkilemez.
Ayrıca -Debug
parametreyi $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 kültür oturum başladıktan sonra değiştiğinde bu değer senkronize dışı kalabilir. Bu önbelleğe alma davranışı PowerShell çekirdeğinde düzeltildi.
Açıkça belirtilmiş adlandırılmış bir parametrenin, hashtable splatting'den gelen aynı parametreden üstün gelmesine 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 -Path
'e bağlı değildir. ## Böylece '$args' ile birlikte içine yerleştirilir 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şkenler @hash
’den bağımsız değişken 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şlenenini değerlendirir ve sonucunu geri döndürür. Eğer sol operand null değilse, ??
operatörü sağ operandı kontrol etmez.
$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ştirici atama operatörü ??=
Null birleşim atama işleci ??=
, sol işlenen yalnızca null olduğunda, sağ işlenenin değerini sol işlenenine atar. Eğer sol operand null değilse, ??=
operatörü sağ operandı kontrol etmez.
$x = $null
$x ??= 100
$x
100
Aşağıdaki örnekte sağ işlenenin değerlendirilmesi yapılmayacaktır.
[string] $todaysDate = '1/10/2020'
$todaysDate ??= (Get-Date).ToShortDateString()
1/10/2020
Null koşullu işleçler
Uyarı
Bu özellik PowerShell 7.1'de deneyselden temele taşındı.
Null koşullu işleç; bir üye erişimi, ?.
veya öğe erişimi, ?[]
işlevini yalnızca işlenen null değilse uygular; aksi takdirde null döner.
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, ${a}
gibi değişken adlarının veya ${a?}
bir değişken adının parçası olduğunda, bu adların etrafında {}
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şilmez ve null döndürülür.
$a = $null
${a}?[0]
Uyarı
${<name>}
değişken adı sözdizimini, $()
alt ifade işleciyle karıştırmamalıdır. Daha fazla bilgi için about_Variablesdeğişken adı bölümüne bakın.
İş denetimi amacıyla &
operatörü eklendi
&
'ı bir işlem hattının sonuna eklemek, işlem hattının bir PowerShell işi olarak çalışmasına neden olur. Bir işlem hattı arka planda çalıştırıldığı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) otomatik olarak göreve kopyalanır, bu nedenle Copy-Item $foo $bar &
sorunsuz ç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, ForEach
ve Where
yöntemleri de dahil olmak üzere, PSCustomObject
öğeleri üzerinde çalışmanıza ve filtrelemenize olanak tanır.
$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, PSMethod
[M]::DoubleStrLen
gibi değerleri temsilci olarak [M]::AggregateString
'a geçirmenize 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 köklü değişikliğin ortaya çıkmasına neden olmuştur:
.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'i 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.
- Deneysel Özelliği Devre Dışı Bırak
- Enable-ExperimentalFeature
- Deneysel Özelliği Al
Yeni Join-String 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
Uyarı
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 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 değer 5'tir.
$_
Betik bloğundaki geçerli giriş nesnesini temsil etmek için değişkenini kullanın. Çalışan betik bloğuna değişken başvurularını iletmek için Using:
kapsam değiştiricisini 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 CompatiblePSEdition
öğesi, Core
ile uyumlu olarak işaretlenmişse modülleri Get-Module
ve Import-Module
'e kullanıma sunar.
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
tüm yerleşik PowerShell cmdlet'leri için -LiteralPath
parametresi olan standart bir -lp
parametre diğer adı oluşturduk.
Gerçekten mevcut değilse a*b
, hata döndürmek için Get-Item -LiteralPath a*b
düzelt.
Daha önce, -LiteralPath
verilen bir joker karakter, -Path
ile aynı şekilde işlenecek ve joker karakter hiçbir dosya bulamazsa sessizce çıkacaktı. Doğru davranış, -LiteralPath
'nin literal değer olması gerektiğidir, bu nedenle dosya yoksa hata vermelidir. Değişiklik, -Literal
ile kullanılan joker karakterleri sabit değer olarak işlemektir.
geçerli dizini çalışma dizini olarak ayarla Start-Job
Start-Job
Cmdlet artık yeni iş için çalışma dizini olarak geçerli dizini kullanıyor.
*-Computer
cmdlet'lerinden -Protocol
kaldır
CoreFX'teki RPC (özellikle Windows dışı platformlarda) uzaktan iletişim ve PowerShell'de tutarlı bir uzaktan iletişim deneyimi sağlama ile ilgili sorunlar nedeniyle, -Protocol
parametresi \*-Computer
cmdlet'lerinden kaldırıldı. DCOM artık uzaktan bağlantı için desteklenmiyor. Aşağıdaki cmdlet'ler yalnızca WSMAN uzaktan yönetimini destekler.
Rename-Computer
Restart-Computer
Stop-Computer
-ComputerName
öğesini *-Service
cmdlet'lerinden kaldırın
PSRP'nin -ComputerName
tutarlı kullanımını teşvik etmek için parametresi cmdlet'lerden *-Service
kaldırıldı.
Get-Content -Delimiter
'yi döndürülen satırlara sınırlayıcı eklenmeyecek şekilde düzeltin.
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 "no-op" (hiçbir şey yapmaz). Bundan sonra, tüm çıktı, türüne ait tüm baytları içeren sayıların doğru bir temsilini gösterecektir.
-Raw
değişiklik öncesinde parametre bunu yapıyordu.
Get-ComputerInfo özellik adında yazım hatası düzeltmesi
BiosSerialNumber
yanlış olarak BiosSeralNumber
biçiminde yazılmış ve doğru yazımıyla değiştirilmiştir.
Get-StringHash
ve Get-FileHash
cmdlet'lerini ekle
Bu değişiklik, bazı karma algoritmaların CoreFX tarafından desteklenmemesi ve bu nedenle artık kullanılamamasıdır:
MACTripleDES
RIPEMD160
$c0 içerisindeki cmdlet'lere, $null geçirmenin hata yerine tüm nesneleri döndürdüğü durumlarda, doğrulama ekleyin
$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
Import-Csv
içinde W3C Genişletilmiş Günlük Dosyası Biçimi için destek ekleyin
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 desteklenmektedir.
Import-Csv
, CSV'de tür bilgileri mevcut olduğunda içeri aktarma sırasında pstypenames
uygular
Daha önce, Export-Csv
ile dışa aktarılan ve TypeInformation
içe aktarılan nesneler ConvertFrom-Csv
kullanıldığında tür bilgilerini tutmuyordu. Bu değişiklik, CSV dosyasından kullanılabiliyorsa pstypenames
üyeye tür bilgisini 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
.
*
’ın Remove-Item
için kayıt defteri yolunda kullanılmasına izin ver
Daha önce joker karakter -LiteralPath
, -Path
ile aynı şekilde ele alınırdı ve eğer joker karakter hiçbir dosya bulamazsa sessizce işlem sonlandırılırdı. Doğru davranış, -LiteralPath
'nin tam olarak belirtilmiş bir değer olarak kabul edilmesi olmalıdır, bu nedenle dosya yoksa hata vermelidir. Joker karakterlerin -Literal
ile kullanıldığında metin olarak işlenmesi gerekir.
Group-Object şimdi grupları sıralar
Performans geliştirmesinin bir parçası olarak, Group-Object
şimdi grupların sıralanmış bir listesini döndürür.
Her ne kadar sıralamaya güvenmemeniz gerekse de, ilk grubu istiyorsanız bu değişiklik sizi etkileyebilir. Ö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
Measure-Object
çıktısı artık bir StandardDeviation
özelliği içeriyor.
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 Password
parametresi vardır, bu da 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ı
Geçmişte PowerShell, Windows üzerinde more.com
sarmalayan more
adlı bir işlev içeriyordu. Bu işlev artık kaldırıldı.
Ayrıca işlev, Windows'ta more.com
veya Windows dışı platformlarda $Env:PAGER
tarafından belirtilen sistemin varsayılan sayfalayıcısında kullanılacak şekilde değiştirildi.
cd DriveName:
şimdi kullanıcıları bu sürücüdeki geçerli çalışma dizinine döndürür
Önceden, Set-Location
veya cd
kullanarak bir PSDrive'a dönmek, kullanıcıları o sürücünün varsayılan konumuna gönderiyordu. 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, cd
ve cd --
, $HOME
olarak değişir.
Update-Help
yönetici yetkisi olmadan
Popüler talep üzerine, Update-Help
artık yönetici olarak çalıştırılması gerekmez.
Update-Help
şimdi varsayılan olarak yardım dosyalarını kullanıcıya yönelik bir klasöre kaydeder.
Where-Object -Not
-Not
parametresinin Where-Object
'e eklenmesiyle, bir özelliğin mevcut olmadığını veya özelliğin null/boş değer taşıdığını kontrol ederek işlem hattındaki bir nesneyi filtreleyebilirsiniz.
Ö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 altında yatan .NET API'si System.Net.Http.HttpClient
olarak değiştirildi. Bu değişiklik birçok avantaj sağlar. Ancak, bu değişiklik ve Internet Explorer ile birlikte çalışabilirlik eksikliği nedeniyle, Invoke-WebRequest
ve Invoke-RestMethod
içinde birkaç önemli değişikliğe yol açtı.
-
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. - Web Cmdlet özel durumlarındaki
Response
özelliği artık birSystem.Net.Http.HttpResponseMessage
nesnedir. - RFC üst bilgisi katı ayrıştırma, artık
-Headers
ve-UserAgent
parametreleri için varsayılandır. Bu-SkipHeaderValidation
ile 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ülmezse yararlı bilgiler döndürür
Bir API yalnızca null
döndürdüğünde, Invoke-RestMethod
bunu $null
yerine "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 bunu -AllowUnencryptedAuthentication
anahtarını kullanarak 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
AddTypeCommandBase
sınıfı, performansı artırmak için Add-Type
öğesinden kaldırıldı. Bu sınıf yalnızca Add-Type
cmdlet tarafından kullanılır ve kullanıcıları etkilememesi gerekir.
Add-Type'de 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, RunspaceConfiguration
desteğini kaldırdı ve yalnızca InitialSessionState
'i destekler hale getirdi.
CommandInvocationIntrinsics.InvokeScript
yerine bağımsız değişkenleri bağlama $input
$args
Parametrenin yanlış konumu, arg'lerin args olarak değil, giriş olarak değerlendirilmesine neden oldu.
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ırmayı uygula
`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.
CommandTypes.Workflow
ve WorkflowInfoCleaned
kullanımları temizlendi
System.Management.Automation içindeki ve WorkflowInfo
kullanımları CommandTypes.Workflow
ile ilgili kodu temizleyin.
Bu küçük yıkıcı değişiklikler esas olarak yardım sağlayıcı 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.
-
SetParent
öğesinin yalnızca iş akışı hata ayıklaması için kullanılan Debugger soyut sınıfındaki aşırı yüklemesini kaldırın. - Türetilmiş RemotingJobDebugger sınıfından aynı aşırı yüklemesini
SetParent
kaldırın.
Bir ScriptBlock
öğesini bir temsilciye dönüştürürken, dönüş sonucunu PSObject
içinde sarmamaya dikkat edin.
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 çözülür.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, öncelikli olarak pwsh
kullanmayı dener
PowerShell Direct , ağ bağlantısı veya diğer uzaktan yönetim hizmetleri olmadan Hyper-V bir VM'ye 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.
pwsh.exe
kullanılamıyorsa, PowerShell Direct, powershell.exe
kullanmaya 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
. Bu uç nokta, "Sistem genelinde" PowerShell 6 oturum yapılandırması olarak, küçük sürüm güncellemeleri sırasında güvenilebilecek bir yapı sağlar. - 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 Enable-PSRemoting
cmdlet'ini çalıştırdıktan sonra kendi uzaktan oturum 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ı dizesini destekler. PowerShell Uzaktan İletişimi için bir protokol olarak SSH'nin eklenmesiyle, bu 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 POWERSHELL_TELEMETRY_OPTOUT
ortam değişkenini true
, yes
veya 1
olarak ayarlayın. Telemetriyi devre dışı bırakmak için dosyanın DELETE_ME_TO_DISABLE_CONSOLEHOST_TELEMETRY
silinmesini artık desteklemiyoruz.
PowerShell