Tìm kiếm trang web

về Thông số Giá trị mặc định


Mô tả ngắn

Mô tả cách đặt giá trị mặc định tùy chỉnh cho tham số lệnh ghép ngắn và các hàm nâng cao.

Mô tả dài

Biến tùy chọn $PSDefaultParameterValues cho phép bạn chỉ định các giá trị mặc định tùy chỉnh cho bất kỳ lệnh ghép ngắn hoặc hàm nâng cao nào. Lệnh ghép ngắn và các hàm nâng cao sử dụng giá trị mặc định tùy chỉnh trừ khi bạn chỉ định một giá trị khác trong lệnh.

Tác giả của lệnh ghép ngắn và hàm nâng cao đặt giá trị mặc định tiêu chuẩn cho tham số của họ. Thông thường, các giá trị mặc định tiêu chuẩn rất hữu ích nhưng chúng có thể không phù hợp với mọi môi trường.

Tính năng này đặc biệt hữu ích khi bạn phải chỉ định cùng một giá trị tham số thay thế gần như mỗi lần bạn sử dụng lệnh hoặc khi khó nhớ một giá trị tham số cụ thể, chẳng hạn như tên máy chủ email hoặc GUID dự án.

Nếu giá trị mặc định mong muốn thay đổi có thể dự đoán được, bạn có thể chỉ định khối tập lệnh cung cấp các giá trị mặc định khác nhau cho tham số trong các điều kiện khác nhau.

$PSDefaultParameterValues đã được giới thiệu trong PowerShell 3.0.

Cú pháp

Biến $PSDefaultParameterValues là một bảng băm xác thực định dạng của khóa dưới dạng loại đối tượng của System.management.Automation.DefaultParameterDictionary. Bảng băm chứa các cặp Khóa/Giá trị. Khóa có định dạng CmdletName:ParameterName. Giá trị là DefaultValue hoặc ScriptBlock được gán cho khóa.

Cú pháp của biến tùy chọn $PSDefaultParameterValues như sau:

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

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

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

Cho phép ký tự đại diện trong giá trị CmdletName và ParameterName.

Để đặt, thay đổi, thêm hoặc xóa một cặp Khóa/Giá trị cụ thể khỏi $PSDefaultParameterValues, hãy sử dụng các phương pháp để chỉnh sửa bảng băm tiêu chuẩn. Ví dụ: phương thức Thêm và Xóa. Các phương thức này không ghi đè lên các giá trị khác trong bảng băm.

Có một cú pháp khác không ghi đè bảng băm $PSDefaultParameterValues hiện có. Để thêm hoặc thay đổi cặp Khóa/Giá trị cụ thể, hãy sử dụng cú pháp sau:

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

CmdletName phải là tên của lệnh ghép ngắn hoặc tên của hàm nâng cao sử dụng thuộc tính CmdletBinding. Bạn không thể sử dụng $PSDefaultParameterValues để chỉ định giá trị mặc định cho tập lệnh hoặc hàm đơn giản.

DefaultValue có thể là một đối tượng hoặc một khối tập lệnh. Nếu giá trị là khối tập lệnh, PowerShell sẽ đánh giá khối tập lệnh và sử dụng kết quả làm giá trị tham số. Khi tham số đã chỉ định chấp nhận giá trị khối tập lệnh, hãy đặt giá trị khối tập lệnh trong bộ dấu ngoặc nhọn thứ hai, chẳng hạn như:

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

Để biết thêm thông tin, hãy xem các tài liệu sau:

  • about_Hash_Tables
  • about_Script_Blocks
  • about_Preference_Biến

Ví dụ

Cách đặt $PSDefaultParameterValues

$PSDefaultParameterValues là một biến tùy chọn, do đó nó chỉ tồn tại trong phiên mà nó được đặt. Nó không có giá trị mặc định.

Để đặt $PSDefaultParameterValues, hãy nhập tên biến và một hoặc nhiều cặp Khóa/Giá trị. Nếu bạn chạy một lệnh $PSDefaultParameterValues khác, nó sẽ ghi đè bảng băm hiện có.

