PowerShell 7.1'deki Yenilikler
11 Kasım 2020'de PowerShell 7.1'in genel kullanıma sunulduğunu duyurmuştuk . PowerShell 7.0'da kurulan temeli temel alan çalışmalarımız topluluk sorunlarına odaklandı ve bir dizi iyileştirme ve düzeltme içeriyor. PowerShell'in kararlı ve performanslı bir platform olarak kalmasını sağlamaya kararlıyız.
PowerShell 7.1 aşağıdaki özellikleri, güncelleştirmeleri ve hataya neden olan değişiklikleri içerir.
- Tahmine Dayalı IntelliSense içeren PSReadLine 2.1.0
- PowerShell 7.1 Microsoft Store'da yayımlandı
- ARM64 desteğiyle yeni işletim sistemi sürümleri için güncelleştirilen yükleyici paketleri
- 4 yeni deneysel özellik ve 2 deneysel özellik temele yükseltildi
- Kullanılabilirliği geliştirmek için birkaç hataya neden olan değişiklik
Değişikliklerin tam listesi için GitHub deposundaKI DEĞİşİkLİk GÜNLÜĞÜ'ne bakın.
PSReadLine 2.1.0
PowerShell 7.1, PSReadLine 2.1.0'a da sahiptir. Bu sürüm Tahmine Dayalı IntelliSense'i içerir. Tahmine Dayalı IntelliSense özelliği hakkında daha fazla bilgi için PowerShell blogundaki duyuruya bakın.
Microsoft Store yükleyici paketi
PowerShell 7.1, Microsoft Store'da yayımlanmıştır. PowerShell sürümünü Microsoft Store web sitesinde veya Windows'da Mağaza uygulamasında bulabilirsiniz.
Microsoft Store paketinin avantajları:
- Doğrudan Windows'ta yerleşik otomatik güncelleştirmeler
- Intune ve SCCM gibi diğer yazılım dağıtım mekanizmalarıyla tümleşir
Not
içinde $PSHOME
depolanan sistem düzeyindeki yapılandırma ayarları değiştirilemez. Bu, WSMAN yapılandırmasını içerir. Bu, uzak oturumların PowerShell'in Mağaza tabanlı yüklemelerine bağlanmasını engeller. Kullanıcı düzeyinde yapılandırmalar ve SSH uzaktan iletişim desteklenir.
Diğer yükleyiciler
Desteklenen işletim sistemleri ve destek yaşam döngüsü hakkında daha güncel bilgiler için bkz. PowerShell Destek Yaşam Döngüsü.
Tercih ettiğiniz işletim sistemi için yükleme yönergelerini denetleyin:
Buna ek olarak, PowerShell 7.1 Arm32 ve ARM64'ün Debian, Ubuntu ve ARM64 Alpine Linux çeşitlerini destekler.
Resmi olarak desteklenmese de topluluk Arch ve Kali Linux için paketler de sağlamıştır.
Not
Debian 10+, CentOS 8+, Ubuntu 20.04, Alpine ve Arm şu anda WinRM uzaktan iletişimini desteklemiyor. SSH tabanlı uzaktan iletişim kurma hakkında ayrıntılı bilgi için bkz. SSH üzerinden PowerShell Uzaktan İletişimi.
Deneysel Özellikler
Deneysel Özellikler hakkında daha fazla bilgi için bkz. Deneysel Özellikleri Kullanma.
Aşağıdaki deneysel özellikler artık bu sürümdeki temel özelliklerdir:
Bu sürümde aşağıdaki deneysel özellikler eklendi:
Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace
- PowerShell 7.1, runspace parametresini tüm
*-PSBreakpoint
cmdlet'lere eklemek için bu deneysel özelliği genişletir. Runspace parametresi, belirtilen çalışma alanında kesme noktalarıyla etkileşim kurmak için bir Runspace nesnesi belirtir.
- PowerShell 7.1, runspace parametresini tüm
PSNativePSPathResolution - Bu özellik, PowerShell sağlayıcı yollarını PowerShell yol söz dizimlerini desteklemeyen yerel komutlara geçirmenize olanak tanır.
PSCultureInvariantReplaceOperator - bir
-replace
işleç deyimindeki sol işlenen bir dize olmadığında, bu işlenen dizeye dönüştürülür. Özellik etkinleştirildiğinde, dönüştürme işlemi dize dönüştürme için Kültür ayarlarını kullanmaz.PSSubsystemPluginModel , gelecekteki Tahmine Dayalı IntelliSense eklentilerini desteklemek için temelleri oluşturur.
Hataya Neden Olan Değişiklikler ve Geliştirmeler
.NET 5.0'da dize karşılaştırma davranışı değiştirildi
PowerShell 7.1, .NET 5.0 üzerine kurulmuştur ve bu da aşağıdaki hataya neden olan değişikliği kullanıma sunar:
.NET 5.0 itibarıyla kültür sabit 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
Yerel komut 'a yazdığında olmaması
$false
içinstderr
düzeltme$?
(#13395)Yerel komutların hata göstermeyi amaçlamadan yazılması
stderr
yaygın bir durumdur. Bu değişiklikle$?
, yalnızca yerel komutun sıfır olmayan bir çıkış kodu olduğunda olarak ayarlanır$false
. Bu değişiklik deneysel özelliğiylePSNotApplyErrorActionToStderr
ilgili değildir.$ErrorActionPreference
Yerel komutların çıkışını etkilemezstderr
(#13361)Yerel komutların hata göstermeyi amaçlamadan 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.-UnixTimeSeconds
Unix zaman girişine izin vermek için olarakGet-Date
yeniden adlandırın-FromUnixTime
(#13084) (Teşekkürler@aetos382!)-FromUnixTime
parametresi 7.1-preview.2 sırasında eklendi. Parametre, veri türüyle daha iyi eşleşecek şekilde yeniden adlandırıldı. Bu parametre, 1 Ocak 1970, 0:00:00 tarihinden itibaren saniye cinsinden temsil eden bir tamsayı değeri alır.Bu örnek bir Unix saatini (1970-01-01 0:00:00'dan bu yana saniye sayısıyla gösterilir) DateTime'a dönüştürür.
Get-Date -UnixTimeSeconds 1577836800 Wednesday, January 01, 2020 12:00:00 AM
Açıkça belirtilen adlandırılmış parametrenin karma tablo sıçramasından aynı parametrenin yerini almasına izin ver (#13162)
Bu değişiklikle, açıkça belirtilen tüm adlandırılmış parametreler bağlandıktan sonra bağlanabilmeleri için, sıçrayan 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
$args
parametresine bağlıdır. Bağımsız değişken listesinin sonuna sıçrayabilmek, parametrelerin içinde$args
görünme sırasını değiştirir.Örnek:
function SimpleTest { param( $Name, $Path ) "Name: $Name; Path: $Path; Args: $args" }
Önceki davranışta MyPath ,
-Path
bağımsız değişken listesindeki üçüncü bağımsız değişken olduğundan bağlı değildir. ## Böylece '$args' içine doldurulmuş olurBlah = "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 olduğundan öğesine bağlıdır-Path
.PS> SimpleTest @hash "MyPath" Name: Hello; Path: MyPath; Args: -Blah: World
switch parametresini
-Qualifier
(#12960) içinSplit-Path
konumsal hale getirme (Teşekkürler@yecril71pl!)Çalışma dizinini belirtilmediğinde sabit
Start-Process
yol olarak çözümle (#11946) (Teşekkürler @NoMoreFood!)Web cmdlet'lerinde parametresini (#11701) gibi çalışacak şekilde
-LiteralPath
oluşturun-OutFile
(Teşekkürler@iSazonov!)Sayısal değişmez değerler için
BigInteger
dize parametresi bağlamasını düzeltme (#11634) (Teşekkürler @vexx32!)Windows'da,
Start-Process
kullanarak geçerli oturumdaki tüm ortam değişkenleriyle bir işlem ortamı oluşturur, kullanarak-UseNewEnvironment
yeni bir varsayılan işlem ortamı oluşturur (#10830) (Teşekkürler @iSazonov!)Bir temsilciye dönüştürürken
ScriptBlock
dönüş sonucunuPSObject
sarmalama (#10619)C
ScriptBlock
# bağlamında kullanılacak bir temsilci türüne dönüştürüldüğünde, sonucun birPSObject
içinde sarmalanması gereksiz sorunlara neden olur:- Değer temsilci dönüş türüne dönüştürüldüğünde,
PSObject
temel olarak 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çinde sarmalanır.
Bu değişiklik sonrasında, döndürülen nesne temel alınan nesnedir.
- Değer temsilci dönüş türüne dönüştürüldüğünde,