(8)Powershell中变量的定义和使⽤
(8)Powershell中变量的定义和使⽤
这⼀节主要介绍Powershell中变量的定义和使⽤,以及使⽤变量时应该注意的事项。
和所有编程语⾔中的变量⼀样,Powershell中的变量也是存于存储值的内存单元,需要注意的是,Powershell中的变量是以美元符号($)开头的单字节(⼀般是英⽂字符,虽然ISE中⽀持双字节的字符,但是像任何编程语⾔,我们不⿎励不赞成使⽤中⽂等命名的变量)⽂本字符串表⽰,如 $a, $b 或者是 $my_str。
在Powershell中有3种不同的变量。
⽤户⾃⼰创建的变量
⽤户创建的变量由⽤户创建和维护。默认情况下,在 PowerShell 命令⾏中创建的变量只在当前PowerShell 窗⼝有效。关闭该窗⼝后,变量也会⾃动销毁(再次打开命令窗⼝不再存在,不能再引⽤之前定义的变量)。若要保存变量并使其在窗⼝关闭并再次打开时仍然有效,需要将其添加到 PowerShell 配置⽂件中(但并不建议这么做)。如果是在编写脚本,则可以在脚本中创建具有全局或局部作⽤域的变量。
⾃动变量
⾃动变量也称为内置变量,⽤于存储 PowerShell 的⼀些状态信息。这些变量由 PowerShell 创建和维护,PowerShell 根据需要更改变量值以保持其准确性。⽤户不能更改这些变量的值。例如,$PSHome 变量存储 PowerShell 安装⽬录的路径。
⾸选项变量
⾸选项变量就是Powershell当前命令窗⼝环境的⾸选项设置,这些变量由Powershell创建,并以默认值填充,⽤户可以更改这些变量的值,如 $MaximumHistoryCount 是历史记录的最⼤条数。
变量的定义和使⽤
创建(定义)新变量或更改变量的值,请使⽤以下格式的赋值语句
$<variable> = <value>
例如以下定义了字符串变量 $myStr 并修改了其值。如果要显⽰变量的值,直接输⼊变量的名称,包括美元符号$。
PS C:\> $myStr="This variables defined by user"
PS C:\> $myStr
This variables defined by user
PS C:\> $myStr="user has changed the value of this variables"
PS C:\> $myStr
user has changed the value of this variables
在定义和使⽤变量时,可以使⽤单引号和双引号,但需要注意单引号和双引号的区别。
powershell创建目录
PS C:\> $myStr='this is string variables'
PS C:\> $youStr='your want to display the $myStr'
PS C:\> $youStr
your want to display the $myStr
注意上⾯的变量定义使⽤的单引号,变量 $youStr 中的变量 $myStr 并没有替换为其所代表的值,⽽是直接输出,意味单引号中的内容会直接输出,不做变量值的替换。
PS C:\> $myStr="this is string variables"
PS C:\> $youStr="your want to display the $myStr"
PS C:\> $youStr
your want to display the this is string variables
注意上边的变量的定义使⽤的双引号,变量$youStr 中的变量 $myStr 会替换为其所代表的值,意味着双引号中的变量名在会替换为变量所代表的值。
如果需要在双引号表⽰的变量中输出变量名,即 $youStr="your want to display the $myStr" 你不想让变量 $youStr 中的 $myStr 发⽣替换,则需要在变量名之前添加英⽂符号倒引号"`"进⾏转义,在英⽂输⼊状态下,这个键位于"Esc"键的下⾯,注意下⾯命令的输出内容。
PS C:\> $myStr="this is string variables"
PS C:\> $youStr="your want to display the `$myStr"
PS C:\> $youStr
your want to display the $myStr
变量的保存
⽤户创建的变量只在当前会话中可⽤,关闭会话(当前命令窗⼝)变量将丢失。如果需要保存变量,就需要将其保存在配置⽂件中,配置⽂件中的变量将在命令窗⼝打开时⾃动加载,将会添加所有的会话中。
可以在命令⾏输⼊ $profile 来查看配置⽂件的路径。
例如,如果需要修改 $VerbosePreference 变量的值为 "Continue" (默认是"SilentlyContinue"),可以再命令⾏输⼊ $profile 到配置⽂件的路径,通过Notepad等⽂本编辑器进⾏修改,或是利⽤ Add-Content 进⾏修改。
以下命令将 $VerbosePreference 变量的新值添加到"CurrentUser,AllHosts"配置⽂件中
add-content -path $profile.CurrentUserAllHosts -value '$VerbosePreference = "Continue"'
包含特殊字符的变量名称
如果变量中包含特殊字符,可以使⽤⼤括号{} 强制Powershell按字⾯解释变量名称,如果要定义或是引⽤包含特殊字符(如短划线,句点,冒号,圆括号)的变量,这会⾮常有⽤。
PS C:\> ${this is string array}="a","b","c"
PS C:\> ${this is string array}
a
b
c
以上命令定义了的变量名是 ${this is string array}。
如要引⽤的变量名称包含圆括号,⽤⼤括号将变量名称括起来
PS C:\> Get-ChildItem ${env:ProgramFiles(x86)}
⽬录: C:\
Mode                LastWriteTime    Length Name
----                -------------    ------ ----
d----          2012-8-7    11:40            Documents and Settings
d----        2016-10-29    21:35            DTLFolder
...
如果要引⽤变量名称包含⼤括号,⽤⼤括号将变量名称括起来,变量内部的⼤括号之前添加倒引号"`"字符转义⼤括号,倒引号是在引⽂输⼊状态下,键盘上"Esc"下⾯的按键,这个类似于上⽂讲到的如果在双引号中不想对变量名称替换为值时添加的倒引号。
PS C:\> ${this`{value`}is} = 1
PS C:\> ${this`{value`}is}
1
总结
关于变量,需要注意的是,Powershell中的变量可以使⽤特殊字符,另外Powershell中的变量可以存储任何类型的对象,整数,字符串,数组,哈希表,服务,进程,事件⽇志等,即可以将任何⼀条命令的执⾏结果赋值给⼀个变量。最后,在定义变量时,不能定义与内置变量名称⼀样的变量,因为内置变量是只读,不允许⽤户更改,会在中讲到Powershell中都包含哪些内置变量。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。