powershell系列学习笔记二:变量
定义变量
$a=10 $b=4 $str="字符串"
定义好了变量名后,可以通过变量名来输出变量
变量也可以放在字符串中,但是这里要注意的是,单引号中的变量不会被识别和处理,在powershell中,对变量名的大小写是不敏感的,也就是说$a和$A是同一个变量。
赋值
通过“=”来赋值,powershell几乎可以把任何一个值赋给变量,即使是命令也可以。
powershell也可以多个变量同时赋值
$a=$b=$c=10
powershell交换两个变量的值,用这种格式就可以交换
Powershell将变量的相关信息的记录存放在名为variable:的驱动中,查看所有定义的变量:
ls variable:
因为所有变量都是存在于驱动中的,验证变量是否存在:
Test-Path variable:value1
在powershell退出时,所有变量都会被自动删除,但是如果想要删除变量的话,也可以,删除变量:
del variable:value1
powershell自动化变量
是指一打开powershell就会自动加载的变量,比如
- 用户信息:例如用户的根目录$home
- 配置信息:例如powershell控制台的大小,颜色,背景等。
- 运行时信息:例如一个函数由谁调用,一个脚本运行的目录等
powershell中的某些自动化变量只能读,不能写。例如:$Pid
powershell环境变量
powershell中的变量只存在于powershell内部的会话中,一旦powershell关闭,这些变量就会自生自灭。但是如果环境变量被更新了,它会继续保存在操作系统中,即使其它程序也可以调用它
读取特殊环境变量:
$env:windir
"My computer name $env:COMPUTERNAME"
Powershell把所有环境变量的记录保存在env: 虚拟驱动中,因此可以列出所有环境变量 。一旦查出环境变量的名字就可以使用$env:name 访问了。查找环境变量:
ls env:
创建新的环境变量:
$env:TestVar1="This is my environment variable"
删除和更新环境变量:
del env:windir
更新环境变量就直接重新赋值就好了,其实,$env:中的环境变量只是机器环境变量的一个副本,即使你更改了它,下一次重新打开时,又会恢复如初。(.NET方法更新环境变量除外)
powershell驱动器变量
所有不是我们自己定义的变量都属于驱动器变量,例如环境变量。比如env: ,驱动器上的一个”文件”,我们通过$访问它,就会返回”文件”的内容
https://www.pstips.net/powershell-drive-variables.html
powershell变量的作用域
Powershell支持四个作用域:全局、当前、私有和脚本。
比如在脚本中定义一个变量a,它的值是100。在powershell窗口中同样定义一个变量a,它的值为999。
在执行脚本时,会输出a=100,但是在powershell窗口中输出变量a,会输出$a=999。这就是因为作用域不同的原因。
$global
全局变量,在所有的作用域中有效,如果你在脚本或者函数中设置了全局变量,即使脚本和函数都运行结束,这个变量也任然有效。
$script
脚本变量,只会在脚本内部有效,包括脚本中的函数,一旦脚本运行结束,这个变量就会被回收。
$private
私有变量,只会在当前作用域有效,不能贯穿到其他作用域。
$local
默认变量,可以省略修饰符,在当前作用域有效,其它作用域只对它有只读权限。
控制台中的变量能被函数、脚本访问读取到,但是不能更改
使用private可以使变量不被访问到
对于$private限制的变量不能在函数中通过$global修改,不但不能修改,还会删除当前的$private变量
https://www.pstips.net/powershell-scope-of-variables.html
变量的类型和强类型
Powershell会给数据分配一个最佳的数据类型;如果一个整数超出了32位整数的上限([int32]::MaxValue),它就会分配一个64位整数的数据类型;如果碰到小数,会分配一个Double类型;如果是文本,Powershell会分配一个String类型;如果是日期或者时间,会被存储为一个Datetime对象。这种类型自适应称作“弱类型”
https://www.pstips.net/powershell-variable-strongly-typing.html
指定类型变量
强类型的使用也是十分丰富的
PS> $date.DayOfWeek Thursday PS> $date.DayOfYear 355 PS> $date.AddDays(-10) 2012年12月10日 12:45:00
变量的幕后管理
创建一个变量后,会生成一个PSVariable对象,这个对象不仅存储了变量的值,还存储了变量的其他信息,比如描述($var.Description)等
https://www.pstips.net/powershell-variable-management-behind-the-scenes.html
查看这个PSVariable对象
Get-Variable var | fl * 或者 $var | fl *