PowerShell随笔2_分支 选择 循环 特殊变量
PowerShell特殊变量:
PowerShell的特殊变量由系统自动创建。用户自定义的变量名称应该不和特殊变量相同。
$^ :前一命令行的第一个标记
$$ :前一命令行的最后一个标记
$_ :表示表示当前循环的迭代变量。
$? :前一命令执行状态,成功(Ture) 或者 失败(False)
$Args :为脚本或者函数指定的参数
$Error :错误发生时,错误对象存储于变量 $Error 中
$Foreach :引用foreach循环中的枚举器
$Home :用户的主目录
$Host :引用宿主 POWERSHELL 语言的应用程序
$Input :通过管道传递给脚本的对象的枚举器
$LastExitCode :上一程序或脚本的退出代码
$Matches : 使用 –match 运算符找到的匹配项的哈希表
$PSHome :Windows PowerShell 的安装位置
$profile :标准配置文件(可能不存在)
$StackTrace : Windows PowerShell 捕获的上一异常
$Switch :switch 语句中的枚举器
============================================================
此数组中是否包含3: 1,2,3,5,3,2 –contains 3
返回所有等于3的元素: 1,2,3,5,3,2 –eq 3
返回所有小于3的元素: 1,2,3,5,3,2 –lt 3
测试 2 是否存在于集合中: if (1, 3, 5 –contains 2)
============================================================
5.调用运算符
& 可用于调用脚本块或者命令/函数的名称
用法如下:
$a = { Get-Process | Select -First 2} #获取处理器信息排名前二的两条记录
&$a
. 可用于方法调用
用法如下:
$a = "这是字符串"
$a.substring(0,3)
:: 用于静态方法调用
用法如下:
[DateTime]::IsLeapYear(2008)
结果:True
[DateTime]::Now #返回当前时间
6.字符串运算符
+ 连接两个字符串
* 按指定次数重复字符串
-f 设置字符串格式
-replace 替换运算符 用法:"abcd" -replace "bc","TEST" 返回结果:aTESTd
-match 正则表达式匹配
-like 通配符匹配
7.其他运算符
, 数组构造函数
.. 范围运算符
-is 类型鉴别器 用法: $a = 100 $a -is [int] 返回结果:Ture $a -is [string] 返回结果:False
-as 类型转换器 用法: 1 -as [string] #将1作为字符串处理
-band 二进制与
-bor 二进制或
-bnot 二进制非
=====================================================================
一如下:(函数中改变变量值并不影响实际值)
$var1=10
function one{"The Variable is $var1"}
function two{$var1=20;one}
one
two
one
执行结果:
The Variable is 10
The Variable is 20
The Variable is 10
用法二如下:(函数中变量值的改变要用$Script:var的形式)
$var1=10
function one{"The Variable is $var1"}
function two{$Script:var1=20;one}
one
two
one
执行结果:
The Variable is 10
The Variable is 20
The Variable is 20
PowerShell条件控制的用法:
一、循环类
1.foreach的用法
用法一如下:
$var=1..6 #定义数组
foreach($i in $var)
{
$n++
Write-Host "$i"
}
Write-Host "there were $n record"
执行结果:
1
2
3
4
5
6
there were 6 records
用法二如下:直接获取管道数据
$n = 0
"a","b","c","d" | foreach{
$n++
Write-Host $_
}
Write-Host "there were $n record"
执行结果:
a
b
c
d
there were 4 records
2.while的用法
用法一如下:
$n = 0
while($n -le 5) #当$n小于等于5时进行下面操作
{
write-host $n
$n++
}
执行结果:
0
1
2
3
4
5
3. do...while的用法
用法一如下:
$n = 0
do
{
write-host $n
$n++
}
while($n -ne 3) #当$n<>3时进行循环操作
执行结果:
0
1
2
4. do...until的用法
用法一如下:
$n = 0
do
{
write-host $n
$n++
}
until($n -gt 3) #当$n>3时停止操作
执行结果:
0
1
2
3
$JobName = "JobUpdateCheck"
$Null = Start-Job -Name $JobName -scriptblock ${Function:TaskSch} -ArgumentList $TaskCheckName,$UserName,$UserPass,$TaskChecktime,$TaskCheckdate,$TaskCheckScriptPath
Do {
Start-Sleep -Milliseconds 500
$JobState = (Get-Job -Name $JobName).State
}
Until ($JobState -eq "Completed")
Receive-Job -Name $JobName
Get-Job -Name $JobName |Remove-Job
二、分支类
1.if用法
if语法结构如下:
if(条件1)
{处理1}
elseif(条件2)
{处理2}
...elseif 可多次重复
else
{处理3}
用法如下:
Get-Service |foreach{ #foreach{必须放在一起,不可换行放置
if($_.status -eq "running"){ #if(){ 必须放在一起,不可换行放置
write-host $_.displayname "("$_status")" -foregroundcolor "green"
}
else
{
write-host $_.displayname "("$_status")" -foregroundcolor "red"
}
}
执行结果:
Windows Audio Endpoint Builder ( )
Windows Audio ( )
ActiveX Installer (AxInstSV) ( )
BitLocker Drive Encryption Service ( )
Base Filtering Engine ( )
2.switch用法
switch语法结构如下:
switch [-regex | -wildcard | -exact] [-casesensitive](表达式)| -file filename #表达式可以为数组,为数组时顺序处理数组每一项
# -file表示从文本获得输入,读取文本每一行,并对其执行switch块
{
字符1|数字1|变量1|表达式1
{处理1} #此处可加上;break 表示若匹配上则跳出switch语句
字符2|数字2|变量2|表达式2
{处理2}
...以上的组合可有多个,不可重复
default #默认处理方式,这个是防止匹配不上时的处理方式,类似错误处理。且default语句只可有一个
{处理3}
}
用法一如下: switch(表达式)
$a = 3
switch($a)
{
1
{"It's one";break} #break:表示若匹配跳出swith语句
2
{"It's two";break}
3
{"It's three";break}
4
{"It's four";break}
5
{"It's five";break}
default
{"It's unknown";break}
}
执行结果:
It's three
若 $a = 8 执行结果为:It's unknown
用法二如下:switch -casesensitive (表达式)表示区分大小写
$day = "day1"
switch -casesensitive($day) # -casesensitive 表示大小写敏感,即区分大小写
{
day1
{"It's Monday" ;break}
day2
{"It's Tuesday";break}
day3
{"It's Wednesday";break}
day4
{"It's Thursday";break}
day5
{"It's Friday";break}
day6
{"It's Saturday";break}
day7
{"It's Sunday";break}
default
{"It's unknown";break}
}
执行结果: It's Monday
若定义 $day = "Day1" 执行结果:It's unknown
用法三如下:switch -regex(表达式)表示正则表达式匹配
$day = "day5"
switch -regex ($day)
{
^[a-z]+$
{"字母,匹配为:" +$_ ;break}
^[\d]+$
{"数字,匹配为:" +$_ ;break}
^\w+$
{"字母+数字,匹配为:" +$_ ;break}
default
{"什么都不是" +$_;break}
}
执行结果:字母+数字,匹配为:day6
若 $day = "day" 执行结果为:字母,匹配为:day6
若 $day = "1234" 执行结果为:数字,匹配为:1234
若 $day = 12 执行结果为:数字,匹配为:123
若 $day = "*&^%" 执行结果为:什么都不是,匹配为:*&^%
用法四如下:switch -regex(表达式)表示正则表达式匹配 表达式可为数组
$day = "day5","day6"
switch -regex ($day)
{
^[a-z]+$
{"字母,匹配为:" +$_ ;}
^[\d]+$
{"数字,匹配为:" +$_ ;}
^\w+$
{"字母+数字,匹配为:" +$_ ;}
default
{"什么都不是" +$_;}
}
执行结果:字母+数字,匹配为:day5
字母+数字,匹配为:day6
用法五如下:switch -wildcard (表达式)表示通配符匹配
$day = "day2"
switch -wildcard ($day)
{
day2
{"day2,匹配为:" + $_;break}
day3
{"day3,匹配为:" + $_;break}
day*
{"通配符,匹配为:" + $_;break}
default
{"什么都不是:" +$_;break}
}
执行结果:day2,匹配为:day2
若 $day = "day5",执行结果为:通配符,匹配为:day5
若 $day = "sunshine",执行结果为:什么都不是:sunshine
三、跳转类
1.break用法:break语句出现在foreach、for、while、switch等结构中时,break语句将使windows powershell立即退出整个循环。
在不循环的switch结构中,powershell将退出switch代码块。
用法如下:
$var = 0
while ($var -lt 10)
{
$var += 1
if($var -eq 5)
{
break #当var=5时,终止while循环
}
write-host $var
}
执行结果:
1
2
3
4
2.continue用法:continue语句出现在foreach、for、while等循环结构中时,continue语句将使windows powershell立即退出某一次轮循环,并继续下一轮循环。
用法如下:
$var = 0
while ($var -lt 10)
{
$var += 1
if($var -eq 5)
{
continue #当var=5时,跳出本轮循环,继续下一轮循环
}
write-host $var
}
执行结果:
1
2
3
4
6
7
8
9
10
在 PowerShell 的循环中,有两个特殊的关键字:break 和 continue。
使用 continue,循环继续执行,但是跳过剩下的代码。当您执行 break 时,循环提前结束并返回所有的结果。
另外,还有一个关键字 return。它将导致立即退出当前的作用域。所以当您在一个函数中执行 return,那么该函数将会退出;而如果您在一个脚本中执行 return,那么整个脚本将退出。
PowerShell抛出异常的Throw用法:
用法如下:
Throw 字符串|异常|ErrorRecord
如:throw "danger"
返回结果:danger 及详细错误信息
PowerShell获取出错信息的用法:
用法如下:
function one
{
get-process -ea stop #-ea定义错误发生以后该如何继续执行,意同-ErrorAction
get-childitem ada -ErrorAction stop #此处有错误 路径ada不存在
get-process -ErrorAction stop
}
one
返回结果:报出错误信息
PowerShell单步调试的用法:
用法如下:
#单步调试 首先设置调试可用 set-psDebug -step ;若要设置为非调试状态 可用 set-psDebug -off
for($i = 1;$i -le 10 ; $i++)
{
write-host "loop number $i"
}
执行结果:会出现逐步调试的对话框
from:http://lovetaomin18.blog.163.com/blog/static/18086849620125553711920/
PowerShell随笔2_分支 选择 循环 特殊变量的更多相关文章
- SQL变量、运算符、分支、循环语句
变量: SQL语言也跟其他编程语言一样,拥有变量.分支.循环等控制语句. 在SQL语言里面把变量分为局部变量和全局变量,全局变量又称系统变量. 局部变量: 使用declare关键字给变量声明,语法非常 ...
- SQL连接查询、变量、运算符、分支、循环语句
连接查询:通过连接运算符可以实现多个表查询.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 常用的两个链接运算符: 1.join on 2.union 在关系数据库 ...
- SpringBoot系列——利用系统环境变量与配置文件的分支选择实现“智能部署”
前言 通过之前的博客:SpringBoot系列——jar包与war包的部署,我们已经知道了如果实现项目的简单部署,但项目部署的时候最烦的是什么?修改成发布环境对应的配置!数据库连接地址.Eureka注 ...
- Mybatis的分支选择和In循环
Mybatis的分支选择: <choose> <when test="patientNo != null and patientNo != ''"> and ...
- R学习笔记 第四篇:函数,分支和循环
变量用于临时存储数据,而函数用于操作数据,实现代码的重复使用.在R中,函数只是另一种数据类型的变量,可以被分配,操作,甚至把函数作为参数传递给其他函数.分支控制和循环控制,和通用编程语言的风格很相似, ...
- [零基础学JAVA]Java SE基础部分-04. 分支、循环语句
转自:http://redking.blog.51cto.com/27212/116751 1.课程名称:分支.循环 本季为JAVA程序中最重要的部分,在讲解的时候除了讲解各种主要的控制语句(分支语句 ...
- python分支和循环结构
本文收录在Python从入门到精通系列文章系列 1. 分支结构 1.1 应用场景 迄今为止,我们写的Python代码都是一条一条语句顺序执行,这种代码结构通常称之为顺序结构.然而仅有顺序结构并不能解决 ...
- C语言讲义——结构化编程(分支、循环)
顺序结构(从上到下) 分支结构(也叫选择结构) 循环结构 分支结构 if...else 最基本的分支结构是if(){}else{}. 为了代码的安全,同时也是出于代码规范的考虑,if()后面一定要加花 ...
- 【.net 深呼吸】细说CodeDom(8):分支与循环
有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...
随机推荐
- 年度十佳 DevOps 博客文章(后篇)
如果说 15 年你还没有将 DevOps 真正应用起来,16 年再不实践也未免太落伍了.在上篇文章中我们了解到 15 年十佳 DevOps 博客文章的第 6-10 名,有没有哪一篇抓住了您的眼球,让您 ...
- Nagios 邮箱告警的方式太OUT了!
一般来讲,在安装完 Nagios 后,我们做的第一件最正确的事,就是设置它的邮件通知,对吧.因为如果没有这一步骤的话,你怎么能够知道什么时候会出现问题呢? 伴随着成功的初始安装,你即将是你司唯一一个能 ...
- 李洪强漫谈iOS开发[C语言-016]-变量的作用域
- Little-endian的一个好处:在变量指针转换的时候地址保持不变
Big-endian 的内存顺序和数字的书写顺序是一致的,方便阅读理解.Little-endian 在变量指针转换的时候地址保持不变,比如 int64* 转到 int32* 各有利弊,统一就好,目前看 ...
- 转:为什么Eclipse中 按 F3 无效
通常是由于自己的 工程 建得不对, 没有声明为 JAVA 或 PHP 类型工程. 例如, PHP 工程的 .project 文件中的内容如果如下, F3 应该就可以起作用了. <?xml ver ...
- Java实现Dijkstra算法求最短路径
任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层 ...
- bzoj2039
还是同一类最小割问题 对于只要记住,建图是来最小化损失, 最大化收益是所有收益-最小取不到的收益 首先对于每个经理i,如果不取,必然有signma(w[i,j])收益会得不到(这里我们先不考虑额外的损 ...
- windows下的BT服务器搭建方案
BT下载可以说是目前网络上最流行的P2P文件共享方式了.BT服务器相比于FTP服务器有许多优势,其中最重要的一点就是BT服务器不受服务器带宽和连接到服务器用户数量的限制,能够提供高速的下载服务.今天, ...
- An error occurred while filtering resources
一个比较恶心的问题.在使用过程中项目中有个错误 ,找不到原因.. An error occurred while filtering resources Maven -> Update ...
- 基于WebForm+EasyUI的业务管理系统形成之旅 -- 数据统计(Ⅳ)
上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 首页快捷方式>,主要介绍通过添加首页快捷方式,快速进入各个应用菜单功能. 将常用的菜单功能作为快捷方式,避免由于寻找诸多 ...