Sdílet prostřednictvím


informace_o_Experimentálních_Funkcích

Podpora experimentálních funkcí v PowerShellu poskytuje mechanismus pro experimentální funkce, které mohou existovat současně se stávajícími stabilními funkcemi v PowerShellu nebo modulech 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 uvedeny v souboru powershell.config.json v $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 kód jako experimentální.

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

[Experimental(NameOfExperimentalFeature, ExperimentAction)]

U modulů musí NameOfExperimentalFeature dodržovat formu <modulename>.<experimentname>. Parametr ExperimentAction musí být zadán a jedinými platnými hodnotami 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é použít atribut Experimental k deklaraci experimentálních rutin:

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

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

Napří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í.

Například můžete mít experimentální cmdlet, který přepíše existující cmdlet. 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 ne experimentální implementaci. InvokeWebRequestCommandV2 obsahuje experimentální verzi cmdletu.

Použití ExperimentAction.Hide umožní 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 { ... }

Pokud je povolena MyWebCmdlets.PSWebCmdletV2 experimentální funkce, stávající implementace InvokeWebRequestCommand 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 použít také u jednotlivých parametrů. 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í metody statického IsEnabled() ve třídě System.Management.Automation.ExperimentalFeature 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é