设置PowerShell中的cmdlet参数默认值

来源:互联网 发布:photoshop有没有mac版 编辑:程序博客网 时间:2024/04/30 11:03

今天我们来看下PowerShell中早在3.0版本的时候就引进的设置默认值功能。

$PSDefaultParameterValues主要是为Cmdlet和高级函数指定设置自定义值,下来让我们通过几个例子详细看看具体如何使用。

我们可以使用如下基本语法为Cmdlet的默认值设置指定的默认值。

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


下面的例子中,$PSDefaultParameterValues为Get-Process的Name属性设置了一个默认值为notepad的值,当我们再次输入Get-Process不配合任何参数,你将会看到它默认输出了notepad的信息。

PS C:\Users\Administrator> $PSDefaultParameterValues = @{"Get-Process:Name" = "notepad"}PS C:\Users\Administrator> Get-ProcessHandles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName-------  ------    -----      ----- -----   ------     -- -----------     87       7     1368       5916 ...50     0.11   1204 notepad


当然我们不仅可以设置单纯的默认值还可以以语句块的方式去设置默认值,如下。

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

在这里,我们做了一些特殊的修改,把一个表达式写入语句块里并把这个得到的值再复制给Name属性,输出结果和上一个例子相同。

PS C:\Users\Administrator> $PSDefaultParameterValues = @{"Get-Process:Name" = {(Get-Process -Id 1204)|select -ExpandProperty processname}}PS C:\Users\Administrator> Get-ProcessHandles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName-------  ------    -----      ----- -----   ------     -- -----------     87       7     1368       5916 ...50     0.11   1204 notepad


那么如何查看当前设置了哪些默认值呢?很简单,直接输入$PSDefaultParameterValues

PS C:\Users\Administrator> $PSDefaultParameterValuesName                           Value----                           -----Get-Process:Name               (Get-Process -Id 1204)|select -ExpandProperty processname

那么如果想要多次为$PSDefaultParameterValues默认值又改怎么做呢,直接设置可以吗?我们来试试看看:

PS C:\Users\Administrator> $PSDefaultParameterValues = @{"Get-Process:Name" = {(Get-Process -Id 1204)|select processname}}PS C:\Users\Administrator> $PSDefaultParameterValues = @{"Get-Content:Path" = "C:\XMLSample\New Text Document.txt"}PS C:\Users\Administrator> $PSDefaultParameterValuesName                           Value----                           -----Get-Content:Path               C:\XMLSample\New Text Document.txt
很显然,当你在直接输出$PSDefaultParameterValues的时候,它的值被最后一次的命令设定给覆盖了,如果想要多次设置$PSDefaultParameterValues的默认值我们应该使用它的Add方法,如下:

PS C:\Users\Administrator> $PSDefaultParameterValues = @{"Get-Process:Name" = {(Get-Process -Id 1204)|select processname}}PS C:\Users\Administrator> $PSDefaultParameterValues.Add("Get-Content:Path","C:\XMLSample\New Text Document.txt")


当我们再次输出$PSDefaultParameterValues,你会看到它已经包含多了多个设置值了。
PS C:\Users\Administrator> $PSDefaultParameterValuesName                           Value----                           -----Get-Process:Name               (Get-Process -Id 1204)|select processnameGet-Content:Path               C:\XMLSample\New Text Document.txt

关闭$PSDefaultParameterValues默认值功能,只需要设置它的 Disbaled 键值为$true就行了,即便当我们在如下例子中在使用Get-Process查看的时候,它原先的默认值功能已经不起作用了,输出了所有的信息。

PS C:\Users\Administrator> $PSDefaultParameterValues.Add("Disabled", $true)PS C:\Users\Administrator> $PSDefaultParameterValuesName                           Value----                           -----Get-Process:Name               (Get-Process -Id 1204)|select processnameGet-Content:Path               C:\XMLSample\New Text Document.txtDisabled                       TruePS C:\Users\Administrator> get-processHandles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName-------  ------    -----      ----- -----   ------     -- -----------    113      20    12408      16724 ...68     0.19   2756 calc     54       9     1068       4620 ...17     0.03   1672 conhost     42       7      792       3248 ...09     0.00   2224 conhost     78      10     2320      18260 ...31     1.17   2996 conhost    257      11     1780       3808    47     0.42    320 csrss    327      25     2228      85032   246     8.36    388 csrss    196      13     3256      10692 ...01     0.08   2032 dllhost    306      51    95356     150892 ...92    11.81    688 dwm   1455     118    53088     142576 ...11    34.67   2268 explorer      0       0        0          4     0               0 Idle    678      56    34128      62972   305     4.33   1640 iexplore


0 0