Để biết ví dụ về cách thay đổi cặp Khóa/Giá trị mà không ghi đè các giá trị bảng băm hiện có, hãy xem Cách thêm giá trị vào $PSDefaultParameterValues hoặc Cách thay đổi giá trị trong $PSDefaultParameterValues.

Để lưu $PSDefaultParameterValues cho các phiên trong tương lai, hãy thêm lệnh $PSDefaultParameterValues vào hồ sơ PowerShell của bạn. Để biết thêm thông tin, hãy xem about_Profiles.

Đặt giá trị mặc định tùy chỉnh

Cặp Khóa/Giá trị đặt khóa Send-MailMessage:SmtpServer thành giá trị mặc định tùy chỉnh là Server123.

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

Đặt giá trị mặc định cho nhiều tham số

Để đặt giá trị mặc định cho nhiều tham số, hãy phân tách từng cặp Khóa/Giá trị bằng dấu chấm phẩy (;). Các khóa Send-MailMessage:SmtpServer và Get-WinEvent:LogName được đặt thành giá trị mặc định tùy chỉnh.

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

Sử dụng ký tự đại diện và chuyển đổi tham số

Tên lệnh ghép ngắn và tham số có thể chứa các ký tự đại diện. Sử dụng $True và $False để đặt giá trị cho các tham số chuyển đổi, chẳng hạn như Verbose. Tham số Verbose của tham số chung được đặt thành $True cho tất cả các lệnh.

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

Sử dụng một mảng cho giá trị mặc định

Nếu một tham số có thể chấp nhận nhiều giá trị, một mảng thì bạn có thể đặt nhiều giá trị làm giá trị mặc định. Giá trị mặc định của khóa Invoke-Command:ComputerName được đặt thành giá trị mảng của Server01 và Server02.

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

Sử dụng khối tập lệnh

Bạn có thể sử dụng khối tập lệnh để chỉ định các giá trị mặc định khác nhau cho tham số trong các điều kiện khác nhau. PowerShell đánh giá khối tập lệnh và sử dụng kết quả làm giá trị tham số mặc định.

Phím Format-Table:AutoSize đặt tham số chuyển thành giá trị mặc định là True. Câu lệnh If chứa điều kiện rằng $host.Name phải là bảng điều khiển PowerShell, ConsoleHost.

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

Nếu một tham số chấp nhận giá trị khối tập lệnh, hãy đặt khối tập lệnh đó vào một bộ dấu ngoặc nhọn bổ sung. Khi PowerShell đánh giá khối tập lệnh bên ngoài, kết quả là khối tập lệnh bên trong và được đặt làm giá trị tham số mặc định.

Khóa Invoke-Command:ScriptBlock được đặt thành giá trị mặc định của Nhật ký sự kiện hệ thống vì khối tập lệnh được đặt trong bộ dấu ngoặc nhọn thứ hai. Kết quả của khối tập lệnh được chuyển tới lệnh ghép ngắn Invoke-Command.

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

Cách nhận $PSDefaultParameterValues

Các giá trị bảng băm được hiển thị bằng cách nhập $PSDefaultParameterValues tại dấu nhắc PowerShell.

Bảng băm $PSDefaultParameterValues được đặt với ba cặp Khóa/Giá trị. Bảng băm này được sử dụng trong các ví dụ sau mô tả cách thêm, thay đổi và xóa giá trị khỏi $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

Để lấy giá trị của khóa CmdletName:ParameterName cụ thể, hãy sử dụng cú pháp sau:

$PSDefaultParameterValues["CmdletName:ParameterName"]

Ví dụ: để lấy giá trị cho khóa Send-MailMessage:SmtpServer.

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

Cách thêm giá trị vào $PSDefaultParameterValues

Để thêm giá trị vào $PSDefaultParameterValues, hãy sử dụng phương thức Thêm. Việc thêm giá trị không ảnh hưởng đến các giá trị hiện có của bảng băm.

