PowerShell'de Deneysel Özellikleri Kullanma
PowerShell'deki Deneysel Özellikler desteği, deneysel özelliklerin PowerShell veya PowerShell modüllerindeki mevcut kararlı özelliklerle birlikte var olması için bir mekanizma sağlar.
Deneysel bir özellik, tasarımın sonlandırılmadığı bir özelliktir. Bu özellik, kullanıcıların test edip geri bildirim sağlaması için kullanılabilir. Deneysel bir özellik sonlandırıldıktan sonra tasarım değişiklikleri çığır açan değişikliklere dönüşür.
Dikkat
Değişikliklerin bozulmasına izin verildiğinden deneysel özelliklerin üretimde kullanılması amaçlanmamıştır. Deneysel özellikler resmi olarak desteklenmez. Ancak geri bildirim ve hata raporları için teşekkür ederiz. Sorunları GitHub kaynak deposundan dosyalayabilirsiniz.
Bu özellikleri etkinleştirme veya devre dışı bırakma hakkında daha fazla bilgi için bkz . about_Experimental_Features.
Deneysel özellik yaşam döngüsü
Get-ExperimentalFeature cmdlet'i PowerShell'de kullanılabilen tüm deneysel özellikleri döndürür.
Deneysel özellikler modüllerden veya PowerShell altyapısından gelebilir. Modül tabanlı deneysel özellikler yalnızca modülü içeri aktardıktan sonra kullanılabilir. Aşağıdaki örnekte PSDesiredStateConfiguration yüklenmediğinden PSDesiredStateConfiguration.InvokeDscResource
özellik kullanılamaz.
Get-ExperimentalFeature
Name Enabled Source Description
---- ------- ------ -----------
PSCommandNotFoundSuggestion False PSEngine Recommend potential commands based on fuzzy searc…
PSCommandWithArgs False PSEngine Enable `-CommandWithArgs` parameter for pwsh
PSFeedbackProvider True PSEngine Replace the hard-coded suggestion framework with …
PSLoadAssemblyFromNativeCode False PSEngine Expose an API to allow assembly loading from nati…
PSModuleAutoLoadSkipOfflineFiles True PSEngine Module discovery will skip over files that are ma…
PSSerializeJSONLongEnumAsNumber True PSEngine Serialize enums based on long or ulong as an nume…
PSSubsystemPluginModel True PSEngine A plugin model for registering and un-registering…
Bir özelliği etkinleştirmek veya devre dışı bırakmak için Enable-ExperimentalFeature ve Disable-ExperimentalFeature cmdlet'lerini kullanın. Bu değişikliğin geçerli olması için yeni bir PowerShell oturumu başlatmanız gerekir. Özelliği etkinleştirmek PSCommandNotFoundSuggestion
için aşağıdaki komutu çalıştırın:
Enable-ExperimentalFeature PSCommandNotFoundSuggestion
WARNING: Enabling and disabling experimental features do not take effect until next start
of PowerShell.
Deneysel bir özellik temel özellik haline geldiğinde artık deneysel bir özellik olarak kullanılamaz çünkü işlev artık PowerShell altyapısının veya modülünün bir parçasıdır. Örneğin, PSAnsiRenderingFileInfo
özellik PowerShell 7.3'te temel olarak kullanılır hale geldi. Özelliğin işlevselliğini otomatik olarak alırsınız.
Not
Bazı özelliklerin, özellikten istenen sonuçları almak için ayarlanması gereken tercih değişkenleri gibi yapılandırma gereksinimleri vardır.
Deneysel bir özellik sonlandırıldığında, bu özellik artık PowerShell'de kullanılamaz. Örneğin, PSNativePSPathResolution
özellik PowerShell 7.3'te sonlandırıldı.
Kullanılabilir özellikler
Bu makalede, kullanılabilen deneysel özellikler ve özelliğin nasıl kullanılacağı açıklanmaktadır.
Gösterge
- Simgesi , deneysel özelliğin PowerShell sürümünde kullanılabilir olduğunu gösterir
- Simge , deneysel özelliğin temel olduğu PowerShell sürümünü gösterir
- Simge, deneysel özelliğin kaldırıldığı PowerShell sürümünü gösterir
PSAnsiRenderingFileInfo
Not
Bu özellik PowerShell 7.3'te temel bir özellik haline geldi.
ANSI biçimlendirme özellikleri PowerShell 7.2'ye eklendi. Bu özellik üyeyi $PSStyle.FileInfo
ekler ve belirli dosya türlerinin renklendirilmesine olanak tanır.
$PSStyle.FileInfo.Directory
- Dizinlerin rengini belirtmek için yerleşik üye$PSStyle.FileInfo.SymbolicLink
- Simgesel bağlantıların rengini belirtmek için yerleşik üye$PSStyle.FileInfo.Executable
- Yürütülebilir dosyalar için rengi belirtmek üzere yerleşik üye.$PSStyle.FileInfo.Extension
- Farklı dosya uzantılarının renklerini tanımlamak için bu üyeyi kullanın. Uzantı üyesi arşiv ve PowerShell dosyaları için uzantıları önceden içerir.
Daha fazla bilgi için bkz . about_Automatic_Variables.
PSCommandNotFoundSuggestion
Not
Bu özellik PowerShell 7.5-preview.5'te temel olarak kullanıma sunuldu.
CommandNotFoundException sonrasında benzer eşleşme aramalarına dayalı olası komutları önerir.
PS> get
get: The term 'get' isn't recognized as the name of a cmdlet, function, script file,
or operable program. Check the spelling of the name, or if a path was included, verify
that the path is correct and try again.
Suggestion [4,General]: The most similar commands are: set, del, ft, gal, gbp, gc, gci,
gcm, gdr, gcs.
PSCommandWithArgs
Not
Bu özellik PowerShell 7.5-preview.5'te temel olarak kullanıma sunuldu.
Bu özellik parametresini -CommandWithArgs
pwsh
etkinleştirir. Bu parametre, bağımsız değişkenlerle bir PowerShell komutu yürütmenize olanak tanır. 'nin aksine -Command
, bu parametre komutu tarafından kullanılabilecek yerleşik değişkeni doldurur $args
.
İlk dize komutudur ve boşlukla sınırlandırılan sonraki dizeler bağımsız değişkenlerdir.
Örneğin:
pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
Bu örnek aşağıdaki çıkışı oluşturur:
arg: arg1
arg: arg2
Bu özellik PowerShell 7.4-preview.2'ye eklendi.
PSDesiredStateConfiguration.InvokeDscResource
Windows dışı sistemlerde MOF'ye derlemeyi etkinleştirir ve LCM olmadan kullanılmasını Invoke-DSCResource
sağlar.
PowerShell 7.2'den başlayarak PSDesiredStateConfiguration modülü kaldırıldı ve bu özellik varsayılan olarak devre dışı bırakıldı. Bu özelliği etkinleştirmek için PowerShell Galerisi PSDesiredStateConfiguration v2.0.5 modülünü yüklemeniz ve özelliği etkinleştirmeniz gerekir.
DSC v3'de bu deneysel özellik yoktur. DSC v3 yalnızca MOF derlemeyi destekler Invoke-DSCResource
ve kullanmaz veya desteklemez. Daha fazla bilgi için bkz . PowerShell İstenen Durum Yapılandırması v3.
PSFeedbackProvider
Bu özelliği etkinleştirdiğinizde PowerShell, bir komut bulunamadığında size geri bildirim sağlamak için yeni bir geri bildirim sağlayıcısı kullanır. Geri bildirim sağlayıcısı genişletilebilir ve üçüncü taraf modüller tarafından uygulanabilir. Geri bildirim sağlayıcısı tahmine dayalı IntelliSense sonuçları sağlamak için tahminci alt sistemi gibi diğer alt sistemler tarafından kullanılabilir.
Bu özellik iki yerleşik geri bildirim sağlayıcısı içerir:
GeneralCommandErrorFeedback bugün mevcut olan öneri işlevinin aynısını sunar
Linux üzerinde kullanılabilen UnixCommandNotFound, bash'e benzer geri bildirim sağlar.
UnixCommandNotFound hem geri bildirim sağlayıcısı hem de tahmin aracı görevi görür. Command-not-found komutundan gelen öneri, komut etkileşimli bir çalıştırmada bulunamadığında geri bildirim sağlamak ve sonraki komut satırı için tahmine dayalı IntelliSense sonuçları sağlamak için kullanılır.
Bu özellik PowerShell 7.4-preview.3'e eklendi.
PSLoadAssemblyFromNativeCode
Derlemenin yerel koddan yüklenmesine izin vermek için bir API'yi kullanıma sunar.
PSModuleAutoLoadSkipOfflineFiles
Not
Bu özellik PowerShell 7.5-preview.5'te temel olarak kullanıma sunuldu.
Bu özellik etkinleştirildiğinde, kullanıcının PSModulePath'i OneDrive gibi bir bulut sağlayıcısından klasör içeriyorsa, PowerShell artık bu klasörde yer alan tüm dosyaların indirilmesini tetiklemez. İndirilmedi olarak işaretlenen tüm dosyalar atlanır. Modülleri makineler arasında eşitlemek için bulut sağlayıcıları kullanan kullanıcıların modül klasörünü Sabitlenmiş veya OneDrive dışındaki sağlayıcılar için eşdeğer durum olarak işaretlemesi gerekir. Modül klasörünü Sabitlenmiş olarak işaretlemek, dosyaların her zaman diskte tutulmasını sağlar.
Bu özellik PowerShell 7.4-preview.1'e eklendi.
PSNativeCommandArgumentPassing
Not
Bu özellik PowerShell 7.3'te temel bir özellik haline geldi.
Bu deneysel özellik etkinleştirildiğinde PowerShell, yerel yürütülebilir dosyayı çağırırken bir dizeyi StartProcessInfo
yeniden oluşturma mekanizmamız yerine nesnenin özelliğini kullanırArgumentList
.
Dikkat
Yeni davranış, geçerli davranıştan kaynaklanan hataya neden olan bir değişikliktir . Bu, yerel uygulamaları çağırma sırasında karşılaşılan çeşitli sorunlara geçici çözüm getiren betikleri ve otomasyonu bozabilir. Geçmişte tırnak işaretleri kaçmalıdır ve yerel uygulamaya boş bağımsız değişkenler sağlamak mümkün değildir.
Gerektiğinde yerel bağımsız değişkeni geçirmek için durdurma ayrıştırma belirtecini Start-Process
(--%
) veya cmdlet'ini kullanın.
Bu özellik, bu davranışı denetleen yeni $PSNativeCommandArgumentPassing
bir tercih değişkeni ekler. Bu değişken çalışma zamanında davranışı seçmenize olanak tanır. Geçerli değerler , Standard
ve Windows
değerleridirLegacy
. Varsayılan davranış platforma özgüdür. Windows platformlarında varsayılan ayardır Windows
ve Windows dışı platformlar varsayılan olarak kullanılır Standard
.
Legacy
tarihi davranıştır. ve Standard
modunun Windows
davranışı aynıdır, Windows
ancak modda aşağıdaki dosyaların çağrıları otomatik olarak stil bağımsız değişkenini Legacy
geçirir.
cmd.exe
find.exe
cscript.exe
wscript.exe
sqlcmd.exe
- PowerShell 7.3.1'e eklendi- ile biten
.bat
- ile biten
.cmd
- ile biten
.js
- ile biten
.vbs
- ile biten
.wsf
$PSNativeCommandArgumentPassing
veya Standard
olarak ayarlanırsaLegacy
, ayrıştırıcı bu dosyaları denetlemez.
Varsayılan davranış platforma özgüdür. Windows platformlarında varsayılan ayar ve Windows
Windows dışı platformlar şeklindedir Standard
.
Not
Aşağıdaki örneklerde TestExe.exe
aracı kullanılır. Kaynak kodundan oluşturabilirsiniz TestExe
.
Bkz . PowerShell kaynak deposunda TestExe .
Bu değişiklikle kullanıma sunulan yeni davranışlar:
Tırnak işaretleri eklenmiş sabit veya genişletilebilir dizeler korunur:
PS> $a = 'a" "b' PS> TestExe -echoargs $a 'c" "d' e" "f Arg 0 is <a" "b> Arg 1 is <c" "d> Arg 2 is <e f>
Bağımsız değişken olarak boş dizeler korunur:
PS> TestExe -echoargs '' a b '' Arg 0 is <> Arg 1 is <a> Arg 2 is <b> Arg 3 is <>
Yeni davranışa daha fazla örnek için bkz . about_Parsing.
PowerShell 7.3 ayrıca yerel komutlar için parametre bağlamasını izleme özelliğini de ekledi. Daha fazla bilgi için bkz . Trace-Command.
PSNativeCommandErrorActionPreference
Not
Bu özellik PowerShell 7.4'te temel bir özellik haline geldi.
Yerel komutlar genellikle çağrı uygulamasına başarı için sıfır veya başarısızlık için sıfır olmayan bir çıkış kodu döndürür. Ancak yerel komutlar şu anda PowerShell hata akışına katılmaz. Yeniden yönlendirilen stderr çıkışı, PowerShell hata akışıyla aynı şekilde yorumlanmamıştır. Birçok yerel komut bilgi veya ayrıntılı akış olarak stderr kullanır, bu nedenle yalnızca çıkış kodu önemlidir. Betiklerinde yerel komutlarla çalışan kullanıcıların, aşağıdaki örneğe benzer şekilde her çağrıdan sonra çıkış durumunu denetlemesi gerekir:
if ($LASTEXITCODE -ne 0) {
throw "Command failed. See above errors for details"
}
Ancak bu örnek, bir cmdlet'ten veya işlev hatasından hatalı olabilecek tüm durumları $?
desteklemez ve eskir $LASTEXITCODE
.
Bu özellik, yerel komut hatalarının $PSNativeCommandUseErrorActionPreference
PowerShell'de nasıl işleneceğini denetleen tercih değişkenini uygular. Bu, yerel komut hatalarının PowerShell hata akışına eklenen hata nesneleri oluşturmasına olanak tanır ve ek işleme olmadan betiğin yürütülmesini sonlandırabilir.
$PSNativeCommandUseErrorActionPreference
varsayılan olarak olarak ayarlanır $false
. Tercih size ayarlandığında $true
aşağıdaki davranışı elde edersiniz:
- olduğunda
$ErrorActionPreference = 'Stop'
, yerel bir komut sıfır olmayan bir çıkış kodu döndürdüğünde betikler bozulur. - Ne zaman
$ErrorActionPreference = 'Continue'
(varsayılan), yerel komut hataları için PowerShell hata iletileri görürsünüz, ancak betikler kesilmez.
PSNativePSPathResolution
Not
Bu deneysel özellik PowerShell 7.3'te kaldırıldı ve artık desteklenmiyor.
FileSystem sağlayıcısını kullanan bir PSDrive yolu yerel bir komuta geçirilirse, çözümlenen dosya yolu yerel komuta geçirilir. Bu, şimdi olduğu gibi bir komutun beklendiği gibi code temp:/test.txt
çalıştığı anlamına gelir.
Ayrıca, Windows'ta yol ile ~
başlıyorsa, bu tam yola çözümlenir ve yerel komuta geçirilir. Her iki durumda da yol, ilgili işletim sistemi için dizin ayırıcılarına normalleştirilir.
- Yol bir PSDrive veya
~
(Windows'da) değilse, yol normalleştirmesi gerçekleşmez - Yol tek tırnak içindeyse çözümlenmez ve değişmez değer olarak işlenmez
PSRedirectToVariable
Not
Bu deneysel özellik PowerShell 7.5-preview.4'e eklendi.
Bu özellik etkinleştirildiğinde değişken sürücüye yeniden yönlendirme desteği ekler. Bu özellik söz dizimini kullanarak verileri bir değişkene variable:name
yeniden yönlendirmenizi sağlar. PowerShell yeniden yönlendirmenin hedefini ve yerine çağıran Set-Variable
Out-File
değişken sağlayıcısını kullanıp kullanmadiğini inceler.
Aşağıdaki örnekte, bir komutun çıkışının bir değişkene nasıl yeniden yönlendirildiği gösterilmektedir:
. {
"Output 1"
Write-Warning "Warning, Warning!"
"Output 2"
} 3> variable:warnings
$warnings
Output 1
Output 2
WARNING: Warning, Warning!
PSSubsystemPluginModel
Bu özellik PowerShell'de alt sistem eklenti modelini etkinleştirir. Bu özellik, bileşenlerini System.Management.Automation.dll
kendi derlemelerinde bulunan tek tek alt sistemlere ayırmayı mümkün kılar. Bu ayırma, çekirdek PowerShell altyapısının disk ayak izini azaltır ve bu bileşenlerin en düşük PowerShell yüklemesi için isteğe bağlı özellikler haline gelmesini sağlar.
Şu anda yalnızca CommandPredictor alt sistemi desteklenmektedir. Bu alt sistem, özel tahmin eklentileri sağlamak için PSReadLine modülüyle birlikte kullanılır. Gelecekte job, CommandCompleter, Remoting ve diğer bileşenler dışında System.Management.Automation.dll
alt sistem derlemelerine ayrılabilir.
Deneysel özellik get-PSSubsystem adlı yeni bir cmdlet içerir. Bu cmdlet yalnızca özellik etkinleştirildiğinde kullanılabilir. Bu cmdlet, sistemde kullanılabilen alt sistemler hakkında bilgi döndürür.
PSNativeWindowsTildeExpansion
Bu özellik etkinleştirildiğinde PowerShell, yerel komutları çağırmadan önce notlanmamış tilde'yi (~
) kullanıcının geçerli giriş klasörüne genişletir. Aşağıdaki örneklerde özelliğin nasıl çalıştığı gösterilmektedir.
Özellik devre dışı bırakılmıştır, tilde yerel komuta değişmez dize olarak geçirilir.
PS> cmd.exe /c echo ~
~
Özellik etkinleştirildiğinde PowerShell, yerel komuta geçirilmeden önce tilde'yi genişletir.
PS> cmd.exe /c echo ~
C:\Users\username
Bu özellik yalnızca Windows için geçerlidir. Windows olmayan platformlarda tilde genişletmesi yerel olarak işlenir.
Bu özellik PowerShell 7.5-preview.2'ye eklendi.
PSSerializeJSONLongEnumAsNumber
Bu özellik, ConvertTo-Json cmdlet'inin bu sabit listesi değerinin dize gösterimi yerine sayısal bir değere göre veya UInt64/ulong
bu değere göre Int64/long
numaralandırma değerlerini seri hale getirmesini sağlar. Bu, numaralandırma serileştirme davranışını, cmdlet'in numaralandırmaları sayısal değerleri olarak serileştirdiği diğer sabit listesi temel türleriyle hizalar. Dize gösterimi olarak serileştirmek için EnumsAsStrings parametresini kullanın.
Örnek:
# PSSerializeJSONLongEnumAsNumber disabled
@{
Key = [System.Management.Automation.Tracing.PowerShellTraceKeywords]::Cmdlets
} | ConvertTo-Json
# { "Key": "Cmdlets" }
# PSSerializeJSONLongEnumAsNumber enabled
@{
Key = [System.Management.Automation.Tracing.PowerShellTraceKeywords]::Cmdlets
} | ConvertTo-Json
# { "Key": 32 }
# -EnumsAsStrings to revert back to the old behaviour
@{
Key = [System.Management.Automation.Tracing.PowerShellTraceKeywords]::Cmdlets
} | ConvertTo-Json -EnumsAsStrings
# { "Key": "Cmdlets" }
PowerShell