Đối với những thứ như -WhatIf, chúng tôi có $ PSCmdlet.ShouldProcess() được gán cho chúng tôi bởi thuộc tính [CmdletBinding]. Có những công cụ hoặc thực hành khác để triển khai các đối số dòng lệnh chung như -Verbose, -Debug, -PassThru, v.v. không?Powershell: làm thế nào để thực hiện các công tắc tiêu chuẩn?
14
A
Trả lời
14
Write-Debug
và Write-Verbose
tự động xử lý các thông số -Debug
và -Verbose
.
-PassThru
không phải là về mặt kỹ thuật một tham số chung, nhưng bạn có thể thực hiện nó thích:
function PassTest {
param(
[switch] $PassThru
)
process {
if($PassThru) {$_}
}
}
1..10|PassTest -PassThru
Và đây là một ví dụ của việc sử dụng giá trị passthru của chức năng của bạn trên một lệnh:
function Add-ScriptProperty {
param(
[string] $Name,
[ScriptBlock] $Value,
[switch] $PassThru
)
process{
# Use ":" to explicitly set the value on a switch parameter
$_| Add-Member -MemberType ScriptProperty -Name $Name -Value $Value `
-PassThru:$PassThru
}
}
$calc = Start-Process calc -PassThru|
Add-ScriptProperty -Name SecondsOld `
-Value {((Get-Date)-$this.StartTime).TotalSeconds} -PassThru
sleep 5
$calc.SecondsOld
Có hãy xem Get-Help about_CommonParameters
để biết thêm thông tin.
Tôi nghĩ rằng bạn có thể muốn lưu biến đầu vào, làm điều gì đó sau đó passthru biến được lưu trữ ở cuối (nếu $ passthru). – Matt
Có, 'PassTest' không phải là một chức năng hữu ích; chỉ là một ví dụ nhỏ để minh họa cách '-PassThru' có thể được thực hiện. Ngoài ra, bạn cũng có thể làm điều gì đó với biến đầu vào, nhưng passthru giá trị ban đầu không đổi (ví dụ: '$ _. Kill(); if ($ PassThru) {$ _}'). Tôi đã thêm một ví dụ không trival của việc sử dụng tham số PassThru để thiết lập PassThru của một lệnh khác. – Rynant