Powershell:如何实现标准开关?

Posted

技术标签:

【中文标题】Powershell:如何实现标准开关?【英文标题】:Powershell: how to implement standard switches? 【发布时间】:2011-10-19 09:36:00 【问题描述】:

对于像 -WhatIf 这样的事情,我们有 $PSCmdlet.ShouldProcess() 由 [CmdletBinding] 属性提供给我们。是否还有其他此类工具或实践可用于实现常见的命令行参数,例如 -Verbose、-Debug、-PassThru 等?

【问题讨论】:

【参考方案1】:

Write-DebugWrite-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:如何实现标准开关?的主要内容,如果未能解决你的问题,请参考以下文章

如何将开关参数传递给另一个 PowerShell 脚本?

如何使用 Material (CosmicMind) 实现开关动作

PowerShell如何实现Desktop版本到5.1的升级

TP-link路由器如何实现定时开关

Powershell 如何批量获取文件大小的实现代码

PowerShell如何实现Desktop版本到5.1的升级