当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 关于参数默认值

作者:精品下载站 日期:2024-12-14 02:20:56 浏览:11 分类:玩电脑

关于参数默认值


简短描述

描述如何设置 cmdlet 参数和高级功能的自定义默认值。

详细描述

$PSDefaultParameterValues 首选项变量允许您为任何 cmdlet 或高级函数指定自定义默认值。 Cmdlet 和高级函数使用自定义默认值,除非您在命令中指定其他值。

cmdlet 和高级函数的作者为其参数设置了标准默认值。通常,标准默认值很有用,但它们可能并不适合所有环境。

当您几乎每次使用该命令时都必须指定相同的备用参数值或难以记住特定参数值(例如电子邮件服务器名称或项目 GUID)时,此功能特别有用。

如果所需的默认值可预见地变化,您可以指定一个脚本块,该脚本块在不同条件下为参数提供不同的默认值。

$PSDefaultParameterValues 是在 PowerShell 3.0 中引入的。

句法

$PSDefaultParameterValues 变量是一个哈希表,用于将键的格式验证为 System.Management.Automation.DefaultParameterDictionary 的对象类型。哈希表包含键/值对。 的格式为CmdletName:ParameterNameValue 是分配给键的DefaultValueScriptBlock

$PSDefaultParameterValues 首选项变量的语法如下:

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

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

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

CmdletNameParameterName 值中允许使用通配符。

要从 $PSDefaultParameterValues 设置、更改、添加或删除特定的键/值对,请使用编辑标准哈希表的方法。例如,添加删除方法。这些方法不会覆盖哈希表中的其他值。

还有另一种语法不会覆盖现有的 $PSDefaultParameterValues 哈希表。要添加或更改特定的键/值对,请使用以下语法:

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

CmdletName 必须是 cmdlet 的名称或使用 CmdletBinding 属性的高级函数的名称。您不能使用 $PSDefaultParameterValues 指定脚本或简单函数的默认值。

DefaultValue 可以是对象或脚本块。如果该值是脚本块,PowerShell 会计算该脚本块并将结果用作参数值。当指定参数接受脚本块值时,请将脚本块值括在第二组大括号中,例如:

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

有关更多信息,请参阅以下文档:

  • about_Hash_Tables
  • about_Script_Blocks
  • about_Preference_Variables

示例

如何设置 $PSDefaultParameterValues

$PSDefaultParameterValues 是一个首选项变量,因此它仅存在于设置它的会话中。它没有默认值。

要设置 $PSDefaultParameterValues,请键入变量名称和一对或多对键/值。如果您运行另一个 $PSDefaultParameterValues 命令,它将覆盖现有的哈希表。

有关如何更改键/值对而不覆盖现有哈希表值的示例,请参阅如何向 $PSDefaultParameterValues 添加值或如何更改 $PSDefaultParameterValues 中的值。

要保存 $PSDefaultParameterValues 以供将来会话使用,请将 $PSDefaultParameterValues 命令添加到您的 PowerShell 配置文件中。有关详细信息,请参阅 about_Profiles。

设置自定义默认值

键/值对将Send-MailMessage:SmtpServer键设置为自定义默认值Server123

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

为多个参数设置默认值

要为多个参数设置默认值,请用分号 (;) 分隔每个键/值对。 Send-MailMessage:SmtpServerGet-WinEvent:LogName 键设置为自定义默认值。

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

使用通配符和切换参数

cmdlet 和参数名称可以包含通配符。使用 $True$False 设置开关参数的值,例如 Verbose。对于所有命令,公共参数的 Verbose 参数均设置为 $True

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

使用数组作为默认值

如果一个参数可以接受多个值,一个数组,可以设置多个值作为默认值。 Invoke-Command:ComputerName 键的默认值设置为 Server01Server02 的数组值。

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

使用脚本块

您可以使用脚本块为不同条件下的参数指定不同的默认值。 PowerShell 评估脚本块并将结果用作默认参数值。

Format-Table:AutoSize 键将参数切换为默认值TrueIf 语句包含一个条件,即 $host.Name 必须是 PowerShell 控制台 ConsoleHost

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

