Megosztás a következőn keresztül:


about_Experimental_Features

A PowerShell kísérleti funkcióinak támogatása olyan mechanizmust biztosít, amely lehetővé teszi, hogy a kísérleti funkciók együtt létezhessenek a PowerShell vagy a PowerShell-modulok meglévő stabil funkcióival.

A kísérleti funkció az, ahol a terv nem véglegesítve van. A funkció a felhasználók számára elérhető, hogy teszteljék és visszajelzést adjanak. A kísérleti funkciók véglegesítése után a tervezési módosítások kompatibilitástörő változásokká válnak. A kísérleti funkciók nem használhatók éles környezetben, mivel a módosítások kompatibilitástörőek lehetnek.

A kísérleti funkciók alapértelmezés szerint le vannak tiltva, és kifejezetten engedélyeznie kell a rendszer felhasználójának vagy rendszergazdájának.

Az engedélyezett kísérleti funkciók az powershell.config.json$PSHOME fájljában, illetve egy adott felhasználó felhasználóspecifikus konfigurációs fájljában jelennek meg.

Jegyzet

A felhasználói konfigurációs fájlban engedélyezett kísérleti funkciók elsőbbséget élveznek a rendszerkonfigurációs fájlban felsorolt kísérleti funkciókkal szemben.

A kísérleti attribútum

A Experimental attribútummal deklarálhat néhány kódot kísérletiként.

Az alábbi szintaxissal deklarálhatja a kísérleti funkció nevét tartalmazó Experimental attribútumot, valamint a kísérleti funkció engedélyezése esetén végrehajtandó műveletet:

[Experimental(NameOfExperimentalFeature, ExperimentAction)]

Modulok esetében a NameOfExperimentalFeature a <modulename>.<experimentname>formáját kell követnie. Meg kell adni a ExperimentAction paramétert, és az egyetlen érvényes érték a következő:

  • Show a kísérleti funkció megjelenítését jelenti, ha a funkció engedélyezve van
  • Hide azt jelenti, hogy elrejti ezt a kísérleti funkciót, ha a funkció engedélyezve van

Kísérleti funkciók deklarálása c nyelven írt modulokban#

A kísérleti funkciók jelzőit használni kívánó modulszerzők a Experimental attribútum használatával kísérletiként deklarálhatnak egy parancsmagot.

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

Kísérleti funkciók deklarálása PowerShell-ben írt modulokban

A PowerShellben írt modul a Experimental attribútummal is deklarálhatja a kísérleti parancsmagokat:

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

A kísérleti funkciók metaadatai a moduljegyzékben maradnak. A moduljegyzék PrivateData.PSData.ExperimentalFeatures tulajdonságával tegye közzé a modul kísérleti funkcióit. A ExperimentalFeatures tulajdonság a funkció nevét és leírását tartalmazó kivonattáblák tömbje.

Például:

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

Kölcsönösen kizáró kísérleti funkciók

Vannak olyan esetek, amikor egy kísérleti funkció nem létezhet egymás mellett egy meglévő funkcióval vagy egy másik kísérleti funkcióval.

Létrehozhat például egy kísérleti parancsmagot, amely felülír egy meglévő parancsmagot. A két verzió nem létezhet egymás mellett. A ExperimentAction.Hide beállítás lehetővé teszi, hogy egyszerre csak a két parancsmag egyike legyen engedélyezve.

Ebben a példában létrehozunk egy új kísérleti Invoke-WebRequest parancsmagot. InvokeWebRequestCommand tartalmazza a nem kísérleti megvalósítást. InvokeWebRequestCommandV2 a parancsmag kísérleti verzióját tartalmazza.

A ExperimentAction.Hide használata egyszerre csak a két funkció egyikének engedélyezését teszi lehetővé:

[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 { ... }

Ha a MyWebCmdlets.PSWebCmdletV2 kísérleti funkció engedélyezve van, a meglévő InvokeWebRequestCommand implementáció rejtett, és a InvokeWebRequestCommandV2 biztosítja a Invoke-WebRequestimplementálását.

Ez lehetővé teszi, hogy a felhasználók kipróbálják az új parancsmagot, és visszajelzést adjanak, majd szükség esetén térjenek vissza a nem kísérleti verzióra.

Kísérleti paraméterek a parancsmagokban

A Experimental attribútum egyes paraméterekre is alkalmazható. Ez lehetővé teszi, hogy egy teljesen új parancsmag helyett egy meglévő parancsmaghoz hozzon létre egy kísérleti paraméterkészletet.

Íme egy példa a C#-ban:

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

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

Íme egy másik példa a PowerShell-szkriptben:

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

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

Annak ellenőrzése, hogy engedélyezve van-e egy kísérleti funkció

A kódban a megfelelő művelet végrehajtása előtt ellenőriznie kell, hogy engedélyezve van-e a kísérleti funkció. Megállapíthatja, hogy egy kísérleti funkció engedélyezve van-e a IsEnabled() osztály statikus System.Management.Automation.ExperimentalFeature metódusával.

Íme egy példa a C#-ban:

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

Íme egy példa a PowerShell-szkriptben:

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

Lásd még