Powershell 函数中的CmdletBinding()是怎么回事?
参考文章:
Don Jones https://technet.microsoft.com/en-us/library/ff677563.aspx
powershell 帮助文档:
help about_functions_advanced_parameters
help about_common_parameters
把这三部分内容都看完了,应该也大概了解函数中的CmdletBinding()是做什么用的了,官方的文档都是英文的,看起来一般会头大。以下就是我用通俗的语言来做的描述,更简单易懂一些。
这个功能的引入是从Powershell Version 2开始的,叫做函数的高级功能,在函数的声明出启用以后,可以调用我们所说的通用参数:
-Verbose
-Debug
-ErrorAction
-WarningAction
-ErrorVariable
-WarningVariable
-OutVariable
-OutBuffer
-PipeLineVariable
通过放在函数开始部分可以很简单的启用访问这些通用参数。如下所示:
[CmdletBinding()]
param()
启用这个高级属性以后,就可以很容易的通过像使用命令行一样,给函数添加一些命令行的特色,调用命令很的通用参数。以下是一个最简单的例子,打开一个ISE,把以下的内容复制下去:
function Go-Advanced {
[cmdletbinding()]param()
}
param() 这个关键字还是必须要有的,即使你没有在函数中定义任何参数;
尝试运行一下这个函数,然后再打一下中横线,怎么样,就看到能够调用的这些通用参数了吧。

以下举几个例子来调用这些通用参数,先来说说Verbose的用法。
还是在ISE中输入以下代码
FunctionGo-Verbose{
[CmdletBinding()]Param()
Write-Verbose"Alright, you prefer talkative functions. First of all, I appreciate your wish to learn more about the common parameter -Verbose. Secondly, blah blah.."
Write-Host"This is self-explanatory, anyway."
}
再执行以下,看看是不是以下结果,通过这个例子,你就明白verbose是怎么出来的,这个单词是很难翻译的,只能是通过例子弄明白是什么意思。

再举一个例子,就是调用ShouldContinue这个方法,这个在写程序时还是很重要的,比如你想做一些破坏性的操作,程序写的健壮是一定要跳一个框出来,问一下再去执行,那种SilientContinue做法不推荐。
以下还是代码:

这段代码还是要在函数执行时加一个 -confirm参数的。如果想不加这个参数也要跳出这个框来,这样就需要一个额外的操作。把环境变量$ConfirmPreferece 设置成低。看以下代码和执行效果。
FunctionRemove-ByForce{
[CmdletBinding(SupportsShouldProcess)]
Param([String]$File)
$ConfirmPreference="Low"
If($PSCmdlet.ShouldContinue("Are you sure that you know what you are doing?","Delete with -Force parameter!")){
Remove-Item$File-Force
}Else{
"Mission aborted!"
}
}
Remove-ByForce test

