Windows Powershell 定义变量
变量可以临时保存数据,因此可以把数据保存在变量中,以便进一步操作。
#定义变量 $a=10 $b=4 #计算变量 $result=$a*$b $msg="保存文本" #输出变量 $result $msg 40 保存文本
powershell不需要显示地去声明,可以自动创建变量,只须记住变量的前缀为$.
创建好了变量后,可以通过变量名输出变量,也可以把变量名存在字符串中。但是有个例外单引号中的字符串不会识别和处理变量名。
选择变量名
在powershell中变量名均是以美元符”$”开始,剩余字符可以是数字、字母、下划线的任意字符,并且powershell变量名大小写不敏感($a和$A是同一个变量)。
某些特殊的字符在powershell中有特殊的用途,一般不推荐使用这些字符作为变量名。当然你硬要使用,请把整个变量名后缀用花括号括起来。
PSC:\test>${"I"like$}="mossfly" PSC:\test>${"I"like$}
mossfly赋值和返回值
赋值操作符为“=”,几乎可以把任何数据赋值给一个变量,甚至一条cmdlet命令
,为什么,因为Powershell支持对象,对象可以包罗万象。
PSC:\test>$item=Get-ChildItem. PSC:\test>$item Directory:C:\test ModeLastWriteTimeLengthName --------------------------- d----2011/11/2317:25ABC -a---2011/11/2418:3067580a.html -a---2011/11/2420:0426384a.txt -a---2011/11/2420:2612060alias -a---2011/11/2420:2712060alias.ps1 -a---2011/11/2317:250b.txt -a---2011/11/2317:250c.txt -a---2011/11/2317:250d.txt -a---2011/11/2511:20556employee.xml -a---2011/11/2417:377420name.html -a---2011/11/2815:3063ping.bat -a---2011/11/2417:44735892Powershell_Cmdlets.html -a---2011/11/2817:0360test.ps1 -a---2011/11/2317:37242test.txt -a---2011/11/2816:42170test.vbs PSC:\test>$result=3000*(1/12+0.0075) PSC:\test>$result 272.5
给多个变量同时赋值
赋值操作符不仅能给一个变量赋值,还可以同时给多个变量赋相同的值。
PSC:\test>$a=$b=$c=123 PSC:\test>$a 123 PSC:\test>$b 123 PSC:\test>$c 123
交换变量的值
要交换两个变量的值,传统的程序语言至少需要三步,并且还需定义一个中间临时变量。
$Value1=10 $Value2=20 $Temp=$Value1 $Value1=$Value2 $Value2=$Temp
在powershell中,交换两个变量的值,这个功能变得非常简单。
PSC:\test>$value1=10 PSC:\test>$value2=20 PSC:\test>$value1,$value2=$value2,$value1 PSC:\test>$value1 20 PSC:\test>$value2 10
查看正在使用的变量
Powershell将变量的相关信息的记录存放在名为variable:的驱动中。如果要查看所有定义的变量,可以直接遍历variable:
PSC:\test>lsvariable: NameValue --------- "I"like$mossfly $cls ?True ^cls _ 11 a123 args{} b123 c123 ConfirmPreferenceHigh ConsoleFileName DebugPreferenceSilentlyContinue 。。。
查找变量
因为有虚拟驱动variable:的存在,可以象查找文件那样使用通配符查找变量。例如要查询以value打头的变量名。
PSC:\test>lsvariable:value* NameValue --------- value120 value210
验证变量是否存在
验证一个变量是否存在,仍然可以象验证文件系统那样,使用cmdletTest-Path。为什么?因为变量存在变量驱动器中。
PSC:\test>Test-Pathvariable:value1 True PSC:\test>Test-Pathvariable:value2 True PSC:\test>Test-Pathvariable:valueUnkonw False
删除变量
因为变量会在powershell退出或关闭时,自动清除。一般没必要删除,但是你非得删除,也可以象删除文件那样删除它。
PSC:\test>Test-Pathvariable:value1 True PSC:\test>delvariable:value1 PSC:\test>Test-Pathvariable:value1 False
使用专用的变量命令
为了管理变量,powershell提供了五个专门管理变量的命令Clear-Variable,Get-Variable,New-Variable,Remove-Variable,Set-Variable。因为虚拟驱动器variable:的存在,clear,remove,set打头的命令可以被代替。但是Get-Variable,New-Variable。却非常有用new-variable可以在定义变量时,指定变量的一些其它属性,比如访问权限。同样Get-Variable也可以获取这些附加信息。
变量写保护
可以使用New-Variable的option选项在创建变量时,给变量加上只读属性,这样就不能给变量重新赋值了。
PSC:\test>New-Variablenum-Value100-Force-Optionreadonly PSC:\test>$num=101 Cannotoverwritevariablenumbecauseitisread-onlyorconstant. Atline:1char:5 +$num<<<<=101+CategoryInfo:WriteError:(num:String)[],SessionStateUnauthorizedAccessException+FullyQualifiedErrorId:VariableNotWritablePSC:\test>delVariable:num Remove-Item:Cannotremovevariablenumbecauseitisconstantorread-only.Ifthevariableisread-only, rationagainspecifyingtheForceoption. Atline:1char:4 +del<<<<Variable:num +CategoryInfo:WriteError:(num:String)[Remove-Item],SessionStateUnauthorizedAccessExcepti +FullyQualifiedErrorId:VariableNotRemovable,Microsoft.PowerShell.Commands.RemoveItemCommand
但是可以通过删除变量,再重新创建变量更新变量内容。
PSC:\test>delVariable:num-Force PSC:\test>$num=101 PSC:\test>$num 101
有没有权限更高的变量,有,那就是:选项Constant,常量一旦声明,不可修改
PSC:\test>new-variablenum-Value"strong"-Optionconstant PSC:\test>$num="why?cannotdeleteit." Cannotoverwritevariablenumbecauseitisread-onlyorconstant. Atline:1char:5 +$num<<<<="why?cannotdeleteit."+CategoryInfo:WriteError:(num:String)[],SessionStateUnauthorizedAccessException+FullyQualifiedErrorId:VariableNotWritablePSC:\test>delVariable:num-Force Remove-Item:Cannotremovevariablenumbecauseitisconstantorread-only.Ifthevariableisread-only, rationagainspecifyingtheForceoption. Atline:1char:4 +del<<<<Variable:num-Force +CategoryInfo:WriteError:(num:String)[Remove-Item],SessionStateUnauthorizedAccessExcepti +FullyQualifiedErrorId:VariableNotRemovable,Microsoft.PowerShell.Commands.RemoveItemCommand
变量描述
在New-Variable可以通过-description添加变量描述,但是变量描述默认不会显示,可以通过Format-List查看。
PSC:\test>new-variablename-Value"me"-Description"Thisismyname" PSC:\test>lsVariable:name|fl* PSPath:Microsoft.PowerShell.CoreVariable::name PSDrive:Variable PSProvider:Microsoft.PowerShell.CoreVariable PSIsContainer:False Name:name Description:Thisismyname Value:me Visibility:Public Module: ModuleName: Options:None Attributes:{}