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 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 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 de naam van een e-mailserver of project-GUID.
Als de gewenste standaardwaarde voorspelbaar varieert, kunt u een scriptblok opgeven dat verschillende standaardwaarden biedt voor een parameter onder verschillende omstandigheden.
$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 $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 wilt instellen, wijzigen, toevoegen of verwijderen uit $PSDefaultParameterValues
, gebruikt u de methoden om een standaard-hashtabel te bewerken. Bijvoorbeeld de methoden Toevoegen en Verwijderen . Deze methoden overschrijven geen andere waarden in de hashtabel.
Er is nog een syntaxis waarmee een bestaande $PSDefaultParameterValues
hashtabel niet wordt overschreven. 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 $PSDefaultParameterValues
om standaardwaarden 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 wordt het resultaat als parameterwaarde gebruikt. Wanneer de opgegeven parameter een waarde voor een scriptblok accepteert, plaatst u de waarde van het scriptblok in een tweede set accolades, 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 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 hashtabel 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
Het sleutel/waarde-paar stelt de Send-MailMessage:SmtpServer
sleutel in 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
sleutels en Get-WinEvent:LogName
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 $False
om waarden in te stellen voor schakelparameters, zoals Uitgebreid. De uitgebreide parameter 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( een matrix) 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 op te geven voor een parameter 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 True. 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 waarde voor een scriptblok accepteert, plaatst u het scriptblok tussen 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 systeemgebeurtenislogboek omdat het scriptblok is ingesloten in een tweede set accolades. Het resultaat van het scriptblok wordt doorgegeven aan de Invoke-Command
cmdlet.
$PSDefaultParameterValues=@{
"Invoke-Command:ScriptBlock"={{Get-EventLog -Log System}}
}
Hoe kom ik aan $PSDefaultParameterValues
De waarden van de hashtabel worden weergegeven door in te voeren $PSDefaultParameterValues
bij de PowerShell-prompt.
Een $PSDefaultParameterValues
hashtabel wordt ingesteld met drie sleutel-waardeparen .
Deze hash-tabel 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"]
Bijvoorbeeld om de waarde voor de Send-MailMessage:SmtpServer
sleutel op te halen.
PS> $PSDefaultParameterValues["Send-MailMessage:SmtpServer"]
Server123
Waarden toevoegen aan $PSDefaultParameterValues
Als u een waarde wilt toevoegen aan $PSDefaultParameterValues
, gebruikt u de methode Toevoegen . Het toevoegen van een waarde heeft geen invloed op de bestaande waarden van de hashtabel.
Gebruik een komma (,
) om de sleutel van de waarde te scheiden. In de volgende syntaxis ziet u 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 Add 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 uit $PSDefaultParameterValues
wilt verwijderen, gebruikt u de methode Remove van hash-tabellen. 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/waarde-paar 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 hebben geen invloed op bestaande hashtabelwaarden. Als u een specifiek sleutel-waardepaar in $PSDefaultParameterValues
wilt wijzigen, 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/waarde-paar 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
.
Uitschakelen $PSDefaultParameterValues
is handig als u scripts uitvoert waarvoor andere standaardparameterwaarden nodig zijn.
Als u wilt uitschakelen $PSDefaultParameterValues
, voegt u een sleutel van Disabled
toe met de waarde True. 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 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 van $PSDefaultParameterValues
is 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