Windows PowerShell

Windows PowerShell

  • 一、PowerShell使用
  • 二、PowerShell常用命令:
    • 1、 Get类
    • 2、Set类
    • 3、Write类
  • 三、PowerShell 类型 变量 数组 字符串:
  • 四、PowerShell运算符用法:
    • 1.算术二元运算符:
    • 2.赋值运算符
    • 3.逻辑运算符
    • 4.比较运算符
    • 5.字符串运算符
  • 五、PowerShell条件控制的用法:
    • 1.循环类
    • 2.分支类
  • 六 、课堂练习

一、PowerShell使用

Windows PowerShell 是一种命令行外壳程序和脚本环境.

启动PowerShell
方法一: 直接在cmd中执行powershell,切换为powershell
方法二: 开始菜单中输入powershell启动powershell
在这里插入图片描述
方法三: 开始菜单----附件----powershell启动带x86的是32位的,不带的是64位的;带ies的是简单的ide
在这里插入图片描述

二、PowerShell常用命令:

1、 Get类

1.Get-Command : 得到所有PowerShell命令,获取有关 cmdlet 以及有关 Windows PowerShell 命令的其他元素的基本信息。
包括Cmdlet、Alias、Function。
2.Get-Process : 获取所有进程
3.Get-Help : 显示有关 Windows PowerShell 命令和概念的信息
4.Get-History : 获取在当前会话中输入的命令的列表
5.Get-Job : 获取在当前会话中运行的 Windows PowerShell 后台作业
6.Get-FormatData : 获取当前会话中的格式数据
7.Get-Event : 获取事件队列中的事件
8.Get-Alias : 获取当前会话的别名
9.Get-Culture :获取操作系统中设置的当前区域性
10. Get-Date :获取当前日期和时间
11. Get-Host : 获取表示当前主机程序的对象
12.Get-Member : 获取对象的属性和方法。
13.Get-Random : 从集合中获取随机数或随机选择对象
14.Get-UICulture : 获取操作系统中当前用户界面 (UI) 区域性设置
15.Get-Unique : 从排序列表返回唯一项目
16.Get-Variable :获取当前控制台中的变量
17.Get-EventLog : 获取本地或远程计算机上的事件日志或事件日志列表中的事件
18.Get-ChildItem : 获取一个或多个指定位置中的项和子项
19.Get-Content : 获取指定位置的项的内容
20.Get-ItemProperty :获取指定项的属性
21.Get-WmiObject : 获取 Windows Management Instrumentation (WMI) 类的实例或可用类的相关信息
22.Get-Location :获取当前工作位置的相关信息(如:F:\Users\TaoMin )
23.Get-PSDrive:获取当前会话中的 Windows PowerShell 驱动器
24.Get-Item:获取位于指定位置的项
25.Get-Process :获取在本地计算机或远程计算机上运行的进程
26.Get-Service : 获取本地或远程计算机上的服务
27.Get-Transaction :获取当前(活动)事务
28.Get-ExecutionPolicy :获取当前会话中的执行策略

2、Set类

(set类命令一般都含有参数)
1.Set-Alias : 在当前 Windows PowerShell 会话中为 cmdlet 或其他命令元素创建或更改别名(替代名称)
如:如:Set-Alias aaa Get-Command
2.Set-PSDebug :打开和关闭脚本调试功能,设置跟踪级别并切换 strict 模式
3.Set-StrictMode :建立和强制执行表达式、脚本和脚本块中的编码规则
4.Set-Date :将计算机上的系统时间更改为指定的时间
5.Set-Variable :设置变量的值,如果该变量还不存在,则创建该变量
6.Set-PSBreakpoint :在行、命令或者变量上设置断点
7.Set-Location :将当前工作位置设置为指定的位置
8.Set-Item :将项的值更改为命令中指定的值
9.Set-Service :启动、停止和挂起服务并更改服务的属性
10.Set-Content :在项中写入内容或用新内容替换其中的内容
11.Set-ItemProperty :创建或更改某一项的属性值
12.Set-WmiInstance :创建或更新现有 Windows Management Instrumentation (WMI) 类的实例
13.Set-ExecutionPolicy :更改 Windows PowerShell 执行策略的用户首选项

3、Write类

1.Write-Host : 将自定义输出内容写入主机。类似于.net的 write()或者writeline()功能
2.Write-Progress :在 Windows PowerShell 命令窗口内显示进度栏
3.Write-Debug :将调试消息写入控制台
4.Write-Verbose:将文本写入详细消息流
5.Write-Warning :写入警告消息
6.Write-Error : 将对象写入错误流
7.Write-Output : 将指定对象发送到管道中的下一个命令;如果该命令是管道中的最后一个命令,则在控制台上显示这些对象
8.Write-EventLog :将事件写入事件日志

三、PowerShell 类型 变量 数组 字符串:

类型
弱类型:数据类型根据值的类型定义
强类型:强行规定数据类型,值的类型必须符合数据类型

常量
不能改变的量
常量的申明中不需要加 $ ,但在使用时需要加上。
Set-Variable -name 常量名 -Value 常量值 -Option Constant
常量,存储在栈里

Set-Variable -name 常量名 -Value 常量值 -Option readonly
只读变量,存储在方法区里
变量

变量
可以改变的量
变量名:$+任意字母
赋值格式:变量名 = 值

数组
一个容器、一个相同数据类型的容器
$数组名=元素1,元素2,元素3
$数组名[下标]
-1 < 下标 <=下
数组长度-1
$array_name=value1,value2,value3 #定义数组,用 逗号 隔开 $array_name=value0…valueN #连续数字用 …
$array_name=@() #定义 空数组

