.ps1文件是PowerShell写好的脚本文件
可以在记事本中写一段PowerShell代码,然后将其保存为“xxx.ps1”,后面要使用它的时候,双击即可运行了。这有点像批处理的“.bat”文件,也有点像VBScript的“.vbs”文件。这些都是Windows的脚本文件。
Powershell 是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境。
powershell需要.NET环境的支持,同时支持.NET对象。微软之所以将Powershell 定位为Power,并不是夸大其词,因为它完全支持对象。其可读性,易用性,可以位居当前所有shell之首。
cmdlets是Powershell的内部命令,cmdlet的类型名为System.Management.Automation.CmdletInfo
别名
有两个作用:
- 继承:继承unix-shell和windows-cmd。
- 方便:方便用户使用。
象运行可执行文件一样,Powershell运行文件和脚本
必须使用绝对路径或者相对路径,或者要运行的文件必须定义在可受信任的环境变量中。
脚本和批处理都属于伪可执行文件,它们只是包含了若干命令行解释器能够解释和执行的命令行代码。
批处理文件
扩展名为”.bat”的文本文件
可以包含任何cmd控制台能够处理的命令。当批处理文件被打开,Cmd控制台会逐行执行每条命令。
通过cmd进入cmd控制台输入ping发现执行的不是ping命令,而是直接运行ping.bat ,也就是说可以通过.bat 覆盖cmd命令。这种机制很危险,如果有人侵入电脑,并将系统内部命令篡改成自己批处理,那就太悲剧了。 这种命令与脚本的混淆不会发生在powershell中,因为powershell有更安全的机制。
VB脚本文件
扩展名为”.vbs”的文本文件
powershell脚本
扩展名为“.ps1”
Powershell调用入口的优先级
别名:控制台首先会寻找输入是否为一个别名,如果是,执行别名所指的命令。因此我们可以通过别名覆盖任意powershell命令,因为别名的优先级最高。
函数:如果没有找到别名,会继续寻找函数,函数类似别名,只不过它包含了更多的powershell命令。因此可以自定义函数扩充cmdlet 把常用的参数给固化进去。
命令:如果没有找到函数,控制台会继续寻找命令,即cmdlet,powershell的内部命令。
脚本:没有找到命令,继续寻找扩展名为“.ps1”的Powershell脚本。
文件:没有找到脚本,会继续寻找文件,如果没有可用的文件,控制台会抛出异常。
变量
powershell 不需要显示地去声明,可以自动创建变量
变量的前缀为$
单引号中的字符串不会识别和处理变量名,变量名均是以美元符”$”开始,剩余字符可以是数字、字母、下划线的任意字符
变量名大小写不敏感
某些特殊的字符在powershell中有特殊的用途,一般不推荐使用这些字符作为变量名。当然你硬要使用,请把整个变量名后缀用花括号括起来
不仅能给一个变量赋值,还可以同时给多个变量赋相同的值
交换两个变量的值,这个功能变得非常简单(PS C: est> $value1,$value2=$value2,$value1)
将变量的相关信息的记录存放在名为variable:的驱动中。如果要查看所有定义的变量,可以直接遍历variable:(PS C: est> ls variable:)
因为有虚拟驱动variable:的存在,可以象查找文件那样使用通配符查找变量。例如要查询以value打头的变量名。(PS C: est> ls variable:value*)
验证一个变量是否存在,仍然可以象验证文件系统那样,使用cmdlet Test-Path。为什么?因为变量存在变量驱动器中(PS C: est> Test-Path variable:value1)
因为变量会在powershell退出或关闭时,自动清除。一般没必要删除,但是你非得删除,也可以象删除文件那样删除它。(PS C: est> del variable:value1)
为了管理变量,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选项 在创建变量时,给变量加上只读属性,这样就不能给变量重新赋值了。(PS C: est> New-Variable num -Value 100 -Force -Option readonly)
但是可以通过删除变量,再重新创建变量更新变量内容。
有没有权限更高的变量,有,那就是:选项Constant,常量一旦声明,不可修改(PS C: est> new-variable num -Value "strong" -Option constant)
在New-Variable 可以通过-description 添加变量描述(PS C: est> new-variable name -Value "me" -Description "This is my name")
但是变量描述默认不会显示,可以通过Format-List 查看。(PS C: est> ls Variable:name | fl *)
赋值操作符为“=”,几乎可以把任何数据赋值给一个变量,甚至一条cmdlet命令。为什么?因为Powershell支持对象,对象可以包罗万象。
自动化变量
是那些一旦打开Powershell就会自动加载的变量。
这些变量一般存放的内容包括
- 用户信息:例如用户的根目录$home
- 配置信息:例如powershell控制台的大小,颜色,背景等。
- 运行时信息:例如一个函数由谁调用,一个脚本运行的目录等。