Powershell:如何实现标准开关?
Posted
技术标签:
【中文标题】Powershell:如何实现标准开关?【英文标题】:Powershell: how to implement standard switches? 【发布时间】:2011-10-19 09:36:00 【问题描述】:对于像 -WhatIf 这样的事情,我们有 $PSCmdlet.ShouldProcess() 由 [CmdletBinding] 属性提供给我们。是否还有其他此类工具或实践可用于实现常见的命令行参数,例如 -Verbose、-Debug、-PassThru 等?
【问题讨论】:
【参考方案1】:Write-Debug
和 Write-Verbose
自动处理 -Debug
和 -Verbose
参数。
-PassThru
在技术上不是一个通用参数,但您可以像这样实现它:
function PassTest
param(
[switch] $PassThru
)
process
if($PassThru) $_
1..10|PassTest -PassThru
这是在 cmdlet 上使用函数的 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)。 是的,'PassTest` 不是一个有用的函数;只是一个简单的例子来说明如何实现-PassThru
。另外,您也有可能对输入变量做一些事情,但通过原始值保持不变(例如$_.Kill();if($PassThru)$_
)。我添加了一个使用 PassThru 参数设置另一个命令的 PassThru 的重要示例。以上是关于Powershell:如何实现标准开关?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Material (CosmicMind) 实现开关动作