变量可以临时保存数据,因此可以把数据保存在变量中,以便进一步操作。

  1. #定义变量
  2. $a=10
  3. $b=4
  4. #计算变量
  5. $result=$a*$b
  6. $msg="保存文本"
  7. #输出变量
  8. $result
  9. $msg
  10. 40
  11. 保存文本

powershell 不需要显示地去声明,可以自动创建变量,只须记住变量的前缀为$.
创建好了变量后,可以通过变量名输出变量,也可以把变量名存在字符串中。但是有个例外单引号中的字符串不会识别和处理变量名。

选择变量名

在powershell中变量名均是以美元符”$”开始,剩余字符可以是数字、字母、下划线的任意字符,并且powershell变量名大小写不敏感($a和$A 是同一个变量)。
某些特殊的字符在powershell中有特殊的用途,一般不推荐使用这些字符作为变量名。当然你硬要使用,请把整个变量名后缀用花括号括起来。

  1. PS C:\test> ${"I"like $}="mossfly"
  2. PS C:\test> ${"I"like $}
  3. mossfly

赋值和返回值

赋值操作符为“=”,几乎可以把任何数据赋值给一个变量,甚至一条cmdlet命令
,为什么,因为Powershell支持对象,对象可以包罗万象。

  1. PS C:\test> $item=Get-ChildItem .
  2. PS C:\test> $item
  3. Directory: C:\test
  4. Mode LastWriteTime Length Name
  5. ---- ------------- ------ ----
  6. d---- 2011/11/23 17:25 ABC
  7. -a--- 2011/11/24 18:30 67580 a.html
  8. -a--- 2011/11/24 20:04 26384 a.txt
  9. -a--- 2011/11/24 20:26 12060 alias
  10. -a--- 2011/11/24 20:27 12060 alias.ps1
  11. -a--- 2011/11/23 17:25 0 b.txt
  12. -a--- 2011/11/23 17:25 0 c.txt
  13. -a--- 2011/11/23 17:25 0 d.txt
  14. -a--- 2011/11/25 11:20 556 employee.xml
  15. -a--- 2011/11/24 17:37 7420 name.html
  16. -a--- 2011/11/28 15:30 63 ping.bat
  17. -a--- 2011/11/24 17:44 735892 Powershell_Cmdlets.html
  18. -a--- 2011/11/28 17:03 60 test.ps1
  19. -a--- 2011/11/23 17:37 242 test.txt
  20. -a--- 2011/11/28 16:42 170 test.vbs
  21. PS C:\test> $result=3000*(1/12+0.0075)
  22. PS C:\test> $result
  23. 272.5

给多个变量同时赋值

赋值操作符不仅能给一个变量赋值,还可以同时给多个变量赋相同的值。

  1. PS C:\test> $a=$b=$c=123
  2. PS C:\test> $a
  3. 123
  4. PS C:\test> $b
  5. 123
  6. PS C:\test> $c
  7. 123

交换变量的值

要交换两个变量的值,传统的程序语言至少需要三步,并且还需定义一个中间临时变量。

  1. $Value1 = 10
  2. $Value2 = 20
  3. $Temp = $Value1
  4. $Value1 = $Value2
  5. $Value2 = $Temp

在powershell中,交换两个变量的值,这个功能变得非常简单。

  1. PS C:\test> $value1=10
  2. PS C:\test> $value2=20
  3. PS C:\test> $value1,$value2=$value2,$value1
  4. PS C:\test> $value1
  5. 20
  6. PS C:\test> $value2
  7. 10

查看正在使用的变量

Powershell将变量的相关信息的记录存放在名为variable:的驱动中。如果要查看所有定义的变量,可以直接遍历variable:

  1. PS C:\test> ls variable:
  2. Name Value
  3. ---- -----
  4. "I"like $ mossfly
  5. $ cls
  6. ? True
  7. ^ cls
  8. _
  9. 1 1
  10. a 123
  11. args {}
  12. b 123
  13. c 123
  14. ConfirmPreference High
  15. ConsoleFileName
  16. DebugPreference SilentlyContinue
  17. 。。。

