about_Parameters_Default_Values

Korte beschrijving

Beschrijft hoe u aangepaste standaardwaarden in kunt stellen voor cmdlet-parameters en geavanceerde functies.

Lange beschrijving

Met $PSDefaultParameterValues de voorkeursvariabele kunt u aangepaste standaardwaarden opgeven voor elke cmdlet of geavanceerde functie. Cmdlets en geavanceerde functies gebruiken de aangepaste standaardwaarde, tenzij u een andere waarde opgeeft in de opdracht .

De auteurs van cmdlets en geavanceerde functies stellen standaardwaarden in voor hun parameters. Normaal gesproken zijn de standaardwaarden nuttig, maar ze zijn mogelijk niet geschikt voor alle omgevingen.

Deze functie is vooral nuttig wanneer u vrijwel elke keer dat u de opdracht gebruikt dezelfde alternatieve parameterwaarde moet opgeven of wanneer een bepaalde parameterwaarde moeilijk te onthouden is, zoals een e-mailservernaam of project-GUID.

Als de gewenste standaardwaarde voorspelbaar varieert, kunt u een scriptblok opgeven met verschillende standaardwaarden voor een parameter onder verschillende voorwaarden.

$PSDefaultParameterValues is geïntroduceerd in PowerShell 3.0.

Syntax

De $PSDefaultParameterValues variabele is een hashtabel die de indeling van sleutels valideert als een objecttype van System.Management.Automation.DefaultParameterDictionary. De hashtabel bevat sleutel-waardeparen . Een sleutel heeft de indeling CmdletName:ParameterName. Een waarde is de DefaultValue of ScriptBlock die is toegewezen aan de sleutel.

De syntaxis van de voorkeursvariabele $PSDefaultParameterValues is als volgt:

$PSDefaultParameterValues=@{"CmdletName:ParameterName"="DefaultValue"}

$PSDefaultParameterValues=@{ "CmdletName:ParameterName"={{ScriptBlock}} }

$PSDefaultParameterValues["Disabled"]=$True | $False

Jokertekens zijn toegestaan in de waarden CmdletName en ParameterName .

Als u een specifiek sleutel-waardepaar wilt instellen, wijzigen, toevoegen of verwijderen uit $PSDefaultParameterValues, gebruikt u de methoden om een standaardhashtabel te bewerken. Bijvoorbeeld de methoden Toevoegen en Verwijderen. Met deze methoden worden andere waarden in de hashtabel niet overschreven.

Er is een andere syntaxis die een bestaande hashtabel $PSDefaultParameterValues niet overschrijft. Als u een specifiek sleutel-waardepaar wilt toevoegen of wijzigen, gebruikt u de volgende syntaxis:

$PSDefaultParameterValues["CmdletName:ParameterName"]="DefaultValue"

De CmdletName moet de naam zijn van een cmdlet of de naam van een geavanceerde functie die gebruikmaakt van het kenmerk CmdletBinding . U kunt niet gebruiken om standaardwaarden $PSDefaultParameterValues op te geven voor scripts of eenvoudige functies.

De DefaultValue kan een object of een scriptblok zijn. Als de waarde een scriptblok is, evalueert PowerShell het scriptblok en gebruikt het resultaat als parameterwaarde. Wanneer de opgegeven parameter een waarde voor een scriptblok accepteert, sluit u de waarde van het scriptblok in een tweede set accolades in, zoals:

$PSDefaultParameterValues=@{ "Invoke-Command:ScriptBlock"={{Get-Process}} }

Raadpleeg de volgende documenten voor meer informatie:

Voorbeelden

$PSDefaultParameterValues instellen

$PSDefaultParameterValues is een voorkeursvariabele, dus deze bestaat alleen in de sessie waarin deze is ingesteld. Deze heeft geen standaardwaarde.

Als u wilt $PSDefaultParameterValuesinstellen, typt u de naam van de variabele en een of meer sleutel/waarde-paren . Als u een andere opdracht $PSDefaultParameterValues uit te voeren, wordt de bestaande hash-tabel overschreven.

Zie How to add values to $PSDefaultParameterValues (Waarden toevoegen aan PSDefaultParameterValues) of How to change values in PSDefaultParameterValues (Waarden wijzigen in $PSDefaultParameterValues) voor voorbeelden over het wijzigen van sleutel-waardeparen zonder bestaande hash-tabelwaarden te overschrijven.

Als u wilt $PSDefaultParameterValues opslaan voor toekomstige sessies, voegt u een opdracht $PSDefaultParameterValues toe aan uw PowerShell-profiel. Zie voor meer informatie about_Profiles.

Een aangepaste standaardwaarde instellen

Het sleutel-waardepaar stelt de sleutel Send-MailMessage:SmtpServer in op een aangepaste standaardwaarde van Server123.

$PSDefaultParameterValues = @{
  "Send-MailMessage:SmtpServer"="Server123"
}

