Powershell基础
Powershell基础
powershell介绍
Windows Powershell是一种命令行外壳程序和脚本环境,是命令行用户和脚本编写者可以利用.NET Framework的强大功能
powershell是一个shell,定义好了一些命令操作系统,特别是与文件系统交互,能够启动应用程序甚至操纵应用程序。
powers能够使用start命令,能够利用.NET类型和COM对象。
powershell支持将命令列表做成脚本文件来执行
powershell打开方式
win + r打开命令输入框,输入命令powershell
win + r打开命令输入框,输入命令powershell ISE
powershell ISE
Windows Powershell集成脚本环境(ISE)是Windows Powershell的主机应用程序。
ISE中,右侧命令检索器中可以检索出需要的命令。
powershell的输入与输出
#在命令行输出信息,可以输出到文件
Write-Output("hello world")
#控制台输出信息,不能输出到文件
Write-Host("hello world")
#错误信息输出
Write-Error("hello world")
#显示信息
echo "hello world"
#与控制台交互,输入信息的方法
Read-Host "hello world"
powershell变量、常量与数组
powersh可看作是是弱类型语言
弱类型:不用区分数据类型,不用对数据类型进行转型,数据类型根据赋予它的值来确定,如C/C 、PHP都是弱类型语言
强类型语言:使之强制数据类型定义的语言。没有强制类型转化前,不允许两种不同类型的变量相互操作。强类型定义语言是类型安全的语言,如Java、C# 和 Python
数据类型
byte:字节类型(无符号整数)
int:整数类型(有符号整数)
shot:短整类型(有符号短整型)
long:长整类型(有符号长整型)
char:字符类型
double:双精度浮点数
float:单精度浮点数
string:字符串型
object:对象类型
有符号和无符号类型的区别是内存是否会溢出
变量
变量赋值公式:$变量名 = 值
变量使用公式:$变量名
powershell的变量名对大小写不敏感
powershell变量分为用户变量、环境变量、常量,需要自定义的是用户变量
ls variable:查看系统变量名
常量
常量是不可改变的
powershell使用常量需要申明
Set-Variable来申明变量
-name:用于申明常量名
-value:用于申明常量值
-option constant:申明当前变量为一个常量
常量的申明中常量名不需要加$,常量使用的时候需要加$
powershell可以通过定义只读变量的形式来打到定义常量的目的
-option Readonly
powershell中特殊常量是字符串:字符串赋予新值时,指向原值所在地址的指针被删除,但原值还存在,系统创建一个新的地址存入数据,字符串指向新的地址
环境变量
环境变量:一般是指在操作系统中用来指定操作系统运行环境的一些参数。如:临时文件夹位置和系统文件夹位置等
数组
数组:有序排列的同类数据元素的集合
数组长度不可扩大#数组申明过程中的4种方式 #定义数组用","分隔 $array_name = value0,value1,value2 #连续数字用"..",且只能是两个",",1..10表示1,2,3到10 $array_number = 1..10 #定义一个空数组 $array_name = @()
==array_name[0],数组下标从0开始,最大下标为数组长度-1,超过最大下标称为越界
连续赋值的方式仅适合有连续数字的地方可以运用
空数组可以简单的理解为仅仅是用来占位的,表示这里有一个数组,当处理过程中接受到新数组或者构建成新数组后交给这个空数组来用
powershell字符串操作的命令和函数
操作符 | 描述 | 示例 |
---|---|---|
* | 代表一个字符串 | “name” -like “*” |
+ | 合并两个字符串 | “name”+“like” |
-replace,-ireplace | 替换字符串,大小写不敏感 | “Name” -replace “na”,“1” |
-creplace | 替换字符串,大小写敏感 | “Name” -creplace “Na”,“1” |
-eq,-ieq | 验证是否相等,大小写不敏感 | “Name” -eq “name” |
-ceq | 验证是否相等,大小写敏感 | “Name” -eq “Name” |
-like,-ilike | 验证字符串包含关系,允许模式匹配,大小写不敏感 | “Name.text” -like “n*” |
-clike | 验证字符串包含关系,允许模式匹配,大小写敏感 | “Name.text” -like “N*” |
-notllike,-inotlike | 验证字符串不包含关系,允许模式匹配,大小写不敏感 | “NamePath” -notlike “NP*” |
-cnotllike | 验证字符串不包含关系,允许模式匹配,大小写敏感 | “NamePath” -notlike “NA*” |
操作符 | 描述 | 示例 |
---|---|---|
.Contains() | 验证是否包含关系,大小写敏感 | “Hello World”.Contains(“World”) |
.Split() | 字符串拆分,以空格形式拆分 | “Hello World”.Split() |
.Split(str) | 字符串拆分,以指定字符串拆分 | “Hello World”.Split(“o”) |
.CompareTo(str) | 字符串比较 | “Hello World”.CompareTo(“Hello World”) |
.Length | 获取字符串长度 | “Hello World”.Length |
.Insert(int,str) | 在指定位置插入字符串,从下标1开始 | “Hello World”.Insert(5,“new”) |
.Remove(start,Length) | 删除指定位置开始到指定长度的字符串,下标从1开始 | “Hello World”.Remove(5,5) |
.Trim() | 去掉字符串前后空白格 | “Hello World”.Trim() |
.Substring(start,Length) | 截取字符串子串,从指定位置开始到指定长度 | “Hello World”.Substring(5,5) |
.IndexOf(str) | 查找指定字符串在此字符串中第一次出现的位置 | “Hello World”.IndexOf(“o”) |
.LastIndexOf(str) | 查找指定字符串在此字符串中最后一次出现的位置 | “Hello World”.LastIndexOf(“o”) |
.StartsWith(str) | 判断此字符串是以指定字符串开始 | “Name.text”.StartsWith(“N”) |
.EndsWith(str) | 判断此字符串是以指定字符串结束 | “Name.text”.EndsWith(“text”) |
.Equals() | 判断两个字符串是否相等 | “abc”.Equals(“abc”) |
- 字符串格式化是在字符串后加上 -f 参数,并引入占位符和变量的方法。常用于在字符串中引入变量的操作
- 如果将一个变量包括在双引号中,那么它仅仅只是一个字符串,并不能引入这个变量所代表的值,因此需要将字符串进行格式化
#例如
$a = 3
Write-Output ("{0}是质数" -f $a)
powershell逻辑控制结构
顺序结构
顺序结构秉承从上到下,从左到右的运行规则
分支结构
- if-else
当分支只有两种时,可以使用这种结构
- if-elif-else
当分支超过两个时,可以在中间加上一个或多个elif的条件来满足要求
- if-if
多个if放在一起,这种结构有个特点,此结构不但会执行首个满足条件的分支,它还会到每一个if分支里面去验证一下条件是否为true,如果条件依然满足,程序将继续运行该条件下的语句
- 分支结构嵌套
if-elif-else结构放在另外一个if-elif-else结构中
循环结构
- while
在powershell中如果需要进行不定次数的循环,建议使用while true结构,while循环对条件控制非常有利
- Do-whille
while循环会先进性条件判断才开始循环
- for
在明确循环次数的时候建议使用for循环
- foreach
在powershell中是用于循环遍历同组多元素的循环方法,也可理解为循环遍历数组的方法
- switch
在powershell中switch与其它语言中的switch不同之处在于,它不是用来做分支结构的,而是同foreach一样,用于遍历数组的
循环跳出有两个关键字
continue用于表示退出本次循环继续下一次
break用于表示退出整个循环
powershell逻辑运算符
运算符 | 说明 |
---|---|
-not | 非运算,表达式为true则返回false,否则返回true |
-or | 或运算,有一个表达式为true则返回true |
-and | 与运算,两个表达式都为true才返回true |
-xor | 异或运算 |
powershell关系运算符
运算符 | 说明 |
---|---|
-eq | 检测两个数是否相等,相等返回true |
-ne | 检测两个数是否不相等,不相等返回true |
-ge | 检测左边的数是否大于等于右边的,是返回true |
-gt | 检测左边的数是否大于右边的,是返回true |
-le | 检测左边的数是否小于等于右边的,是返回true |
-lt | 检测左边的数是否小于右边的,是返回true |
[String]::IsNullOrEmpty(str) | 判断字符串是否为空 |
-match | 判断字符串是否匹配给定的正则表达式,不区分大小写 |
-cmatch | 判断字符串是否匹配给定的正则表达式,区分大小写 |
-matches | 左操作数为字符串,按照match右边的格式提取相关字符串 |
-clike | 验证字符串包含关系,运行模式匹配,大小写敏感 |