Om standardvärden för parametrar
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 $PSDefaultParameterValues
anvä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 $PSDefaultParameterValues
anger 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äxla parametern till ett standardvärde för 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 $PSDefaultParameterValues
anvä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 $PSDefaultParameterValues
anvä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 på $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 $PSDefaultParameterValues
anvä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 $PSDefaultParameterValues
lä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 $PSDefaultParameterValues
tar du bort inaktiverad nyckel 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 Remove används Disabled
tas nyckeln bort från utdata.
Om den alternativa syntaxen användes för att återaktivera $PSDefaultParameterValues
Disabled
visas nyckeln som Falskt.
PS> $PSDefaultParameterValues
Name Value
---- -----
Disabled False
Get-WinEvent:LogName Microsoft-Windows-PrintService/Operational
Get-*:Verbose True
Send-MailMessage:SmtpServer ServerXYZ