about_Parameters_Default_Values

Kort beskrivning

Beskriver hur du anger anpassade standardvärden för cmdlet-parametrar och avancerade funktioner.

Lång beskrivning

Med $PSDefaultParameterValues inställningsvariabeln kan du ange anpassade standardvärden för valfri cmdlet eller avancerad funktion. Cmdletar och avancerade funktioner använder det anpassade standardvärdet om du inte anger ett annat värde i kommandot.

Författarna till cmdletar och avancerade funktioner anger standardvärden för sina parametrar. Standardvärdena är vanligtvis användbara, men de kanske inte är lämpliga för alla miljöer.

Den här funktionen är särskilt användbar när du måste ange samma alternativa parametervärde nästan varje gång du använder kommandot eller när ett visst parametervärde är svårt att komma ihåg, till exempel ett e-postservernamn eller projekt-GUID.

Om det önskade standardvärdet varierar förutsägbart kan du ange ett skriptblock som tillhandahåller olika standardvärden för en parameter under olika förhållanden.

$PSDefaultParameterValues introducerades i PowerShell 3.0.

Syntax

Variabeln $PSDefaultParameterValues är en hash-tabell som validerar formatet för nycklar som en objekttyp för System.Management.Automation.DefaultParameterDictionary. Hash-tabellen innehåller nyckel/värde-par . En nyckel har formatet CmdletName:ParameterName. Ett värde är DefaultValue eller ScriptBlock som tilldelats nyckeln.

Syntaxen för inställningsvariabeln $PSDefaultParameterValues är följande:

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

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

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

Jokertecken tillåts i värdena CmdletName och ParameterName .

Om du vill ange, ändra, lägga till eller ta bort ett specifikt nyckel/värde-par från $PSDefaultParameterValuesanvänder du metoderna för att redigera en standard-hashtabell. Till exempel metoderna Lägg till och ta bort . De här metoderna skriver inte över andra värden i hash-tabellen.

Det finns en annan syntax som inte skriver över en befintlig $PSDefaultParameterValues hash-tabell. Om du vill lägga till eller ändra ett specifikt nyckel/värde-par använder du följande syntax:

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

CmdletName måste vara namnet på en cmdlet eller namnet på en avancerad funktion som använder attributet CmdletBinding. Du kan inte använda $PSDefaultParameterValues för att ange standardvärden för skript eller enkla funktioner.

DefaultValue kan vara ett objekt eller ett skriptblock. Om värdet är ett skriptblock utvärderar PowerShell skriptblocket och använder resultatet som parametervärde. När den angivna parametern accepterar ett skriptblockvärde omger du skriptblocksvärdet i en andra uppsättning klammerparenteser, till exempel:

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

Mer information finns i följande dokument:

Exempel

Så här ställer du in $PSDefaultParameterValues

$PSDefaultParameterValues är en inställningsvariabel, så den finns bara i den session där den har angetts. Det har inget standardvärde.

Om du vill ange $PSDefaultParameterValuesanger du variabelnamnet och ett eller flera nyckel/värde-par . Om du kör ett annat $PSDefaultParameterValues kommando skriver det över den befintliga hash-tabellen.

Exempel på hur du ändrar nyckel/värde-par utan att skriva över befintliga hash-tabellvärden finns i Så här lägger du till värden i $PSDefaultParameterValues eller Så här ändrar du värden i $PSDefaultParameterValues.

Om du vill spara $PSDefaultParameterValues för framtida sessioner lägger du till ett $PSDefaultParameterValues kommando i PowerShell-profilen. Mer information finns i about_Profiles.

Ange ett anpassat standardvärde

Nyckel /värde-paret anger Send-MailMessage:SmtpServer nyckeln till ett anpassat standardvärde för Server123.

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

Ange standardvärden för flera parametrar

Om du vill ange standardvärden för flera parametrar separerar du varje nyckel/värde-par med ett semikolon (;). Nycklarna Send-MailMessage:SmtpServer och Get-WinEvent:LogName är inställda på anpassade standardvärden.

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

Använda jokertecken och växelparametrar

Cmdleten och parameternamnen kan innehålla jokertecken. Använd $True och $False för att ange värden för växelparametrar, till exempel Utförligt. Den gemensamma parameterns utförliga parameter är inställd på $True för alla kommandon.

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

Använd en matris för standardvärdet

Om en parameter kan acceptera flera värden, en matris, kan du ange flera värden som standardvärden. Standardvärdet för Invoke-Command:ComputerName nyckeln är inställt på ett matrisvärde för Server01 och Server02.

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

Använda ett skriptblock

Du kan använda ett skriptblock för att ange olika standardvärden för en parameter under olika förhållanden. PowerShell utvärderar skriptblocket och använder resultatet som standardparametervärde.

Nyckeln Format-Table:AutoSize anger att växlar parametern till standardvärdet True. -instruktionen If innehåller ett villkor om att $host.Name måste vara PowerShell-konsolen ConsoleHost.

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

