PowerShell'de Deneysel Özellikleri Kullanma
PowerShell'de Deneysel Özellikler desteği, deneysel özelliklerin PowerShell veya PowerShell modüllerinin mevcut kararlı özellikleriyle bir arada var olması için bir mekanizma sağlar.
Deneysel bir özellik, tasarımın kesin hale getirildiklerinden biri değildir. Bu özellik, kullanıcıların test etmek ve geri bildirim sağlamak için kullanılabilir. Deneysel bir özellik son haline getirildiktan sonra tasarım değişiklikleri yeni değişikliklere dönüşer.
Dikkat
Deneysel özelliklerin üretimde kullanılmaya yönelik bir amacı yok çünkü değişikliklerin bozmasına izin veriliyor. Deneysel özellikler resmi olarak desteklanmaz. Ancak, geri bildirimleriniz ve hata raporlarınız için teşekkür ederiz. Sorunları kaynak deposunda GitHub açabilirsiniz.
Bu özellikleri etkinleştirme veya devre dışı bırakma hakkında daha fazla bilgi için bkz. about_Experimental_Features.
Kullanılabilir özellikler
Bu makalede, kullanılabilir deneysel özellikler ve özelliğin nasıl kullanımı açıklanmıştır.
Gösterge
- ✔️ - deneysel özelliğin PowerShell sürümünde kullanılabilir olduğunu gösterir
- ✅ - deneysel özelliğin temel hale geldi olduğu PowerShell sürümünü gösterir
- ❌ - Deneysel özelliğin kaldırıldığı PowerShell sürümünü gösterir
| Name | 7.0 | 7.1 | 7.2 |
|---|---|---|---|
| PSNullConditionalOperators | ✔️ | ✅ | |
| PSUnixFileStat (yalnızca Windows olmayan) | ✔️ | ✔️ | ✅ |
| Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace | ✔️ | ✔️ | ✅ |
| PSCultureInvariantReplaceOperator | ✔️ | ✅ | |
| PSNotApplyErrorActionToStderr | ✔️ | ✅ | |
| PSImplicitRemotingBatching | ✔️ | ✔️ | ❌ |
| PSCommandNotFoundSuggestion | ✔️ | ✔️ | ✔️ |
| PSDesiredStateConfiguration.InvokeDscResource | ✔️ | ✔️ | ✔️ |
| PSNativePSPathResolution | ✔️ | ✔️ | |
| PSSubsystemPluginModel | ✔️ | ✔️ | |
| PSNativeCommandArgumentPassing | ✔️ | ||
| PSAnsiRenderingFileInfo | ✔️ | ||
| PSLoadAssemblyFromNativeCode | ✔️ |
Microsoft.PowerShell.Utility.PSManageBreakpointsInRunspace
Not
Bu özellik, PowerShell 7.2'de temel hale geldi.
PowerShell 7.0'da deneme, ve cmdlet'leri üzerinde BreakAll parametresini kullanarak kullanıcıların hata ayıklayıcı ekleyirken Debug-Runspace PowerShell'in geçerli konumda hemen kesmesine karar vermelerini Debug-Job sağlar.
Bu deneme, PowerShell 7.1'de cmdlet'lere Runspace *-PSBreakpoint parametresini de ekler.
Disable-PSBreakpointEnable-PSBreakpointGet-PSBreakpointRemove-PSBreakpointSet-PSBreakpoint
Runspace parametresi, belirtilen çalışma alanı içinde kesme noktalarıyla etkileşim kurmak için bir Runspace nesnesi belirtir.
Start-Job -ScriptBlock {
Set-PSBreakpoint -Command Start-Sleep
Start-Sleep -Seconds 10
}
$runspace = Get-Runspace -Id 1
$breakpoint = Get-PSBreakPoint -Runspace $runspace
Bu örnekte, bir iş başlatıldı ve çalıştırılana kadar kesme noktası kesme Set-PSBreakPoint noktası olarak ayarlanmış. Runspace bir değişkende depolanır ve Get-PSBreakPoint Runspace parametresiyle komutuna geçirildi. Daha sonra kesme noktası değişkenini $breakpoint incelersiniz.
PSAnsiRenderingFileInfo
Bu deneme PowerShell 7.2'ye eklenmiştir. Bu özellik, $PSStyle.FileInfo üyesini ekler ve belirli dosya türlerinin renklendirmesine olanak sağlar.
$PSStyle.FileInfo.Directory- Dizinlerin rengini belirtmek için yerleşik üye$PSStyle.FileInfo.SymbolicLink- Sembolik bağlantıların rengini belirtmek için yerleşik üye$PSStyle.FileInfo.Executable- Yürütülebilir dosyalar için renk belirtmek için 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.
Not
Bu özelliği kullanmak için PSAnsiRendering deneysel özelliğini etkinleştirmeniz gerekir.
PSCommandNotFoundSuggestion
CommandNotFoundException sonrasında belirsiz eşleştirme aramalarına göre olası komutların önerilmez.
PS> get
get: The term 'get' is not 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.
PSCultureInvariantReplaceOperator
bir işleç deyiminde sol işlenen bir -replace dize değilken, bu işlenen bir dizeye dönüştürülür.
Bu özellik devre dışı bırakılmıştır, -replace işleci kültüre duyarlı bir dize dönüştürmesi yapar.
Örneğin, kültürünüz Fransızca (fr) olarak ayarlanırsa 1.2 değer dizesine 1,2 dönüştürülür.
PS> [cultureinfo]::CurrentCulture = 'fr'
PS> 1.2 -replace ','
12
PS> [cultureinfo]::CurrentCulture = 'en'
PS> 1.2 -replace ','
1.2
Özellik etkinleştirildiğinde:
PS> [cultureinfo]::CurrentCulture = 'fr'
PS> 1.2 -replace ','
1.2
PSDesiredStateConfiguration.InvokeDscResource
Özel olmayan sistemlerde MOF'Windows ve LCM olmadan Invoke-DSCResource kullanımını sağlar.
PowerShell 7.2'nin önceki önizleme sürümlerinde bu özellik varsayılan olarak etkindi. PowerShell 7.2-preview7'den itibaren PSDesiredStateConfiguration modülü kaldırıldı ve bu özellik varsayılan olarak devre dışı bırakıldı. Bu özelliği etkinleştirmek için, dosyadan PSDesiredStateConfiguration v2.0.5 modülünü yüklemeniz PowerShell Galerisi kullanarak özelliği etkinleştirmeniz Enable-ExperimentalFeature gerekir.
PSImplicitRemotingBatching
Not
Bu deneysel özellik PowerShell 7.2'de kaldırıldı ve artık desteklenmiyor.
Bu özellik, kabukta türe sahip komutu inceler ve tüm komutlar basit bir işlem hattına sahip olan örtülü uzaktan uzaktan bağlantı proxy komutları ise komutlar bir araya toparak tek bir uzak işlem hattı olarak çağrılır.
Örnek:
# Create remote session and import TestIMod module
$s = nsn -host remoteMachine
icm $s { ipmo 'C:\Users\user\Documents\WindowsPowerShell\Modules\TestIMod\TestIMod.psd1' }
Import-PSSession $s -mod testimod
$maxProcs = 1000
$filter = 'pwsh','powershell*','wmi*'
# Without batching, this pipeline takes approximately 12 seconds to run
Measure-Command { Get-AllProcesses -MaxCount $maxProcs | Select-Custom $filter | Group-Stuff $filter }
Days : 0
Hours : 0
Minutes : 0
Seconds : 12
Milliseconds : 463
# But with the batching experimental feature enabled, it takes approximately 0.20 seconds
Measure-Command { Get-AllProcesses -MaxCount $maxProcs | Select-Custom $filter | Group-Stuff $filter }
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 209
Yukarıda da olduğu gibi, toplu işlem özelliği etkinken, üç örtülü uzaktan uzaktan bağlantı proxy komutu da uzak oturumda çalışır ve işlem hattından elde edilen sonuç istemciye döndürülen tek Get-AllProcesses Select-Custom Group-Stuff veridir. Bu, istemci ile uzak oturum arasında geri gönderilen veri miktarını azaltır ve ayrıca nesne serileştirme ve serileştirmeyi geri getirme miktarını azaltır.
PSLoadAssemblyFromNativeCode
Yerel koddan derleme yüklemeye izin vermek için bir API sunar.
Psnativecommandargumentgeçirmeden
Bu deneysel özellik etkin olduğunda PowerShell, ArgumentList StartProcessInfo yerel bir yürütülebilir dosyayı çağırırken bir dizeyi yeniden oluşturmak için geçerli olan mekanizmamız yerine nesnesinin özelliğini kullanır.
Dikkat
Yeni davranış, geçerli davranıştaki bir Son değişiklik . Bu, yerel uygulamalar çağrılırken çeşitli sorunlar etrafında çalışan betikleri ve Otomasyonu bozabilir. Tarihsel olarak, tekliflerin kaçış olmalıdır ve yerel bir uygulamaya boş bağımsız değişkenler sağlanması mümkün değildir.
Bu özellik $PSNativeCommandArgumentPassing , çalışma zamanında davranışı seçmenize olanak sağlayan yeni bir otomatik değişken ekler. Geçerli değerler Legacy , ve ' dir Standard Windows . Legacy geçmiş davranıştır. Deneysel özellik etkinleştirildiğinde varsayılan değer yeni Standard davranıştır.
Tercih değişkeni olarak ayarlandığında Windows , aşağıdaki dosyaların etkinleştirmeleri, Legacy geçirilen stil bağımsız değişkenini otomatik olarak kullanır.
cmd.execscript.exewscript.exe- şununla biter
.bat - şununla biter
.cmd - şununla biter
.js - şununla biter
.vbs - şununla biter
.wsf
$PSNativeArgumentPassingYa da veya olarak ayarlandıysa Legacy Standard , bu dosyalar için denetim gerçekleşmez. Varsayılan davranış platforma özgüdür. Windows platformlarda varsayılan ayar Windows ve Windows olmayan platformlardır Standard .
Bu değişiklik tarafından sunulan yeni davranışlar:
Katıştırılmış tekliflerle değişmez değer veya Genişletilebilir dizeler, tırnak işaretleri artık korunur:
PS > $a = 'a" "b' PS > $PSNativeCommandArgumentPassing = "Legacy" PS > testexe -echoargs $a 'a" "b' a" "b Arg 0 is <a b> Arg 1 is <a b> Arg 2 is <a b> PS > $PSNativeCommandArgumentPassing = "Standard" PS > testexe -echoargs $a 'a" "b' a" "b Arg 0 is <a" "b> Arg 1 is <a" "b> Arg 2 is <a b>Bağımsız değişken olarak boş dizeler artık korunuyor:
PS> $PSNativeCommandArgumentPassing = "Legacy" PS> testexe -echoargs '' a b '' Arg 0 is <a> Arg 1 is <b> PS> $PSNativeCommandArgumentPassing = "Standard" PS> testexe -echoargs '' a b '' Arg 0 is <> Arg 1 is <a> Arg 2 is <b> Arg 3 is <>
Yeni davranış şuna benzer olan çağırmaları değiştirmez:
PS> $PSNativeCommandArgumentPassing = "Legacy"
PS> testexe -echoargs -k com:port=\\devbox\pipe\debug,pipe,resets=0,reconnect
Arg 0 is <-k>
Arg 1 is <com:port=\\devbox\pipe\debug,pipe,resets=0,reconnect>
PS> $PSNativeCommandArgumentPassing = "Standard"
PS> testexe -echoargs -k com:port=\\devbox\pipe\debug,pipe,resets=0,reconnect
Arg 0 is <-k>
Arg 1 is <com:port=\\devbox\pipe\debug,pipe,resets=0,reconnect>
Ayrıca, parametre izleme artık sağlanmıştır, Trace-Command hata ayıklama için yararlı bilgiler sağlar.
PS> $PSNativeCommandArgumentPassing = "Legacy"
PS> trace-command -PSHOST -Name ParameterBinding { testexe -echoargs $a 'a" "b' a" "b }
DEBUG: 2021-02-01 17:19:53.6438 ParameterBinding Information: 0 : BIND NAMED native application line args [/Users/james/src/github/forks/jameswtruher/PowerShell-1/test/tools/TestExe/bin/testexe]
DEBUG: 2021-02-01 17:19:53.6440 ParameterBinding Information: 0 : BIND argument [-echoargs a" "b a" "b "a b"]
DEBUG: 2021-02-01 17:19:53.6522 ParameterBinding Information: 0 : CALLING BeginProcessing
Arg 0 is <a b>
Arg 1 is <a b>
Arg 2 is <a b>
PS> $PSNativeCommandArgumentPassing = "Standard"
PS> trace-command -PSHOST -Name ParameterBinding { testexe -echoargs $a 'a" "b' a" "b }
DEBUG: 2021-02-01 17:20:01.9829 ParameterBinding Information: 0 : BIND NAMED native application line args [/Users/james/src/github/forks/jameswtruher/PowerShell-1/test/tools/TestExe/bin/testexe]
DEBUG: 2021-02-01 17:20:01.9829 ParameterBinding Information: 0 : BIND cmd line arg [-echoargs] to position [0]
DEBUG: 2021-02-01 17:20:01.9830 ParameterBinding Information: 0 : BIND cmd line arg [a" "b] to position [1]
DEBUG: 2021-02-01 17:20:01.9830 ParameterBinding Information: 0 : BIND cmd line arg [a" "b] to position [2]
DEBUG: 2021-02-01 17:20:01.9831 ParameterBinding Information: 0 : BIND cmd line arg [a b] to position [3]
DEBUG: 2021-02-01 17:20:01.9908 ParameterBinding Information: 0 : CALLING BeginProcessing
Arg 0 is <a" "b>
Arg 1 is <a" "b>
Arg 2 is <a b>
PSNativePSPathResolution
Dosya sistemi sağlayıcısını kullanan bir PSDrive yolu yerel bir komuta geçirilirse, çözümlenmiş dosya yolu yerel komuta geçirilir. Bu, code temp:/test.txt artık beklenen şekilde çalışması gibi bir komut anlamına gelir.
ayrıca, Windows, yolu ile başlıyorsa ~ , tam yola çözülür 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) değilse yol normalleştirme gerçekleşmez - Yol tek tekliflerde değilse, çözümlenmez ve değişmez değer olarak kabul edilir
PSNotApplyErrorActionToStderr
Bu deneysel özellik etkinleştirildiğinde, yeniden yönlendirme işleçleri () kullanılırken olduğu gibi yerel komutlardan yeniden yönlendirilen hata kayıtları 2>&1 $Error değişkenine yazılmaz ve tercih değişkeni $ErrorActionPreference yeniden yönlendirilen çıktıyı etkilemez.
Birçok yerel komut, stderr ek bilgi için alternatif bir akış olarak yazar. Bu davranış, hataları ortaya arayarak karışıklıklara neden olabilir veya $ErrorActionPreference çıktıyı atan bir duruma ayarlanırsa ek çıkış bilgileri kullanıcıya kaybolabilir.
Yerel bir komutun sıfır olmayan bir çıkış kodu olduğunda, $? olarak ayarlanır $false . Çıkış kodu sıfırsa, $? olarak ayarlanır $true .
PSNullConditionalOperators
Null koşullu üye erişim işleçleri için yeni işleçler tanıtır- ?. ve ?[] . Boş üye erişim işleçleri, skaler türlerde ve dizi türlerinde kullanılabilir. Değişken null değilse, erişilen üyenin değerini döndürün. Değişkenin değeri null ise null değerini döndürür.
$x = $null
${x}?.propname
${x?}?.propname
${x}?[0]
${x?}?[0]
${x}?.MyMethod()
Özelliğine propname erişilir ve değeri yalnızca $x null değilse döndürülür. Benzer şekilde, Dizin Oluşturucu yalnızca $x null değilse kullanılır. $xNull ise null döndürülür.
?.Ve ?[] işleçleri üye erişim işleçleridir ve değişken adı ile işleci arasında boşluk kullanılmasına izin vermez.
PowerShell, ? değişken adının bir parçası olarak izin verdiğinden, işleçler değişken adı ve işleç arasında boşluk olmadan kullanıldığında Kesinleştirme gerekir. Belirsizliği ortadan kaldırmak için, değişkenlerin {} şunun gibi değişken adı etrafında kullanılması gerekir: ${x?}?.propertyName veya ${y}?[0] .
Not
Bu özellik deneysel aşamanın dışına geçmiştir ve PowerShell 7,1 ve üzeri sürümlerde temel bir özelliktir.
PSUnixFileStat
Bu özellik, UNIX stat API 'sinden veri ekleyerek UNIX benzeri daha fazla dosya listesi sağlar. UNIX API 'sinden bilgi işleme içeren Unixstat adlı dosya sistemi sağlayıcısına yeni bir Note özelliği ekler stat(2) .
Çıkışı aşağıdakine Get-ChildItem benzer görünmelidir:
dir | select -first 4 -skip 5
Directory: /Users/jimtru/src/github/forks/JamesWTruher/PowerShell-1
UnixMode User Group LastWriteTime Size Name
-------- ---- ----- ------------- ---- ----
drwxr-xr-x jimtru staff 10/23/2019 13:16 416 test
drwxr-xr-x jimtru staff 11/8/2019 10:37 896 tools
-rw-r--r-- jimtru staff 11/8/2019 10:37 112858 build.psm1
-rw-r--r-- jimtru staff 11/8/2019 10:37 201297 CHANGELOG.md
Not
Bu özellik deneysel aşamanın dışına geçmiştir ve PowerShell 7,1 ve üzeri sürümlerde temel bir özelliktir.
PSSubsystemPluginModel
Bu özellik, PowerShell 'de alt sistem eklentisi modelini sunar. Özelliği, bileşenlerini System.Management.Automation.dll kendi derlemelerinde bulunan tek tek alt sistemlere ayırmak mümkün hale getirir. Bu ayrım, çekirdek PowerShell altyapısının disk parmak izini azaltır ve bu bileşenlerin en az bir PowerShell yüklemesi için isteğe bağlı özellikler olmasına olanak sağlar.
Şu anda yalnızca Commandpredictor alt sistemi destekleniyor. Bu alt sistem, özel tahmin eklentileri sağlamak için PSReadLine modülü ile birlikte kullanılır. Gelecekte, iş, komutsuz ter, Uzaktan iletişim ve diğer bileşenler dışında alt sistem derlemelerine ayrılabilir System.Management.Automation.dll .
Deneysel özellik, Get-PSSubsystemyeni bir cmdlet 'i içerir. Bu cmdlet yalnızca özellik etkin olduğunda kullanılabilir. Bu cmdlet, sistemde kullanılabilen alt sistemler hakkındaki bilgileri döndürür.