about_Experimental_Features

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ılmamasıdır. 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. Değişikliklerin bozulmasına izin verildiğinden deneysel özelliklerin üretimde kullanılması amaçlanmamıştır.

Deneysel özellikler varsayılan olarak devre dışı bırakılır ve sistemin kullanıcısı veya yöneticisi tarafından açıkça etkinleştirilmesi gerekir.

Etkin deneysel özellikler, içindeki dosyasında $PSHOME tüm kullanıcılar için veya belirli bir kullanıcının kullanıcıya özgü yapılandırma dosyasında listelenirpowershell.config.json.

Not

Kullanıcı yapılandırma dosyasında etkinleştirilen deneysel özellikler, sistem yapılandırma dosyasında listelenen deneysel özelliklerden önceliklidir.

Deneysel Öznitelik

Experimental Bazı kodları deneysel olarak bildirmek için özniteliğini kullanın.

Deneysel özelliğin Experimental adını ve deneysel özellik etkinse gerçekleştirecek eylemi sağlayan özniteliği bildirmek için aşağıdaki söz dizimini kullanın:

[Experimental(NameOfExperimentalFeature, ExperimentAction)]

Modüller için biçiminde NameOfExperimentalFeature olması <modulename>.<experimentname>gerekir. ExperimentAction parametresi belirtilmelidir ve yalnızca geçerli değerler şunlardır:

  • Show , özellik etkinse bu deneysel özelliği göstermek anlamına gelir
  • Hide bu deneysel özelliğin etkin olması durumunda gizlenmek anlamına gelir

C Dilinde Yazılan Modüllerde Deneysel Özellikleri Bildirme#

Deneysel Özellik bayraklarını kullanmak isteyen modül yazarları, özniteliğini kullanarak bir cmdlet'i Experimental deneysel olarak bildirebilir.

[Experimental("MyWebCmdlets.PSWebCmdletV2", ExperimentAction.Show)]
[Cmdlet(Verbs.Invoke, "WebRequest")]
public class InvokeWebRequestCommandV2 : WebCmdletBaseV2 { ... }

PowerShell'de yazılan Modüllerde Deneysel Özellikleri Bildirme

PowerShell'de yazılan modül, deneysel cmdlet'leri bildirmek için özniteliğini de kullanabilir Experimental :

function Enable-SSHRemoting {
    [Experimental("MyRemoting.PSSSHRemoting", "Show")]
    [CmdletBinding()]
    param()
    ...
}

Deneysel bir özellik hakkındaki meta veriler modül bildiriminde tutulur. Modüldeki PrivateData.PSData.ExperimentalFeatures deneysel özellikleri kullanıma açmak için modül bildiriminin özelliğini kullanın. ExperimentalFeatures özelliği, özelliğin adını ve açıklamasını içeren bir karma tablo dizisidir.

Örneğin:

PrivateData = @{
  PSData = @{
    ExperimentalFeatures = @(
      @{
          Name = "PSWebCmdletV2"
          Description = "Rewrite the web cmdlets for better performance"
      },
      @{
          Name = "PSRestCmdletV2"
          Description = "Rewrite the REST API cmdlets for better performance"
      }
    )
  }
}

Birbirini Dışlayan Deneysel Özellikler

Deneysel bir özelliğin mevcut bir özellik veya başka bir deneysel özellik ile yan yana var olamayacağı durumlar vardır.

Örneğin, var olan bir cmdlet'i geçersiz kılan deneysel bir cmdlet'iniz olabilir. İki sürüm yan yana bir arada olamaz. Bu ExperimentAction.Hide ayar, iki cmdlet'in yalnızca birinin aynı anda etkinleştirilmesine izin verir.

Bu örnekte yeni bir deneysel Invoke-WebRequest cmdlet oluşturacağız. InvokeWebRequestCommand deneysel olmayan uygulamayı içerir. InvokeWebRequestCommandV2 cmdlet'in deneysel sürümünü içerir.

kullanımı ExperimentAction.Hide , iki özelliğin yalnızca birinin aynı anda etkinleştirilmesine izin verir:

[Experimental("MyWebCmdlets.PSWebCmdletV2", ExperimentAction.Show)]
[Cmdlet(Verbs.Invoke, "WebRequest")]
public class InvokeWebRequestCommandV2 : WebCmdletBaseV2 { ... }

[Experimental("MyWebCmdlets.PSWebCmdletV2", ExperimentAction.Hide)]
[Cmdlet(Verbs.Invoke, "WebRequest")]
public class InvokeWebRequestCommand : WebCmdletBase { ... }

MyWebCmdlets.PSWebCmdletV2 Deneysel özellik etkinleştirildiğinde, mevcut InvokeWebRequestCommand uygulama gizlenir InvokeWebRequestCommandV2 ve uygulaması Invoke-WebRequestsağlanır.

Bu, kullanıcıların yeni cmdlet'i denemesine ve geri bildirim sağlamasına ve gerektiğinde deneysel olmayan sürüme geri dönmelerine olanak tanır.

Cmdlet'lerde Deneysel Parametreler

Experimental Özniteliği tek tek parametrelere de uygulanabilir. Bu, tamamen yeni bir cmdlet yerine mevcut bir cmdlet için deneysel bir parametre kümesi oluşturmanıza olanak tanır.

C# dilinde bir örnek aşağıda verilmiştir:

[Experimental("MyModule.PSNewAddTypeCompilation", ExperimentAction.Show)]
[Parameter(ParameterSet = "NewCompilation")]
public CompilationParameters CompileParameters { ... }

[Experimental("MyModule.PSNewAddTypeCompilation", ExperimentAction.Hide)]
[Parameter()]
public CodeDom CodeDom { ... }

PowerShell betiğinde farklı bir örnek aşağıda verilmiştir:

param(
    [Experimental("MyModule.PSNewFeature", "Show")]
    [string] $NewName,

    [Experimental("MyModule.PSNewFeature", "Hide")]
    [string] $OldName
)

Deneysel Bir Özelliğin Etkin Olup Olmadığını Denetleme

Kodunuzda, uygun eylemi gerçekleştirmeden önce deneysel özelliğinizin etkinleştirilip etkinleştirilmediğini denetlemeniz gerekir. Deneysel bir özelliğin sınıftaki statik IsEnabled() yöntemi System.Management.Automation.ExperimentalFeature kullanarak etkinleştirilip etkinleştirilmediğini belirleyebilirsiniz.

C# dilinde bir örnek aşağıda verilmiştir:

if (ExperimentalFeature.IsEnabled("MyModule.MyExperimentalFeature"))
{
   // code specific to the experimental feature
}

PowerShell betiğinde bir örnek aşağıda verilmiştir:

if ([ExperimentalFeature]::IsEnabled("MyModule.MyExperimentalFeature"))
{
  # code specific to the experimental feature
}

Ayrıca bkz.