首页 > 技术文章 > .psl脚本介绍

panpanwelcome 2018-02-27 21:53 原文

.ps1文件是PowerShell写好的脚本文件

可以在记事本中写一段PowerShell代码,然后将其保存为“xxx.ps1”,后面要使用它的时候,双击即可运行了。这有点像批处理的“.bat”文件,也有点像VBScript的“.vbs”文件。这些都是Windows的脚本文件。

 

在线教程

 

Powershell 是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境

powershell需要.NET环境的支持,同时支持.NET对象。微软之所以将Powershell 定位为Power,并不是夸大其词,因为它完全支持对象。其可读性,易用性,可以位居当前所有shell之首。

 

cmdlets是Powershell的内部命令,cmdlet的类型名为System.Management.Automation.CmdletInfo

Powershell 命令集 cmdlets

 

别名

有两个作用:

  • 继承:继承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:\test> $value1,$value2=$value2,$value1

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

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

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

因为变量会在powershell退出或关闭时,自动清除。一般没必要删除,但是你非得删除,也可以象删除文件那样删除它。(PS C:\test> 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:\test> New-Variable num -Value 100 -Force -Option readonly

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

  有没有权限更高的变量,有,那就是:选项Constant,常量一旦声明,不可修改(PS C:\test> new-variable num -Value "strong" -Option constant

在New-Variable 可以通过-description 添加变量描述(PS C:\test> new-variable name -Value "me" -Description "This is my name"

  但是变量描述默认不会显示,可以通过Format-List 查看。(PS C:\test> ls Variable:name | fl *

 

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

 

 

 

自动化变量

是那些一旦打开Powershell就会自动加载的变量。

这些变量一般存放的内容包括

  1. 用户信息:例如用户的根目录$home
  2. 配置信息:例如powershell控制台的大小,颜色,背景等。
  3. 运行时信息:例如一个函数由谁调用,一个脚本运行的目录等。

 

推荐阅读