about_Experimental_Features

Podpora experimentálních funkcí v PowerShellu poskytuje mechanismus pro experimentální funkce, které spolu existují se stávajícími stabilními funkcemi v modulech PowerShellu nebo PowerShellu.

Experimentální funkce je jedna, kde návrh není finalizován. Tato funkce je dostupná pro uživatele, kteří můžou testovat a poskytovat zpětnou vazbu. Po dokončení experimentální funkce se změny návrhu stanou zásadními změnami. Experimentální funkce nejsou určeny k použití v produkčním prostředí, protože změny mohou být zásadní.

Experimentální funkce jsou ve výchozím nastavení zakázané a musí je explicitně povolit uživatel nebo správce systému.

Povolené experimentální funkce jsou uvedené v powershell.config.json souboru $PSHOME pro všechny uživatele nebo konfigurační soubor specifický pro konkrétního uživatele.

Poznámka:

Experimentální funkce povolené v konfiguračním souboru uživatele mají přednost před experimentálními funkcemi uvedenými v konfiguračním souboru systému.

Experimentální atribut

Pomocí atributu Experimental deklarujte nějaký kód jako experimentální.

Pomocí následující syntaxe deklarujte Experimental atribut, který obsahuje název experimentální funkce, a akci, která se má provést, pokud je povolená experimentální funkce:

[Experimental(NameOfExperimentalFeature, ExperimentAction)]

Pro moduly NameOfExperimentalFeature musí následovat forma <modulename>.<experimentname>. Parametr ExperimentAction musí být zadán a jediné platné hodnoty jsou:

  • Show znamená zobrazit tuto experimentální funkci, pokud je tato funkce povolená.
  • Hide znamená skrytí této experimentální funkce, pokud je tato funkce povolená.

Deklarace experimentálních funkcí v modulech napsaných v jazyce C#

Autoři modulů, kteří chtějí používat příznaky experimentální funkce, mohou deklarovat rutinu jako experimentální pomocí atributu Experimental .

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

Deklarace experimentálních funkcí v modulech napsaných v PowerShellu

Modul napsaný v PowerShellu může také pomocí atributu Experimental deklarovat experimentální rutiny:

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

Metadata o experimentální funkci se uchovávají v manifestu modulu. PrivateData.PSData.ExperimentalFeatures Pomocí vlastnosti manifestu modulu zpřístupněte experimentální funkce z modulu. Vlastnost ExperimentalFeatures je pole hashtable obsahující název a popis funkce.

Příklad:

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

Vzájemně se vylučují experimentální funkce

Existují případy, kdy experimentální funkce nemůže existovat souběžně s existující funkcí nebo jinou experimentální funkcí.

Můžete mít například experimentální rutinu, která přepíše existující rutinu. Obě verze nemůžou existovat vedle sebe. Nastavení ExperimentAction.Hide umožňuje povolení pouze jedné ze dvou rutin najednou.

V tomto příkladu vytvoříme novou experimentální Invoke-WebRequest rutinu. InvokeWebRequestCommand obsahuje nekonkuilní implementaci. InvokeWebRequestCommandV2 obsahuje experimentální verzi rutiny.

Použití ExperimentAction.Hide bude umožňovat povolení pouze jedné ze dvou funkcí najednou:

[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 Pokud je experimentální funkce povolena, stávající InvokeWebRequestCommand implementace je skrytá a InvokeWebRequestCommandV2 poskytuje implementaci Invoke-WebRequest.

To uživatelům umožňuje vyzkoušet novou rutinu a poskytnout zpětnou vazbu a v případě potřeby se vrátit k ne experimentální verzi.

Experimentální parametry v rutinách

Atribut Experimental lze také použít pro jednotlivé parametry. Díky tomu můžete vytvořit experimentální sadu parametrů pro existující rutinu, nikoli zcela novou rutinu.

Tady je příklad v jazyce C#:

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

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

Tady je jiný příklad ve skriptu PowerShellu:

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

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

Kontrola, jestli je povolená experimentální funkce

V kódu budete muset před provedením odpovídající akce zkontrolovat, jestli je vaše experimentální funkce povolená. Pomocí statické IsEnabled() metody ve System.Management.Automation.ExperimentalFeature třídě můžete určit, jestli je povolená experimentální funkce.

Tady je příklad v jazyce C#:

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

Tady je příklad ve skriptu PowerShellu:

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

Viz také