Delen via


Parametersets voor cmdlet

PowerShell maakt gebruik van parametersets zodat u één cmdlet kunt schrijven die verschillende acties voor verschillende scenario's kan uitvoeren. Met parametersets kunt u verschillende parameters aan de gebruiker blootstellen. En om verschillende informatie te retourneren op basis van de parameters die door de gebruiker zijn opgegeven.

Voorbeelden van parametersets

De PowerShell-cmdlet retourneert bijvoorbeeld verschillende informatie, afhankelijk van of de gebruiker de parameter List of Get-EventLog LogName opgeeft. Als de parameter List is opgegeven, retourneert de cmdlet informatie over de logboekbestanden zelf, maar niet de gebeurtenisgegevens die ze bevatten. Als de LogName parameter is opgegeven, de cmdlet retourneert informatie over de gebeurtenissen in een specifiek gebeurtenislogboek. De parameters List en LogName identificeren twee afzonderlijke parametersets.

Unieke parameter

Elke parameterset moet een unieke parameter hebben die de PowerShell-runtime gebruikt om de juiste parameterset weer te geven. Indien mogelijk moet de unieke parameter een verplichte parameter zijn. Wanneer een parameter verplicht is, moet de gebruiker de parameter opgeven en gebruikt de PowerShell-runtime die parameter om de parameterset te identificeren. De unieke parameter kan niet verplicht zijn als uw cmdlet is ontworpen om te worden uitgevoerd zonder parameters op te geven.

Meerdere parametersets

In de volgende afbeelding ziet u in de linkerkolom drie geldige parametersets. Parameter A is uniek voor de eerste parameterset, parameter B is uniek voor de tweede parameterset en parameter C is uniek voor de derde parameterset. In de rechterkolom hebben de parametersets geen unieke parameter.

Afbeelding van parametersets

Vereisten voor parameterset

De volgende vereisten zijn van toepassing op alle parametersets.

  • Elke parameterset moet ten minste één unieke parameter hebben. Maak van deze parameter indien mogelijk een verplichte parameter.

  • Een parameterset die meerdere positionele parameters bevat, moet unieke posities voor elke parameter definiëren. Geen twee positionele parameters kunnen dezelfde positie opgeven.

  • Slechts één parameter in een set kan het ValueFromPipeline trefwoord declareer met de waarde true . Meerdere parameters kunnen het ValueFromPipelineByPropertyName trefwoord definiëren met de waarde true .

  • Als er geen parameterset is opgegeven voor een parameter, behoort de parameter tot alle parametersets.

Notitie

Voor een cmdlet of functie geldt een limiet van 32 parametersets.

Standaardparametersets

Wanneer meerdere parametersets zijn gedefinieerd, kunt u het trefwoord van het DefaultParameterSetName kenmerk Cmdlet gebruiken om de standaardparameterset op te geven. PowerShell maakt gebruik van de standaardparameterset als deze niet kan bepalen welke parameterset moet worden gebruikt op basis van de informatie die door de opdracht wordt verstrekt. Zie Declaratie van cmdlet-kenmerken voor meer informatie over het kenmerk Cmdlet.

Parametersets declareren

Als u een parameterset wilt maken, moet u het trefwoord opgeven wanneer u het kenmerk Parameter declareer ParameterSetName voor elke parameter in de parameterset. Voor parameters die deel uitmaken van meerdere parametersets, voegt u een parameterkenmerk toe voor elke parameterset. Met dit kenmerk kunt u de parameter voor elke parameterset anders definiëren. U kunt bijvoorbeeld een parameter definiëren als verplicht in de ene set en optioneel in een andere. Elke parameterset moet echter één unieke parameter bevatten. Zie Declaratie van parameterkenmerken voor meer informatie.

In het volgende voorbeeld is de gebruikersnaam parameter is de unieke parameter van de parameterset en de Test01 ComputerName parameter is de unieke parameter van de Test02 parameterset. De parameter SharedParam behoort tot beide sets en is verplicht voor de Test01 parameterset, maar optioneel voor de Test02 parameterset.

[Parameter(Position = 0, Mandatory = true, ParameterSetName = "Test01")]
public string UserName
{
  get { return userName; }
  set { userName = value; }
}
private string userName;

[Parameter(Position = 0, Mandatory = true, ParameterSetName = "Test02")]
public string ComputerName
{
  get { return computerName; }
  set { computerName = value; }
}
private string computerName;

[Parameter(Mandatory= true, ParameterSetName = "Test01")]
[Parameter(ParameterSetName = "Test02")]
public string SharedParam
{
    get { return sharedParam; }
    set { sharedParam = value; }
}
private string sharedParam;