今天我们来看下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-Process
Handles 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 -ExpandProp
erty processname}}
PS C:\Users\Administrator> Get-Process
Handles 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> $PSDefaultParameterValues
Name 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> $PSDefaultParameterValues
Name 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")
PS C:\Users\Administrator> $PSDefaultParameterValues
Name Value
---- -----
Get-Process:Name (Get-Process -Id 1204)|select processname
Get-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> $PSDefaultParameterValues
Name Value
---- -----
Get-Process:Name (Get-Process -Id 1204)|select processname
Get-Content:Path C:\XMLSample\New Text Document.txt
Disabled True
PS C:\Users\Administrator> get-process
Handles 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