查找变量

因为有虚拟驱动variable:的存在,可以象查找文件那样使用通配符查找变量。例如要查询以value打头的变量名。

  1. PS C:\test> ls variable:value*
  2. Name Value
  3. ---- -----
  4. value1 20
  5. value2 10

验证变量是否存在

验证一个变量是否存在,仍然可以象验证文件系统那样,使用cmdlet Test-Path。为什么?因为变量存在变量驱动器中。

  1. PS C:\test> Test-Path variable:value1
  2. True
  3. PS C:\test> Test-Path variable:value2
  4. True
  5. PS C:\test> Test-Path variable:valueUnkonw
  6. False

删除变量

因为变量会在powershell退出或关闭时,自动清除。一般没必要删除,但是你非得删除,也可以象删除文件那样删除它。

  1. PS C:\test> Test-Path variable:value1
  2. True
  3. PS C:\test> del variable:value1
  4. PS C:\test> Test-Path variable:value1
  5. 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选项 在创建变量时,给变量加上只读属性,这样就不能给变量重新赋值了。

  1. PS C:\test> New-Variable num -Value 100 -Force -Option readonly
  2. PS C:\test> $num=101
  3. Cannot overwrite variable num because it is read-only or constant.
  4. At line:1 char:5
  5. + $num <<<< =101 + CategoryInfo : WriteError: (num:String) [], SessionStateUnauthorizedAccessException + FullyQualifiedErrorId : VariableNotWritable PS C:\test> del Variable:num
  6. Remove-Item : Cannot remove variable num because it is constant or read-only. If the variable is read-only,
  7. ration again specifying the Force option.
  8. At line:1 char:4
  9. + del <<<< Variable:num
  10. + CategoryInfo : WriteError: (num:String) [Remove-Item], SessionStateUnauthorizedAccessExcepti
  11. + FullyQualifiedErrorId : VariableNotRemovable,Microsoft.PowerShell.Commands.RemoveItemCommand

但是可以通过删除变量,再重新创建变量更新变量内容。

  1. PS C:\test> del Variable:num -Force
  2. PS C:\test> $num=101
  3. PS C:\test> $num
  4. 101

有没有权限更高的变量,有,那就是:选项Constant,常量一旦声明,不可修改

  1. PS C:\test> new-variable num -Value "strong" -Option constant
  2. PS C:\test> $num="why? can not delete it."
  3. Cannot overwrite variable num because it is read-only or constant.
  4. At line:1 char:5
  5. + $num <<<< ="why? can not delete it." + CategoryInfo : WriteError: (num:String) [], SessionStateUnauthorizedAccessException + FullyQualifiedErrorId : VariableNotWritable PS C:\test> del Variable:num -Force
  6. Remove-Item : Cannot remove variable num because it is constant or read-only. If the variable is read-only,
  7. ration again specifying the Force option.
  8. At line:1 char:4
  9. + del <<<< Variable:num -Force
  10. + CategoryInfo : WriteError: (num:String) [Remove-Item], SessionStateUnauthorizedAccessExcepti
  11. + FullyQualifiedErrorId : VariableNotRemovable,Microsoft.PowerShell.Commands.RemoveItemCommand

变量描述

在New-Variable 可以通过-description 添加变量描述,但是变量描述默认不会显示,可以通过Format-List 查看。

  1. PS C:\test> new-variable name -Value "me" -Description "This is my name"
  2. PS C:\test> ls Variable:name | fl *
  3. PSPath : Microsoft.PowerShell.CoreVariable::name
  4. PSDrive : Variable
  5. PSProvider : Microsoft.PowerShell.CoreVariable
  6. PSIsContainer : False
  7. Name : name
  8. Description : This is my name
  9. Value : me
  10. Visibility : Public
  11. Module :
  12. ModuleName :
  13. Options : None
  14. Attributes : {}