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 ...
随机推荐
- windows server 2012/2016 设置多用户远程桌面(转载)
方案一: 该方案只能满足两个人同时远程. 方案二: https://blog.csdn.net/flyingshuai/article/details/77869279
- Java集合类源码解析:ArrayList
目录 前言 源码解析 基本成员变量 添加元素 查询元素 修改元素 删除元素 为什么用 "transient" 修饰数组变量 总结 前言 今天学习一个Java集合类使用最多的类 Ar ...
- java开发环境配置——IntelliJ IDEA
关于开发工具,之前是用eclipse,后来用了一段时间idea后,发现idea比eclipse好用太多了,所以推荐大家用idea 官网下载地址:https://www.jetbrains.com/id ...
- jsp基础语言-jsp表达式
1.jsp表达式作用:将动态信息显示在页面中. 2.jsp表达式语法:<%=变量或表达式%> 变量:要在页面显示的值的变量名 表达式:其值由服务器计算,计算结果以字符串的形式发送到客户端 ...
- linux学习笔记-配置vbox虚拟机本地连接和外网同时可用
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 在设置网络里面启用两个网卡,一个桥接,一个网络地址转换 archlinux系统下第一个网络地址转换,第二个桥接 centos7系 ...
- 我的新书《Android App开发从入门到精通》终于出版啦
前言 经过了两年多终于完成了这本书,2016年9月份开始写的,到今天为止2年零2个月,本书的内容大部分是去年完成的,看过我去年总结的读者可能知道,去年事情很多太忙了,导致本命年这本书没有上架(有点小小 ...
- 安卓基础之通过Intent跳转Activity
通过Intent跳转Activity 一.通过意图开启Activity的方式: 隐式意图:通过指定一组数据或者动作实现 Intent intent=new Intent(); intent.s ...
- SVN下载与安装
首先打开浏览器上百度搜索“SVN”如下图: 或者点击:https://tortoisesvn.net/downloads.html 打开后链接后选择Downloads,选择需要下载的版本,比如我电脑是 ...
- git 更新分支的信息
假如服务器的某个分支删除了,但是本地通过git branch -av还是可以看得到,感觉很烦,通过以下命令就可以更新分支的情况. git fetch origin --prune
- c/c++浮点数在内存中存储方式
转自:https://www.cnblogs.com/dolphin0520/archive/2011/10/02/2198280.html 任何数据在内存中都是以二进制的形式存储的,例如一个shor ...