powershell学习笔记

powershell学习笔记

Adil 0 2023-11-24

Powershell学习笔记

一、简述

  • 通常我们总是会使用cmd,但大部分人却powershell所知不多。总的来说,powershell是一款基于.net开发的更强的windows命令行工具,它可以帮助我们实现相对cmd命令更多的需求。
  • 此外,由于其基于.net开发,因此其也可以使用面向对象的编程开发,具备更强的代码可读性。
  • 注意:
    • 为了与cmd做区分,powershell的命令也被成为cmdlet命令。
    • powershell基于.net环境运行,因此无法直接在DOS窗口执行执行命令。

二、常用的命令

2.1 文件

文件

2.1.1 新建项目

  • 创建名为test的目录
New-Item test -Type Directory
  • 创建名为test.txt的文件
New-Item test.txt

2.1.2 删除项目

  • 删除test文件夹
Remove-Item test
  • 删除test.txt文件
Remove-Item .\test.txt

2.1.3 更名项目

  • 更改test文件夹名字为tt
Rename-Item test tt
  • 更改test.txt文件夹名字为tt.txt
Rename-Item .\test.txt tt.txt

2.1.4 获取项目信息

  • 获取对象信息(后续传动Get-Member获取对象信息)
Get-Item <object-name/object-path>

2.1.5 获取子项目

  • 获取当前路径下的子目录
Get-ChildItem

2.1.6 获取文件内容

  • 获取文本全部内容
Get-Content  文件路径
  • 获取文本头10行内容
Get-Content -Head 10 文件路径
  • 获取文本尾10行内容
Get-Content -Tail 10 文件路径

2.2 目录

目录

2.2.2 文件复制

  • 复制tt文件夹到tt1文件夹
Copy-Item tt tt1

2.1.2 设置当前路径

  • 跳转到C盘根目录
Set-Location c:\

2.3 日志

日志

2.3.1 获取日志信息

  • 获取Security事件源中的event-id:4664的事件
Get-EventLog -LogName Security -InstanceId 4624

2.4 进程

进程

2.4.1 获取进程信息

  • 获取所有的进程信息
Get-Process
  • 获取指定PID的进程信息
get-process -Id 23940,23456
  • 获取指定进程名的进程信息
Get-Process -name svchost

2.4.1 停止进程

  • 停止指定进程名的进程
Stop-Process -name svchost
  • 停止指定PID的进程
Stop-Process -Id 23940,23456

2.5 网络

网络

2.5.1 Ping计算机状态

  • 验证到目标IP的网络联通情况
Test-Connection 47.99.143.197

image-20231123092902811

2.5.2 获取端口状态

  • 验证到目标IP的80端口网络联通状况
  • 注意:可用于替代Telnet,在telnet未安装的情况下验证端口情况
Test-NetConnection -ComputerName 47.99.143.197 -Port 80

image-20231124131809761

2.6、辅助参数

辅助参数

2.6.1获取命令信息

  • 获取指定命令信息
Get-Command Get-MpComputerStatus

image-20231124090008791

2.6.2 选择输出对象

  • 获取对象的全部信息
Get-MpComputerStatus | Select-Object *

image-20231124090058440

2.6.3 获取对象信息

  • 注:Get-Item 命令用于获取指定路径的文件或文件夹的对象
  • 获取C盘下的log后缀文件

image-20231124104155737

2.6.4 获取命令详细信息

  • 获取指定命令详细执行参数
get-help Get-MpComputerStatus -Parameter *

image-20231124090142472

2.6.5 筛选内容,仅包含

  • 查找C盘根目录下的log后缀文件
ls c:\* -Include "*.log"

image-20231124092247840

  • 注:该include在大多数场景下并不如Filter好用!

  • 查找C盘

ls c:\ -Filter "*.log"

image-20231124093011298

2.6.6 获取内容,仅排除

  • 查找C盘根目录下的文件,排除.log后缀文件
Get-ChildItem -Path "C:\*" -Exclude "*.log" -File

image-20231124094537989

三、数据类型

常用数据类型

3.1 整型

  • 定义
$a = 100
  • 强制类型转换
[int]$a = 100

3.2 浮点型

  • 定义
$a = 3.141592
  • 强制类型转换
[float]$a = 3.1415

3.3 字符串型

  • 定义
