about_Parameters_Default_Values

Korte beschrijving

Hierin wordt beschreven hoe u aangepaste standaardwaarden instelt voor cmdlet-parameters en geavanceerde functies.

Lange beschrijving

Met de $PSDefaultParameterValues 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 in de opdracht opgeeft.

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

Deze functie is vooral handig wanneer u bijna elke keer dezelfde alternatieve parameterwaarde moet opgeven wanneer u de opdracht gebruikt 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 dat verschillende standaardwaarden biedt voor een parameter onder verschillende voorwaarden.

$PSDefaultParameterValues is geïntroduceerd in PowerShell 3.0.

Syntaxis

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

De syntaxis van de $PSDefaultParameterValues voorkeursvariabele 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$PSDefaultParameterValueswilt instellen, wijzigen, toevoegen of verwijderen, gebruikt u de methoden om een standaard-hashtabel te bewerken. Bijvoorbeeld de methoden Toevoegen en Verwijderen . Deze methoden overschrijven geen andere waarden in de hash-tabel.

Er is nog een syntaxis die een bestaande $PSDefaultParameterValues hash-tabel niet overschrijft. Gebruik de volgende syntaxis om een specifiek sleutel-/waardepaar toe te voegen of te wijzigen:

$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 geen $PSDefaultParameterValues standaardwaarden opgeven 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 scriptblokwaarde accepteert, plaatst u de waarde van het scriptblok in een tweede set accolades, zoals:

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

Zie 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 instellen $PSDefaultParameterValues, typt u de naam van de variabele en een of meer sleutel-waardeparen . Als u een andere $PSDefaultParameterValues opdracht uitvoert, wordt de bestaande hash-tabel overschreven.

Zie Waarden toevoegen aan $PSDefaultParameterValues of waarden wijzigen in $PSDefaultParameterValues voor voorbeelden over het wijzigen van sleutel-/waardeparen zonder bestaande hashtabelwaarden te overschrijven.

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

Een aangepaste standaardwaarde instellen

Met het sleutel-/waardepaar wordt de Send-MailMessage:SmtpServer sleutel ingesteld op een aangepaste standaardwaarde van Server123.

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

Standaardwaarden instellen voor meerdere parameters

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

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

Jokertekens gebruiken en parameters wisselen

De cmdlet- en parameternamen kunnen jokertekens bevatten. Gebruik $True en $False stel waarden in voor schakelparameters, zoals Uitgebreid. De uitgebreide parameter van de gemeenschappelijke parameter is ingesteld $True op voor alle opdrachten.

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

Een matrix gebruiken voor de standaardwaarde

Als een parameter meerdere waarden kan accepteren, 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 onder verschillende voorwaarden op te geven. PowerShell evalueert het scriptblok en gebruikt het resultaat als de standaardparameterwaarde.

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

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

Als een parameter een scriptblokwaarde accepteert, plaatst u het scriptblok in een extra set accolades. Wanneer PowerShell het buitenste scriptblok evalueert, is het resultaat het interne scriptblok en dat is ingesteld als de standaardparameterwaarde.

De Invoke-Command:ScriptBlock sleutel die is ingesteld op een standaardwaarde van het systeemgebeurtenislogboek , omdat het scriptblok in een tweede set accolades wordt geplaatst. Het resultaat van het scriptblok wordt doorgegeven aan de Invoke-Command cmdlet.

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

Hoe krijg ik $PSDefaultParameterValues

De hashtabelwaarden worden weergegeven door bij de PowerShell-prompt in te voeren $PSDefaultParameterValues .

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 een specifieke CmdletName:ParameterName sleutel op te halen:

$PSDefaultParameterValues["CmdletName:ParameterName"]

Als u bijvoorbeeld de waarde voor de Send-MailMessage:SmtpServer sleutel wilt ophalen.

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

Waarden toevoegen aan $PSDefaultParameterValues

Als u een waarde wilt $PSDefaultParameterValuestoevoegen, gebruikt u de methode Toevoegen . Het toevoegen van een waarde heeft geen invloed op de bestaande waarden van de hash-tabel.

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

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

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

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

Met de volgende syntaxis wordt hetzelfde resultaat bereikt.

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

De $PSDefaultParameterValues variabele 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 wilt verwijderen uit $PSDefaultParameterValues, gebruikt u de methode Remove van hash-tabellen. Het verwijderen van een waarde heeft geen invloed op de bestaande waarden van de hash-tabel.

De volgende syntaxis laat zien hoe u de methode Remove gebruikt voor $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 Get-Process:Name sleutel verwijderd.

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

De $PSDefaultParameterValues variabele 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 zijn niet van invloed op bestaande hashtabelwaarden. Als u een specifiek sleutel-/waardepaar wilt $PSDefaultParameterValueswijzigen, gebruikt 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 $PSDefaultParameterValues variabele 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 weer inschakelen $PSDefaultParameterValues. $PSDefaultParameterValues Uitschakelen is handig als u scripts uitvoert waarvoor verschillende standaardparameterwaarden nodig zijn.

Als u wilt uitschakelen $PSDefaultParameterValues, voegt u een sleutel toe van Disabled met de waarde Waar. De waarden blijven $PSDefaultParameterValues 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 hash-tabel 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 is $PSDefaultParameterValues weer van kracht.

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 de Disabled sleutel uit de uitvoer verwijderd. Als de alternatieve syntaxis is gebruikt om opnieuw in te schakelen $PSDefaultParameterValues, wordt de Disabled 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