Standaardwaarden voor meerdere parameters instellen

Als u standaardwaarden voor meerdere parameters wilt instellen, scheidt u elk sleutel-waardepaar met een puntkomma (;). De Send-MailMessage:SmtpServer sleutels Get-WinEvent:LogName en zijn ingesteld op aangepaste standaardwaarden.

$PSDefaultParameterValues = @{
  "Send-MailMessage:SmtpServer"="Server123";
  "Get-WinEvent:LogName"="Microsoft-Windows-PrintService/Operational"
}

Jokertekens en schakelparameters gebruiken

De cmdlet en parameternamen kunnen jokertekens bevatten. Gebruik $True en om $False waarden in te stellen voor switchparameters, zoals Uitgebreid. De parameter Verbose van de algemene parameter is ingesteld op $True voor alle opdrachten.

$PSDefaultParameterValues = @{"*:Verbose"=$True}

Een matrix gebruiken voor de standaardwaarde

Als een parameter meerdere waarden kan accepteren, een matrix, kunt u meerdere waarden instellen als de standaardwaarden. De standaardwaarde van de Invoke-Command:ComputerName sleutel is ingesteld op een matrixwaarde van Server01 en Server02.

$PSDefaultParameterValues = @{
  "Invoke-Command:ComputerName"="Server01","Server02"
}

Een scriptblok gebruiken

U kunt een scriptblok gebruiken om verschillende standaardwaarden voor een parameter op te geven onder verschillende voorwaarden. PowerShell evalueert het scriptblok en gebruikt het resultaat als de standaardparameterwaarde.

Met Format-Table:AutoSize de sleutel wordt de parameter ingesteld op de standaardwaarde Waar. De If instructie bevat een voorwaarde dat de $host.Name de PowerShell-console, ConsoleHost, moet zijn.

$PSDefaultParameterValues=@{
  "Format-Table:AutoSize"={if ($host.Name -eq "ConsoleHost"){$True}}
}

Als een parameter een blokwaarde voor het script accepteert, sluit u het scriptblok in een extra set accolades. Wanneer PowerShell het buitenste scriptblok evalueert, is het resultaat het binnenste scriptblok en dat is ingesteld als de standaardparameterwaarde.

De Invoke-Command:ScriptBlock sleutel is ingesteld op een standaardwaarde van het gebeurtenislogboek van Systeem omdat het scriptblok tussen een tweede set accolades staat. Het resultaat van het scriptblok wordt doorgegeven aan de Invoke-Command cmdlet .

$PSDefaultParameterValues=@{
  "Invoke-Command:ScriptBlock"={{Get-EventLog -Log System}}
}

$PSDefaultParameterValues krijgen

De hash-tabelwaarden worden weergegeven door in te geven $PSDefaultParameterValues bij de PowerShell-prompt.

Een $PSDefaultParameterValues hash-tabel wordt ingesteld met drie sleutel-waardeparen . Deze hashtabel wordt gebruikt in de volgende voorbeelden waarin wordt beschreven hoe u waarden toevoegt, wijzigt en verwijdert uit $PSDefaultParameterValues.

PS> $PSDefaultParameterValues = @{
  "Send-MailMessage:SmtpServer"="Server123"
  "Get-WinEvent:LogName"="Microsoft-Windows-PrintService/Operational"
  "Get-*:Verbose"=$True
}

PS> $PSDefaultParameterValues

Name                           Value
----                           -----
Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
Get-*:Verbose                  True
Send-MailMessage:SmtpServer    Server123

Gebruik de volgende syntaxis om de waarde van CmdletName:ParameterName een specifieke sleutel op te halen:

$PSDefaultParameterValues["CmdletName:ParameterName"]

Bijvoorbeeld om de waarde voor de sleutel op te Send-MailMessage:SmtpServer halen.

PS> $PSDefaultParameterValues["Send-MailMessage:SmtpServer"]
Server123

Waarden toevoegen aan $PSDefaultParameterValues

Als u een waarde wilt toevoegen aan $PSDefaultParameterValues, gebruikt u de methode Add. Het toevoegen van een waarde heeft geen invloed op de bestaande waarden van de hashtabel.

Gebruik een komma (,) om de sleutel te scheiden van de Waarde. De volgende syntaxis laat zien hoe u de methode Add gebruikt voor $PSDefaultParameterValues.

PS> $PSDefaultParameterValues.Add("CmdletName:ParameterName", "DefaultValue")

De hash-tabel die in het vorige voorbeeld is gemaakt, wordt bijgewerkt met een nieuw sleutel-waardepaar . Met de methode Toevoegen stelt u de Get-Process:Name sleutel in op de waarde PowerShell.

$PSDefaultParameterValues.Add("Get-Process:Name", "PowerShell")

Met de volgende syntaxis wordt hetzelfde resultaat bereikt.

