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