字符串
所有用双引号引上的就是字符串
任意字符串 + 任意数据类型 --> 结果为字符串
任意数据类型 + 任意字符串 --> 结果为前面的数据类型,(a + s )结果为a的数据类型

1
2
3
4
5
PowerShell注释用法:
   注释符号:#
   用法如下(一般在.ps1脚本文件中使用):
   Get-Process   #此处写注释
   sort ws

四、PowerShell运算符用法:

1.算术二元运算符:

1
2
3
4
5
  +   加、串联
   -    减
   *    乘
   /    除
   %   模

2.赋值运算符

1
     =   +=    -=    *=    /=   %=

3.逻辑运算符

1
2
3
4
     ! 不等于
     not  非
     and  且
      or   或

4.比较运算符

(可在运算符前加上 i 或者 c ,以指定是否区分大小写)
-eq 等于 -ceq 区分大小写
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
-contains 包含

5.字符串运算符

1
2
3
4
5
6
       +  连接两个字符串
       *   按指定次数重复字符串
       -f   设置字符串格式
       -replace   替换运算符    用法:"abcd" -replace "bc","TEST"   返回结果:       aTESTd
        -match   正则表达式匹配
        -like       通配符匹配

.Contains(str) — 验证是否 包含 关系,大小写敏感
.Equals(str) — 判断两个字符串是否 相等
.EndsWith(str) — 判断此字符串是否是以指定字符串 结束
.StartsWith(str) — 判断此字符串是否是以指定字符串 开始
Split() — 字符串 拆分,以空格 拆分; 或以指定子串 拆分
.SubString(start,end) — 截取 字符串子串
.ToUperInvariant() — 当前字符串全部转 大 写
. ToUper() 亦可
.ToLowerInvariant() — 当前字符串全部转 小 写
.ToLower() 亦可 Insert(int,str) — 在指定位置 插入 子串,下标从1 开始
. Remove(start,length) — 删除 从指定位置开始到指定长度的子串,下标从1 开始
.Trim() — 去掉字符串前后 空白格

–数字型
–整数型 --字节型 (byte)(1字节) --短整型 (short)(2字节) --整型 (int)(4字节) --长整型 (long)(8字节)
–浮点数型 --单精度浮点型 (float) --双精度浮点型 (double)
–非数字型 - -字符型(char) --字符串型 (string) --布尔型 (boolean)

五、PowerShell条件控制的用法:

1.循环类

1.foreach的用法用法一如下:
KaTeX parse error: Expected 'EOF', got '#' at position 10: var=1..6 #?定义数组 …i in $var)
{

n++Write?Host"n++
Write-Host "

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
         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

2.分支类

1.if用法
if语法结构如下:
if(条件1)
{处理1}
elseif(条件2)
{处理2}
…elseif 可多次重复
else
{处理3}

switch语法结构如下:
switch(表达式)

a=3switch(a = 3
switch(

a=3switch(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

中时,break语句将使windows powershell立即退出整个循环。在不循环的switch结构中,powershell将退出switch代码块。
用法如下:

var=0while(var = 0
while (

var=0while(var -lt 10)
{

var+=1if(var += 1
if(

var+=1if(var -eq 5)
{
break #当var=5时,终止while循环
}
write-host $var
}
执行结果:
1
2
3
4
2.continue用法:continue语句出现在foreach、for、while等循环结构中时,continue语句将使windows powershell立即退出某一次轮循环,并继续下一轮循环。
用法如下:

var=0while(var = 0
while (

var=0while(var -lt 10)
{

var+=1if(var += 1
if(

var+=1if(var -eq 5)
{
continue #当var=5时,跳出本轮循环,继续下一轮循环
}
write-host $var
}执行结果:
1
2
3
4
6
7
8
9
10
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 = 1;

i=1;i -le 10 ; $i++)
{
write-host “loop number $i”
}执行结果:会出现逐步调试的对话框

六 、课堂练习

[String]$str=“Windows PowerShell”
在字符串最后加上”v 5.1.1“
在字符串最后加上“8362752”

找到752的位置,在前面加上“.”
找到PowerShell的位置,并将其裁剪下来

将“18362.752”替换为2
在“v 5.1.2”前面添加“PSVersion”
删除“PSVersion”

判断版本是否是“5.1.2”,给出true或false的结果
判断是否包含“Power”这个字符串,给出true或false的结果
str是否以WIN开头?是否以v 5.1结尾

在str中查找第一次出现o和最后一次出现o的位置
将str转成大写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[String]$str="Windows PowerShell"
Write-Output($str)

$str=$str + "v 5.1.1"
Write-Output($str)

$str=$str + "8362752"
Write-Output($str)

$a=$str.IndexOf("752")
$str=$str.Insert($a,".")
Write-Output($str)

$b=$str.IndexOf("PowerShell")
$l="PowerShell".Length
$str_2=$str.SubString($b,$l)
Write-Output($str_2)

$str=$str.Replace("18362.752","2")
Write-Output($str)

$block=$str.IndexOf(" ")
$str=$str.Insert(1+$block,"PSVersion")
Write-Output($str)

$l_2="PSVersion".Length
$str=$str.Remove(1+$block,$l_2)
Write-Output($str)

Write-Output($str.Contains("5.1.2"))
Write-Output($str.Contains("Power"))
Write-Output($str.StartsWith("Win"))

结果如下:
在这里插入图片描述