学习PowerShell 3.0中新增的$PSDefaultParameterValues变量

来源:互联网 发布:php curl跨域 编辑:程序博客网 时间:2024/06/04 20:18

在PowerShell中新增了许多Perference Variable,今天要特别介绍的是标题中提到的$PSDefaultParameterValues变量。

顾名思义该变量的作用就像名字中看到的那样,可以用来作为默认的参数值,预先设置好默认参数值,在特定的环境中或者测试中显得尤为方便,下面让我们看看如何使用。

 

常用的语法大致有如下两种:

$PSDefaultParameterValues=@{"<CmdletName>:<ParameterName>"="<DefaultValue>"}$PSDefaultParameterValues=@{"<CmdletName>:<ParameterName>"={<ScriptBlock>}}

 

如下,我们试着给Get-Process命令设置一个Name默认参数值。

$PSDefaultParameterValues = @{"Get-Process:Name"="Notepad"}

我们可以看到,当设置好默认参数值后,当你再次运行Get-Process的时候将出现预先设置好的参数值,也就是直接得出了你想要的筛选结果。

 

当然你也可以同时设定多个参数值,只需要以 “;” 分隔。

 

如何使用脚本块设定预先值

接下来,再来让我们看看它是如何支持脚本块预先参数设定的。

 

以脚本块模式设定参数值其实很简单,只需要按照表达式 @{"<CmdletName>:<ParameterName>"={<ScriptBlock>}}  将语句块的内容替换<ScriptBlock>就行,不过细心的朋友会发现我们在如上图的例子中却多了一对{}大括号,这是为什么呢? 其实很好理解,因为我们的例子中,所用的的命令是Invoke-Command, 而该命令对于参数 -ScriptBlock的用法为:Invoke-Command -ScirptBlock {Get-Process}, 所以正确的方式,理应是把“{Get-Process}” 替换到<ScriptBlock>上。

 

添加一个值到$PSDefaultParameterValues

大家在测试中一定会发现,当我们在进行多个预先值设定后,在输出$PSDefaultParameterValues时会发现,先前的设定都被覆盖了。尽管我们可以通过之前讲到的";"分号来进行大批量的针对不同命令的预先值设定,但是一旦进行下一次命令设定时系统就会把上一次的操作给覆盖掉,有什么办法吗? 当然有,我们可以使用Add()方法,如下图所以:

以哈希表的凡是添加值即可。

<HashTable>.Add(Key, Value)

 

删除$PSDefaultParameterValues中的值

理所当然,有Add方法也自然有Remove方法,Remove方法删除值的时候,只需要键入欲删除的参数名即可,如下图所示:

 

最后我们要说一个尤其有趣又重要的一点。有一种情况,当用户想要设置另一种环境,但是又不想抹去先前设定 大批量 设定值,那该如何是好?很简单$PSDefaultParameterValues在这里考虑到了这点,我们可以临时将他禁用起来,当你希望的时候在打开,看看下面吧:

当我们设置为Disable后,当再次运行Invoke-Command,则变回以往正常模式中那样提示你输入参数值了。

原创粉丝点击