Om en parameter accepterar ett skriptblockvärde omger du skriptblocket i en extra uppsättning klammerparenteser. När PowerShell utvärderar det yttre skriptblocket är resultatet det inre skriptblocket och det anges som standardparametervärde.

Nyckeln Invoke-Command:ScriptBlock är inställd på ett standardvärde för systemhändelseloggen eftersom skriptblocket omges av en andra uppsättning klammerparenteser. Resultatet av skriptblocket skickas till cmdleten Invoke-Command .

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

Så här hämtar du $PSDefaultParameterValues

Hash-tabellvärdena visas genom att anges $PSDefaultParameterValues i PowerShell-prompten.

En $PSDefaultParameterValues hash-tabell anges med tre nyckel/värde-par . Den här hash-tabellen används i följande exempel som beskriver hur du lägger till, ändrar och tar bort värden från $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

Använd följande syntax för att hämta värdet för en specifik CmdletName:ParameterName nyckel:

$PSDefaultParameterValues["CmdletName:ParameterName"]

För att till exempel hämta värdet för Send-MailMessage:SmtpServer nyckeln.

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

Så här lägger du till värden i $PSDefaultParameterValues

Om du vill lägga till ett värde i $PSDefaultParameterValuesanvänder du metoden Lägg till . Att lägga till ett värde påverkar inte hashtabellens befintliga värden.

Använd ett kommatecken (,) för att separera nyckeln från värdet. Följande syntax visar hur du använder metoden Lägg till för $PSDefaultParameterValues.

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

Hash-tabellen som skapades i föregående exempel uppdateras med ett nytt nyckel/värde-par . Metoden Lägg till anger Get-Process:Name nyckeln till värdet PowerShell.

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

Följande syntax åstadkommer samma resultat.

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

Variabeln $PSDefaultParameterValues visar den uppdaterade hash-tabellen. Nyckeln Get-Process:Name har lagts till.

PS> $PSDefaultParameterValues

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

Ta bort värden från $PSDefaultParameterValues

Om du vill ta bort ett värde från $PSDefaultParameterValuesanvänder du metoden Ta bort för hash-tabeller. Om du tar bort ett värde påverkas inte hash-tabellens befintliga värden.

Följande syntax visar hur du använder metoden Ta bort$PSDefaultParameterValues.

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

I det här exemplet uppdateras hash-tabellen som skapades i föregående exempel för att ta bort ett nyckel/värde-par . Metoden Ta bort tar Get-Process:Name bort nyckeln.

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

Variabeln $PSDefaultParameterValues visar den uppdaterade hash-tabellen. Nyckeln Get-Process:Name har tagits bort.

PS> $PSDefaultParameterValues

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

Ändra värden i $PSDefaultParameterValues

Ändringar i ett visst värde påverkar inte befintliga hash-tabellvärden. Om du vill ändra ett specifikt nyckel/värde-par i $PSDefaultParameterValuesanvänder du följande syntax:

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

I det här exemplet uppdateras hash-tabellen som skapades i föregående exempel för att ändra ett nyckel/värde-par . Följande kommando ändrar Send-MailMessage:SmtpServer nyckeln till ett nytt värde för ServerXYZ.

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

Variabeln $PSDefaultParameterValues visar den uppdaterade hash-tabellen. Nyckeln Send-MailMessage:SmtpServer ändrades till ett nytt värde.

PS> $PSDefaultParameterValues

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

Inaktivera och återaktivera $PSDefaultParameterValues

Du kan tillfälligt inaktivera och sedan återaktivera $PSDefaultParameterValues. Inaktivering $PSDefaultParameterValues är användbart om du kör skript som behöver olika standardparametervärden.

Om du vill inaktivera $PSDefaultParameterValueslägger du till en nyckel för Disabled med värdet True. Värdena i $PSDefaultParameterValues bevaras, men är inte effektiva.

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

Följande syntax åstadkommer samma resultat.

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

Variabeln $PSDefaultParameterValues visar den uppdaterade hash-tabellen med värdet för Disabled nyckeln.

PS> $PSDefaultParameterValues

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

Om du vill återaktivera $PSDefaultParameterValuestar du bort nyckeln Inaktiverad eller ändrar värdet för nyckeln Inaktiverad till $False. Det tidigare värdet för $PSDefaultParameterValues gäller igen.

PS> $PSDefaultParameterValues.Remove("Disabled")

Följande syntax åstadkommer samma resultat.

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

Variabeln $PSDefaultParameterValues visar den uppdaterade hash-tabellen. När metoden Ta bort används Disabled tas nyckeln bort från utdata. Om den alternativa syntaxen användes för att återaktivera $PSDefaultParameterValuesDisabled visas nyckeln som Falskt.

PS> $PSDefaultParameterValues

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

Se även