以上就是两个基本的例子,接下来的文章会讨论
param()中的[parameter()]对变量的影响。
Powershell 函数中的CmdletBinding()是怎么回事?的更多相关文章
- 技术分享:如何在PowerShell脚本中嵌入EXE文件
技术分享:如何在PowerShell脚本中嵌入EXE文件 我在尝试解决一个问题,即在客户端攻击中只使用纯 PowerShell 脚本作为攻击负荷.使用 PowerShell 运行恶意代码具有很多优点, ...
- 在信号处理函数中调用longjmp
错误情况及原因分析 前两天看APUE的时候,有个程序要自己制作一个sleep程序,结果在这个程序中就出现了在信号处理函数中调用longjmp函数的情况,结果就出现了错误,具体错误是啥呢,请参见下面这段 ...
- PowerShell 函数
PowerShell 中函数是一系列 PowerShell 语句的组合.当你通过函数的名称调用函数时,函数中的语句会被顺序的执行,就像在命令行中执行它们一样. 从 hello world 开始 fun ...
- ES6 箭头函数中的 this?你可能想多了(翻译)
箭头函数=>无疑是ES6中最受关注的一个新特性了,通过它可以简写 function 函数表达式,你也可以在各种提及箭头函数的地方看到这样的观点——“=> 就是一个新的 function”. ...
- 为什么不能在init和dealloc函数中使用accessor方法
前言 为什么不要在init和dealloc方法中调用getter和setter:Apple在Mac与iOS中关于内存管理的开发文档中,有一节的题目为:"Don'tUse Accessor M ...
- js函数中this的不同含义
1.js函数调用过程中,js线程会进入新的执行环境并创建该环境的变量对象,并添加两个变量:this和arguments,因此可以在函数中使用这两个变量.需要注意的是,this变量不能重新赋值,而arg ...
- c++中函数中变量内存分配以及返回指针、引用类型的思考
众所周知,我们在编程的时候经常会在函数中声明局部变量(包括普通类型的变量.指针.引用等等). 同时,为了满足程序功能的需要,函数的返回值也经常是指针类型或是引用类型,而这返回的指针或是引用也经常指向函 ...
- C++程序设计(关于函数中数组传递的一点心得)
题目: 10个学生考完期末考试评卷完成后,老师需要划出及格线,要求如下: (1) 及格线是10的倍数: (2) 保证至少有60%的学生及格: (3) 如果所有的学生都高于60分,则及格线为60分: ...
- Javascript函数中的高级运用
先介绍一下js中的高阶函数,所谓的高阶函数就是,一个函数中的参数是一个函数或者返回的是一个函数,就称为高阶函数. js中已经提高了一下高阶函数,使用起来非常棒,当然我们也可以自己实现,我介绍几种ES5 ...
随机推荐
- win10下rdlc报表在vs(visual studio)中中文显示小方块的批量处理解决方法
在网上找vs中rdlc报表显示中文时显示小方块的解决方案,无外就是修改文本框的字体属性.但是对于维护已有的rdlc报表时,有中文的地方(此时都显示了小方块)会很多,再一个一个设置实在太麻烦.所以自己花 ...
- Mysql外键的使用
MySQL外键(请确保数据库是innodb类型)网上有很多介绍的文章,这里我就凭自己的理解再次整理了下,废话不多说,直入正题哈.外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据 ...
- USGS-EROS项目espa-surface-reflectance中的Landsat8 大气校正LaSRC Version 1.3.0模块利用vs2010编译出windows64位版本(四)
,支持一些关键问题: 1 数据初始化问题.该问题是指在linux环境下编程标准c并编译,用户定义的变量默认初始值是0,但在windows 64 win7环境中,变量默认初始值是负值极小.... ...
- getDimension与getDimensionPixelOffset与getDimensionPixelSize的区别
getDimension() 返回float型px值 精确 getDimensionPixelOffset() 返回int型px值 ...
- Android BroadcastReceiver 接收收到短信的广播
一.知识介绍 1.broadcastReceiver是广播接受者,四大组件之一. 2.Android中内置了很多系统级别的广播,可以在应用程序中得到各种系统的状态信息. 3.使用场景: ①当手机没有电 ...
- linux备份还原命令
使用范围:1.可以作为系统还原点,还原到备份时的状态 2.系统完全损坏后无法启动,通过引导盘恢复 一.备份还原系统命令 方法一: 备份:tar cvpzf backup.tgz --exclude=/ ...
- Windows 更快捷方便的安装软件,命令提示符上安装 Chocolatey
在命令提示符上安装 Chocolatey @powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-o ...
- Sql Server 获取本周周一
SELECT DATEADD(Day,(@i+1)-(DATEPART(Weekday,getdate())+@@DATEFIRST-1)%7,getdate())
- c/c++ 重载运算符 基本概念
重载运算符 基本概念 问题:对于int,float可以进行算数运算,但是对于一个自定义的类的对象进行算术运算,就不知道具体怎么运算了. 所以有了自定义运算符的概念. 1,自定义运算符其实就是一个以op ...
- c/c++ 多线程 thread_local 类型
多线程 thread_local 类型 thread_local变量是C++ 11新引入的一种存储类型. thread_local关键字修饰的变量具有线程周期(thread duration), 这些 ...