windows下的批处理(下)——PowerShell

时间:2024-03-18 19:57:15

 1.PowerShell条件判断 

条件表达式

比较运算符:-eq、-nc、-gt、-gc、-lt、-le、-contains、-notcontain

windows下的批处理(下)——PowerShell

逻辑运算:-and、-or、-xor:异或、-not或者!:逆

windows下的批处理(下)——PowerShell

Where Object条件过滤

在管道中可以通过条件判断过滤管道结果,Where-Object会对集合逐个过滤,将符合条件的结果保留。

windows下的批处理(下)——PowerShell

IF ELSEIF ELSE

条件判断必须放在圆括号中,执行的代码必须紧跟在后面的花括号中。

windows下的批处理(下)——PowerShell

Switch

如果语句中有多路分支,使用IF-ELSEIF-ELSE不友好,可以使用Switch

windows下的批处理(下)——PowerShell                            windows下的批处理(下)——PowerShell

使用switch时缺省的比较运算符-eq等于,也可以自行定制比较条件,将条件放入花括号中,必须保证条件表达式的返回值为布尔类型“$True”或“$False”。

如果case中有多个条件匹配,那么每个匹配的条件都会进行处理,如果碰到匹配条件时只处理一次,可以使用break关键字。

windows下的批处理(下)——PowerShell                 windows下的批处理(下)——PowerShell

switch有一个case选项,一旦指定了这个选项,比较运算符就会从-eq切换到-ceq,即大小写敏感比较字符串。

switch语句后指定-wildcard选项可使用通配符。

给switch关键字指定选项-regex可使用正则表达式。

windows下的批处理(下)——PowerShell                             windows下的批处理(下)——PowerShell windows下的批处理(下)——PowerShell       


2.PowerShell循环

ForEach-Object

在ForEach-Object中,$_代表当前对象,当然也允许通过$_,调用该对象支持的方法。

windows下的批处理(下)——PowerShellwindows下的批处理(下)——PowerShell

Foreach

Foreach-object为cmdlet命令,使用在管道中,对管道结果逐个处理,foreach为遍历集合的关键字。

windows下的批处理(下)——PowerShell

Do-While

do-while()会先执行再去判断,能保证循环至少执行一次。

windows下的批处理(下)——PowerShell

For(初始条件;执行循环前的判断;执行循环后的操作)

windows下的批处理(下)——PowerShell

Switch

switch本是多路分支的关键字,但是在powershell中由于switch支持集合,所以也可以使用它进行循环处理。

windows下的批处理(下)——PowerShell


 3.PowerShell函数 

定义函数

函数的结果由三部分组成:函数名、参数、函数体

windows下的批处理(下)——PowerShell

处理函数的参数

任意函数:内部变量$args接受函数调用时接受的参数,$args是一个数组类型。

命名参数:函数的每一个参数可以分配一个名称,在调用时通过名称指定对应的参数。

预定义参数:函数在定义参数时可以指定默认值,如果调用时没有专门指定参数的值,就会保持默认值。

windows下的批处理(下)——PowerShell                 windows下的批处理(下)——PowerShell

指定函数的返回值

windows下的批处理(下)——PowerShell               windows下的批处理(下)——PowerShell

函数 过滤器 管道

在最简单的情况下,函数不是真正支持管道。只能对前一个命令执行后的结果处理。只能对前一个命令执行后的结果处理。前一个命令执行的结果通过被自动保存在$input变量值,$inpute是一个数组,它可以包含许多元素,一个元素,甚至一个元素都没有,这取决于具体的环境。

管道的低效率顺序模式在处理大容量数据时很容易出现问题,其结果是巨大的内存占用和进程等待。如果函数支持高效率的流模式,在处理管道结果时仅占很小的内存。

如果一个函数内部使用了管道,就可以定义三个基础的任务区:第一步,完成函数的初始化,完成函数执行的预备步骤;第二步处理递归调用所得的结果;最后进行收尾工作。这三个任务区分别可以使用begin,process,end语句块。

windows下的批处理(下)——PowerShell


4.PowerShell脚本

编写和运行脚本

一个powershell脚本仅仅是一个包含powershell代码的文本文件。如果这个文本文件执行,powershell解释器会逐行解释并执行它的语句。powershell脚本非常像以前的cmd控制台上的批处理文件,可以通过文本编辑工具创建powershell脚本。

如果脚本不是很长,可以直接在控制台中要执行的语句重定向给一个脚本文件,缺点是代码必须放在闭合的引号中。书写方式一旦在脚本内部也有引号时,可以将脚本文件通过@‘ ‘@闭合起来,任何文本都可以存放在里面,即使是一些特殊字符,空号,白空格。

windows下的批处理(下)——PowerShell

PowerShell般初始化情况下都会禁止脚本执行。脚本能否执行取决于 Power Shell的执行策略,只有管理员才有权限更改这个策略。非管理员会报错。
更改脚本执行策略,可以通过

windows下的批处理(下)——PowerShell

脚本执行策略

  • Restricted    这是默认的设置。在任何条件下,根本没有 Power Shell脚本运行
  • AsIgned   只有数字签名的脚本(包括配置文件脚本)将会运行,此外,会提示你允许运行那些使用指定的证书签名的脚本;
  • Remotesigned    经本地编写的脚本将会运行。从网络下载的脚本运行,除非他们签名了并且你批准了的签名的证书;
  • UnRestricted      所有的脚本都将运行,但是,对于下载的脚本会警告你,而且,它们运行前必须批准
  • ByPass     任何脚本都将运行,而且不管其来源。这是一个潜在的非常危险的设置,只有在非常特定的情况下才使用;其中,其他的安全性系统已经准备好了,可以防上流氓脚本未经你的许可而运行
  • 未定义      如果没有认为的设置过主机的 Power Shel脚本执行策略。默认是 Restricted,没有脚本会运行

给脚本传递参数

windows下的批处理(下)——PowerShell

windows下的批处理(下)——PowerShell

windows下的批处理(下)——PowerShell

windows下的批处理(下)——PowerShell

增强脚本可读性

windows下的批处理(下)——PowerShell