Parancsmagok dinamikus paraméterei

A parancsmagok olyan paramétereket határozhatnak meg, amelyek speciális feltételek mellett érhetők el a felhasználó számára, például ha egy másik paraméter argumentuma egy adott érték. Ezek a paraméterek futásidőben vannak hozzáadva, és dinamikus paramétereknek nevezzük őket, mert csak szükség esetén kerülnek hozzáadásra. Például olyan parancsmagot tervezhet, amely csak akkor ad hozzá több paramétert, ha meg van adva egy adott kapcsolóparaméter.

Megjegyzés

A szolgáltatók és a PowerShell-függvények dinamikus paramétereket is meghatároznak.

Dinamikus paraméterek a PowerShell-parancsmagokban

A PowerShell számos szolgáltatói parancsmagban dinamikus paramétereket használ. Például a és a parancsmag hozzáad egy Get-Item Get-ChildItem CodeSigningCert paramétert futásidőben, amikor a Path paraméter megadja a tanúsítványszolgáltató elérési útját. Ha a Path paraméter egy másik szolgáltató elérési útját adja meg, a CodeSigningCert paraméter nem érhető el.

Az alábbi példák bemutatják, hogyan történik a CodeSigningCert paraméter hozzáadása futásidőben Get-Item futtatáskor.

Ebben a példában a PowerShell-futtatás hozzáadta a paramétert, és a parancsmag futtatása sikeres volt.

Get-Item -Path cert:\CurrentUser -CodeSigningCert
Location   : CurrentUser
StoreNames : {SmartCardRoot, UserDS, AuthRoot, CA...}

Ebben a példában egy Fájlrendszer meghajtó van megadva, és hibát ad vissza. A hibaüzenet azt jelzi, hogy a CodeSigningCert paraméter nem található.

Get-Item -Path C:\ -CodeSigningCert
Get-Item : A parameter cannot be found that matches parameter name 'codesigningcert'.
At line:1 char:37
+  get-item -path C:\ -codesigningcert <<<<
--------
    CategoryInfo          : InvalidArgument: (:) [Get-Item], ParameterBindingException
    FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetItemCommand

Dinamikus paraméterek támogatása

A dinamikus paraméterek támogatásához a következő elemeket kell tartalmaznia a parancsmag kódban.

Interfész

System.Management.Automation.IDynamicParameters. Ez az interfész biztosítja a dinamikus paramétereket lekért metódust.

Például:

public class SendGreetingCommand : Cmdlet, IDynamicParameters

Metódus

System.Management.Automation.IDynamicParameters.GetDynamicParameters. Ez a metódus lekéri a dinamikus paraméterdefiníciókat tartalmazó objektumot.

Például:

 public object GetDynamicParameters()
 {
   if (employee)
   {
     context= new SendGreetingCommandDynamicParameters();
     return context;
   }
   return null;
}
private SendGreetingCommandDynamicParameters context;

Osztály

Egy osztály, amely meghatározza a hozzáadható dinamikus paramétereket. Ennek az osztálynak tartalmaznia kell egy Paraméter attribútumot minden paraméterhez, valamint az esetlegesen szükséges Alias és Validation attribútumokat, amelyekre a parancsmagnak szüksége van.

Például:

public class SendGreetingCommandDynamicParameters
{
  [Parameter]
  [ValidateSet ("Marketing", "Sales", "Development")]
  public string Department
  {
    get { return department; }
    set { department = value; }
  }
  private string department;
}

A dinamikus paramétereket támogató parancsmagok teljes példáját lásd: Dinamikus paraméterek deklarálása.

Lásd még

System.Management.Automation.IDynamicParameters

System.Management.Automation.IDynamicParameters.GetDynamicParameters

Dinamikus paraméterek deklarálása

Windows PowerShell-parancsmag írása