$PSDefaultParameterValues["Get-Process:Name"]="PowerShell"

De variabele $PSDefaultParameterValues geeft de bijgewerkte hash-tabel weer. De Get-Process:Name sleutel is toegevoegd.

PS> $PSDefaultParameterValues

Name                           Value
----                           -----
Get-Process:Name               PowerShell
Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
Get-*:Verbose                  True
Send-MailMessage:SmtpServer    Server123

Waarden verwijderen uit $PSDefaultParameterValues

Als u een waarde uit wilt verwijderen $PSDefaultParameterValues, gebruikt u de methode Remove van hashtabellen. Het verwijderen van een waarde heeft geen invloed op de bestaande waarden van de hashtabel.

De volgende syntaxis laat zien hoe u de methode Remove gebruikt op $PSDefaultParameterValues.

PS> $PSDefaultParameterValues.Remove("CmdletName:ParameterName")

In dit voorbeeld wordt de hashtabel die in het vorige voorbeeld is gemaakt, bijgewerkt om een sleutel-waardepaar te verwijderen. Met de methode Remove wordt de sleutel Get-Process:Name verwijderd.

$PSDefaultParameterValues.Remove("Get-Process:Name")

De variabele $PSDefaultParameterValues geeft de bijgewerkte hash-tabel weer. De Get-Process:Name sleutel is verwijderd.

PS> $PSDefaultParameterValues

Name                           Value
----                           -----
Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
Get-*:Verbose                  True
Send-MailMessage:SmtpServer    Server123

Waarden wijzigen in $PSDefaultParameterValues

Wijzigingen in een specifieke waarde hebben geen invloed op bestaande hash-tabelwaarden. Als u een specifiek sleutel-waardepaar in wilt wijzigen, $PSDefaultParameterValuesgebruikt u de volgende syntaxis:

PS> $PSDefaultParameterValues["CmdletName:ParameterName"]="DefaultValue"

In dit voorbeeld wordt de hashtabel die in het vorige voorbeeld is gemaakt, bijgewerkt om een sleutel-waardepaar te wijzigen. Met de volgende opdracht wordt de Send-MailMessage:SmtpServer sleutel gewijzigd in een nieuwe waarde van ServerXYZ.

$PSDefaultParameterValues["Send-MailMessage:SmtpServer"]="ServerXYZ"

De variabele $PSDefaultParameterValues geeft de bijgewerkte hash-tabel weer. De Send-MailMessage:SmtpServer sleutel is gewijzigd in een nieuwe waarde.

PS> $PSDefaultParameterValues

Name                           Value
----                           -----
Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
Get-*:Verbose                  True
Send-MailMessage:SmtpServer    ServerXYZ

$PSDefaultParameterValues uitschakelen en opnieuw inschakelen

U kunt tijdelijk uitschakelen en vervolgens opnieuw inschakelen $PSDefaultParameterValues. Uitschakelen is handig $PSDefaultParameterValues als u scripts gebruikt die verschillende standaardparameterwaarden nodig hebben.

Als u wilt $PSDefaultParameterValuesuitschakelen, voegt u een sleutel van Disabled toe met de waarde Waar. De waarden in $PSDefaultParameterValues blijven behouden, maar zijn niet effectief.

PS> $PSDefaultParameterValues.Add("Disabled", $True)

Met de volgende syntaxis wordt hetzelfde resultaat bereikt.

PS> $PSDefaultParameterValues["Disabled"]=$True

De $PSDefaultParameterValues variabele geeft de bijgewerkte hashtabel weer met de waarde voor de Disabled sleutel.

PS> $PSDefaultParameterValues

Name                           Value
----                           -----
Disabled                       True
Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
Get-*:Verbose                  True
Send-MailMessage:SmtpServer    ServerXYZ

Als u opnieuw wilt inschakelen $PSDefaultParameterValues, verwijdert u de uitgeschakelde sleutel of wijzigt u de waarde van de uitgeschakelde sleutel in $False. De vorige waarde van $PSDefaultParameterValues is weer effectief.

PS> $PSDefaultParameterValues.Remove("Disabled")

Met de volgende syntaxis wordt hetzelfde resultaat bereikt.

PS> $PSDefaultParameterValues["Disabled"]=$False

De $PSDefaultParameterValues variabele geeft de bijgewerkte hash-tabel weer. Wanneer de methode Remove wordt gebruikt, wordt Disabled de sleutel verwijderd uit de uitvoer. Als de alternatieve syntaxis is gebruikt om opnieuw in teschakelen $PSDefaultParameterValues, Disabled wordt de sleutel weergegeven als Onwaar.

PS> $PSDefaultParameterValues

Name                           Value
----                           -----
Disabled                       False
Get-WinEvent:LogName           Microsoft-Windows-PrintService/Operational
Get-*:Verbose                  True
Send-MailMessage:SmtpServer    ServerXYZ

Zie ook