Sử dụng dấu phẩy (,) để phân tách Khóa khỏi Giá trị. Cú pháp sau đây cho biết cách sử dụng phương thức Thêm cho $PSDefaultParameterValues.

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

Bảng băm được tạo trong ví dụ trước được cập nhật bằng cặp Khóa/Giá trị mới. Phương thức Thêm đặt khóa Get-Process:Name thành giá trị PowerShell.

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

Cú pháp sau đây thực hiện cùng một kết quả.

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

Biến $PSDefaultParameterValues hiển thị bảng băm được cập nhật. Khóa Get-Process:Name đã được thêm vào.

PS> $PSDefaultParameterValues

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

Cách xóa giá trị khỏi $PSDefaultParameterValues

Để xóa một giá trị khỏi $PSDefaultParameterValues, hãy sử dụng phương thức Xóa của bảng băm. Việc xóa một giá trị không ảnh hưởng đến các giá trị hiện có của bảng băm.

Cú pháp sau đây cho biết cách sử dụng phương thức Remove trên $PSDefaultParameterValues.

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

Trong ví dụ này, bảng băm được tạo trong ví dụ trước được cập nhật để xóa cặp Khóa/Giá trị. Phương thức Remove sẽ xóa khóa Get-Process:Name.

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

Biến $PSDefaultParameterValues hiển thị bảng băm được cập nhật. Khóa Get-Process:Name đã bị xóa.

PS> $PSDefaultParameterValues

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

Cách thay đổi giá trị trong $PSDefaultParameterValues

Những thay đổi đối với một giá trị cụ thể không ảnh hưởng đến các giá trị bảng băm hiện có. Để thay đổi cặp Khóa/Giá trị cụ thể trong $PSDefaultParameterValues, hãy sử dụng cú pháp sau:

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

Trong ví dụ này, bảng băm được tạo trong ví dụ trước được cập nhật để thay đổi cặp Khóa/Giá trị. Lệnh sau thay đổi khóa Send-MailMessage:SmtpServer thành giá trị mới của ServerXYZ.

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

Biến $PSDefaultParameterValues hiển thị bảng băm được cập nhật. Khóa Send-MailMessage:SmtpServer đã được thay đổi thành giá trị mới.

PS> $PSDefaultParameterValues

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

Cách tắt và bật lại $PSDefaultParameterValues

Bạn có thể tạm thời tắt rồi bật lại $PSDefaultParameterValues. Việc tắt $PSDefaultParameterValues rất hữu ích nếu bạn đang chạy các tập lệnh cần các giá trị tham số mặc định khác nhau.

Để tắt $PSDefaultParameterValues, hãy thêm khóa Đã tắt với giá trị True. Các giá trị trong $PSDefaultParameterValues được giữ nguyên nhưng không hiệu quả.

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

Cú pháp sau đây thực hiện cùng một kết quả.

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

Biến $PSDefaultParameterValues hiển thị bảng băm được cập nhật với giá trị cho khóa Đã tắt.

PS> $PSDefaultParameterValues

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

Để kích hoạt lại $PSDefaultParameterValues, hãy xóa khóa Disabled hoặc thay đổi giá trị của khóa Disabled thành $False . Giá trị trước đó của $PSDefaultParameterValues có hiệu lực trở lại.

PS> $PSDefaultParameterValues.Remove("Disabled")

Cú pháp sau đây thực hiện cùng một kết quả.

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

Biến $PSDefaultParameterValues hiển thị bảng băm được cập nhật. Khi phương thức Xóa được sử dụng, phím Đã tắt sẽ bị xóa khỏi đầu ra. Nếu cú pháp thay thế được sử dụng để kích hoạt lại $PSDefaultParameterValues, khóa Đã tắt sẽ được hiển thị là False.

PS> $PSDefaultParameterValues

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

Xem thêm

  • about_CommonParameters
  • about_Functions_Nâng cao
  • about_Functions_CmdletBindingAttribution
  • about_Hash_Tables
  • about_Preference_Biến
  • about_Profiles
  • about_Script_Blocks

Bài viết liên quan