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
2.5.2 获取端口状态
- 验证到目标IP的80端口网络联通状况
- 注意:可用于替代
Telnet
,在telnet
未安装的情况下验证端口情况
Test-NetConnection -ComputerName 47.99.143.197 -Port 80
2.6、辅助参数

2.6.1获取命令信息
- 获取指定命令信息
Get-Command Get-MpComputerStatus
2.6.2 选择输出对象
- 获取对象的全部信息
Get-MpComputerStatus | Select-Object *
2.6.3 获取对象信息
- 注:
Get-Item
命令用于获取指定路径的文件或文件夹的对象 - 获取
C盘
下的log
后缀文件
2.6.4 获取命令详细信息
- 获取指定命令详细执行参数
get-help Get-MpComputerStatus -Parameter *
2.6.5 筛选内容,仅包含
- 查找C盘根目录下的log后缀文件
ls c:\* -Include "*.log"
-
注:该
include
在大多数场景下并不如Filter
好用! -
查找C盘
ls c:\ -Filter "*.log"
2.6.6 获取内容,仅排除
- 查找C盘根目录下的文件,排除
.log
后缀文件
Get-ChildItem -Path "C:\*" -Exclude "*.log" -File
三、数据类型

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
# 示例2-字符串
$b = "adil"
$b = [boolean]$b
3.5 数组型
- 定义
$a = @(1,2,3,4,5)
-
注意:在
Powershell
中数组的长度大小都是固定的,这是在设计之初就定义好的。- 所以,我们无法使用
add
方法来为数组添加元素,若要添加元素,是创建另一个数组来覆盖原数组
- 所以,我们无法使用
-
添加元素(使用
+
进行添加)
# 定义数组
$a = @(1,2,3,4,5)
# 添加元素
$a = $a + 6
- 读取数组
- 数组采用索引和负索引的方式来读取数组内的元素
# 定义数组
$a = @(1,2,3,4,5,6)
# 读取数组第一个元素
$a[0]
# 读取数组最后一个元素
$a[-1]
- 切片数组
- 切片数组可以快速帮助我们过滤掉数组中我们不需要的数据
# 读取第2到第4个元素
$a[1..3]
注:切片数组用到了关键字..
, 它不止可以用来做切片数组相关的内容,也可以用来快速生成数据序列,用于循环结构
# 循环输出1-20的整数
foreach ($i in 1..20){
Write-Output $i
}
3.6 字典型
- 定义:
$dictionary = @{
"Apple" = "苹果"
"Banana" = "香蕉"
"Orange" = "橙子"
"Grapes" = "葡萄"
}
- 注意:直接定义的哈希表在输出时是无序的,若要哈希表有序,需要使用关键字
[ordered]
在定义之初确认为有序哈希表
$dictionary = [ordered]@{
"Apple" = "苹果"
"Banana" = "香蕉"
"Orange" = "橙子"
"Grapes" = "葡萄"
}
- 添加键值对
$dictionary.add("juice","果汁")
- 移除键值对
$dictionary.remove("juice")
- 遍历所有键,关键字:
Keys
$dictionary.Keys
- 遍历所有值,关键字:
Values
$dictionary.Values
3.7 获取对象类型
# 创建一个整型数据对象
$b =1
# 获取对象的类型
$b.GetType()
四、逻辑判断
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