14
-WhatIfのようなものについては、[CmdletBinding]属性によって私たちに$ PSCmdlet.ShouldProcess()が与えられています。 -Verbose、-Debug、-PassThruなどの共通のコマンドライン引数を実装するためのツールやプラクティスは他にもありますか?Powershell:標準のスイッチを実装する方法は?
-WhatIfのようなものについては、[CmdletBinding]属性によって私たちに$ PSCmdlet.ShouldProcess()が与えられています。 -Verbose、-Debug、-PassThruなどの共通のコマンドライン引数を実装するためのツールやプラクティスは他にもありますか?Powershell:標準のスイッチを実装する方法は?
Write-Debug
およびWrite-Verbose
は、-Debug
および-Verbose
のパラメータを自動的に処理します。
-PassThru
は、技術的に共通のパラメータではありませんが、あなたはそれが好きで実装できます。
function PassTest {
param(
[switch] $PassThru
)
process {
if($PassThru) {$_}
}
}
1..10|PassTest -PassThru
そして、これは、コマンドレットにあなたの関数のパススルーの値を使用する例です:
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
を持っています詳細についてはGet-Help about_CommonParameters
をご覧ください。
私はあなたが入力変数を保存し、何かをして、最後に保存された変数をパススルーしたいと思うかもしれません($ passthruの場合)。 – Matt
はい、 'PassTest'は便利な機能ではありません。単に '-PassThru'をどのように実装できるかを示すためのほんの例です。さらに、入力変数で何かをすることもできますが、元の値を変更せずにパススルーすることもできます(例: '$ _。Kill(); if($ PassThru){$ _}')。 PassThruパラメータを使用して別のコマンドのPassThruを設定するという非trivalの例を追加しました。 – Rynant