如果参数接受脚本块值,请将脚本块括在一组额外的大括号中。当 PowerShell 计算外部脚本块时,结果是内部脚本块,并且被设置为默认参数值。

Invoke-Command:ScriptBlock 键设置为系统事件日志 的默认值,因为脚本块包含在第二组大括号中。脚本块的结果将传递给 Invoke-Command cmdlet。

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

如何获取 $PSDefaultParameterValues

通过在 PowerShell 提示符下输入 $PSDefaultParameterValues 来显示哈希表值。

$PSDefaultParameterValues 哈希表由三个键/值对设置。以下示例使用此哈希表来描述如何在 $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

要获取特定 CmdletName:ParameterName 键的值,请使用以下语法:

$PSDefaultParameterValues["CmdletName:ParameterName"]

例如,获取 Send-MailMessage:SmtpServer 键的值。

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

如何向 $PSDefaultParameterValues 添加值

要向 $PSDefaultParameterValues 添加值,请使用 Add 方法。添加值不会影响哈希表的现有值。

使用逗号 (,) 将分隔。以下语法显示如何使用 $PSDefaultParameterValuesAdd 方法。

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

前面示例中创建的哈希表已使用新的键/值对进行更新。 Add 方法将 Get-Process:Name 键设置为值 PowerShell

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

以下语法实现相同的结果。

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

$PSDefaultParameterValues 变量显示更新后的哈希表。添加了 Get-Process:Name 键。

PS> $PSDefaultParameterValues

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

如何从 $PSDefaultParameterValues 中删除值

要从 $PSDefaultParameterValues 中删除值,请使用哈希表的Remove 方法。删除值不会影响哈希表的现有值。

以下语法显示如何对 $PSDefaultParameterValues 使用 Remove 方法。

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

在此示例中,更新了前面示例中创建的哈希表以删除键/值对。 Remove 方法删除 Get-Process:Name 键。

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

$PSDefaultParameterValues 变量显示更新后的哈希表。 Get-Process:Name 键已被删除。

PS> $PSDefaultParameterValues

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

如何更改 $PSDefaultParameterValues 中的值

对特定值的更改不会影响现有的哈希表值。要更改 $PSDefaultParameterValues 中的特定键/值对,请使用以下语法:

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

在此示例中,更新了前面示例中创建的哈希表以更改键/值对。以下命令将 Send-MailMessage:SmtpServer 键更改为新值 ServerXYZ

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

$PSDefaultParameterValues 变量显示更新后的哈希表。 Send-MailMessage:SmtpServer 键已更改为新值。

PS> $PSDefaultParameterValues

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

如何禁用和重新启用 $PSDefaultParameterValues

您可以暂时禁用然后重新启用 $PSDefaultParameterValues。如果您运行的脚本需要不同的默认参数值,则禁用 $PSDefaultParameterValues 非常有用。

要禁用 $PSDefaultParameterValues,请添加值为 TrueDisabled 键。 $PSDefaultParameterValues 中的值会保留,但无效。

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

以下语法实现相同的结果。

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

$PSDefaultParameterValues 变量显示更新后的哈希表以及 Disabled 键的值。

PS> $PSDefaultParameterValues

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

要重新启用 $PSDefaultParameterValues,请删除 Disabled 键或将 Disabled 键的值更改为 $False$PSDefaultParameterValues 之前的值再次有效。

PS> $PSDefaultParameterValues.Remove("Disabled")

以下语法实现相同的结果。

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

$PSDefaultParameterValues 变量显示更新后的哈希表。使用 Remove 方法时,Disabled 键将从输出中删除。如果使用备用语法重新启用 $PSDefaultParameterValuesDisabled 键将显示为 False

PS> $PSDefaultParameterValues

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

参见

  • about_公共参数
  • about_功能_高级
  • about_Functions_CmdletBindingAttribute
  • about_Hash_Tables
  • about_Preference_Variables
  • about_个人资料
  • about_Script_Blocks

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