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 är i formatet CmdletName:ParameterName. Ett värde är den 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 standardhashtabell. Till exempel metoderna Lägg till och ta bort . Dessa metoder 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 skriptblockvä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. Den har inget standardvärde.

$PSDefaultParameterValuesAnge 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 Lägga till värden i $PSDefaultParameterValues eller Ändra värden i $PSDefaultParameterValues.

Om du vill spara $PSDefaultParameterValues för framtida sessioner lägger du till ett $PSDefaultParameterValues kommando i din PowerShell-profil. 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

Cmdlet- och parameternamnen kan innehålla jokertecken. Använd $True och $False för att ange värden för växelparametrar, till exempel Utförlig. 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å matrisvärdet 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 som växlar parametern till standardvärdet True. -instruktionen If innehåller ett villkor som $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 blir resultatet det inre skriptblocket och det anges som standardparametervärdet.

Nyckeln Invoke-Command:ScriptBlock är inställd på ett standardvärde för systemhändelseloggeneftersom 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

Om du vill hämta värdet för en specifik CmdletName:ParameterName nyckel använder du följande syntax:

$PSDefaultParameterValues["CmdletName:ParameterName"]

Till exempel för att 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 skilja 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")

Den hash-tabell 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 hashtabellens 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 bort Get-Process:Name 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. Det är användbart att inaktivera $PSDefaultParameterValues 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 inaktiverad nyckel 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 False.

PS> $PSDefaultParameterValues

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

Se även