$a = "test"
  • 强制类型转换
$b = 1
# 将整形转化为字符串型
$b = [string]$b

3.4 布尔型

  • 定义
# 注意:boolean类型只有两个关键字对象:$ture、$false
$a = $ture
$a = $false
  • 强制类型转换
    • 注意:boolean类型进行强制类型转换时,对于非0的元素都会转化为ture
# 示例1-数字
$b = 1
$b = [boolean]$b

image-20231124120439348

# 示例2-字符串
$b = "adil"
$b = [boolean]$b

image-20231124120528504

3.5 数组型

  • 定义
$a = @(1,2,3,4,5)
  • 注意:在Powershell中数组的长度大小都是固定的,这是在设计之初就定义好的。

    • 所以,我们无法使用add方法来为数组添加元素,若要添加元素,是创建另一个数组来覆盖原数组
  • 添加元素(使用+进行添加)

# 定义数组
$a = @(1,2,3,4,5)
# 添加元素
$a = $a + 6

image-20231124101426736

  • 读取数组
    • 数组采用索引和负索引的方式来读取数组内的元素
# 定义数组
$a = @(1,2,3,4,5,6)
# 读取数组第一个元素
$a[0]
# 读取数组最后一个元素
$a[-1]

image-20231124105240702

  • 切片数组
    • 切片数组可以快速帮助我们过滤掉数组中我们不需要的数据
# 读取第2到第4个元素
$a[1..3]

image-20231124105534635

注:切片数组用到了关键字.. , 它不止可以用来做切片数组相关的内容,也可以用来快速生成数据序列,用于循环结构

# 循环输出1-20的整数
foreach ($i in 1..20){
	Write-Output $i
}

image-20231124105851655

3.6 字典型

  • 定义:
$dictionary = @{
    "Apple"   = "苹果"
    "Banana"  = "香蕉"
    "Orange"  = "橙子"
    "Grapes"  = "葡萄"
}
  • 注意:直接定义的哈希表在输出时是无序的,若要哈希表有序,需要使用关键字[ordered]在定义之初确认为有序哈希表
$dictionary = [ordered]@{
    "Apple"   = "苹果"
    "Banana"  = "香蕉"
    "Orange"  = "橙子"
    "Grapes"  = "葡萄"
}
  • 添加键值对
$dictionary.add("juice","果汁")
  • 移除键值对
$dictionary.remove("juice")
  • 遍历所有键,关键字:Keys
$dictionary.Keys

image-20231124110818460

  • 遍历所有值,关键字:Values
$dictionary.Values

image-20231124110934753

3.7 获取对象类型

# 创建一个整型数据对象
$b =1
# 获取对象的类型
$b.GetType()

image-20231124103459010

四、逻辑判断

4.1 逻辑运算符

逻辑运算符

4.3 逻辑操作符

逻辑操作符

4.3 基本逻辑判断

  • if-else 结构
if (条件1)
	语句1
else
	语句2
  • if-elseif-else 结构
if (条件1)
	语句1
elseif (条件2)
	语句2
else
	语句3
  • 示例
# 判断数值a的大小
$a = 100
if ($a -eq 1000){
    Write-Output "a=1000"
} elseif ($a -gt 100) {
    Write-Output "a>100"
} else {
    Write-Output "a<=100"
}

五、流程控制

5.1 foreach

# 轮询输出$b中的各个元素
foreach ($a in $b){
	write-output $a
}

5.2 While

# 注意,在while结构中一定记得对判断参数的值进行变化,否则容易陷入死循环
while($i -eq 100){
	write-output $false
	$i += 1
	break
}

5.3 switch

# 依据传入参数的值,来判断需要采用哪种应对模式
$fruit = "apple"

switch ($fruit) {
    "apple" {
        Write-Output "apple."
    }
    "banana" {
        Write-Output "banana."
    }
    "orange" {
        Write-Output "orange."
    }
    default {
        Write-Output "recognized."
    }
}

六、函数

  • 定义
function 函数名($value){
	函数体
	return 返回值
}
  • 示例
计算指定整数的数值总和
function sum($value){
    $i = [int]1
    $result = [int]0
    foreach($i in 1..$value){
        $result += $i
        $i += 1

    }
    return $result
}

# 调用函数,使用-value指定函数中设定的值为100
$con = sum -value 100
Write-Output $con