Aracılığıyla paylaş


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 , deneysel özelliğin PowerShell sürümünde kullanılabilir olduğunu gösterir
  • Simge Temel , deneysel özelliğin temel olduğu PowerShell sürümünü gösterir
  • Simge, Durduruldu deneysel özelliğin kaldırıldığı PowerShell sürümünü gösterir
Veri Akışı Adı 7.2 7.4 7.5 (önizleme)
PSCommandNotFoundSuggestion Deneysel Deneysel Temel
PSDesiredStateConfiguration.InvokeDscResource Deneysel Deneysel Deneysel
PSNativePSPathResolution Deneysel
PSSubsystemPluginModel Deneysel Deneysel Deneysel
PSNativeCommandArgumentPassing Deneysel
PSAnsiRenderingFileInfo Deneysel
PSLoadAssemblyFromNativeCode Deneysel Deneysel Deneysel
PSNativeCommandErrorActionPreference Temel
PSFeedbackProvider Deneysel Deneysel
PSModuleAutoLoadSkipOfflineFiles Deneysel Temel
PSCommandWithArgs Deneysel Temel
PSNativeWindowsTildeExpansion Deneysel
PSRedirectToVariable Deneysel
PSSerializeJSONLongEnumAsNumber Deneysel

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 pwshetkinleş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 , Standardve Windowsdeğ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 Standardolarak 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-Filedeğ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.dllalt 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" }