杰瑞科技汇

powershell教程

PowerShell 完整教程:从入门到精通

PowerShell 不仅仅是一个命令行工具,它是一个功能强大的跨平台任务自动化和配置管理框架,掌握它,将极大地提升你在 Windows、Linux 和 macOS 上的工作效率。


第一部分:初识 PowerShell

什么是 PowerShell?

想象一下,Windows 的传统命令提示符 是一把“瑞士军刀”,能做一些基本操作,而 PowerShell 则是一整套“电动工具箱”。

  • 命令提示符: 主要执行简单的、独立的命令。dir 列出文件,copy 复制文件。
  • PowerShell: 基于 .NET 框架,不仅可以执行命令,更核心的是通过 脚本 来实现复杂的自动化任务,它拥有一个极其丰富的、可扩展的命令集(称为 cmdlet),并且可以操作 .NET 对象,功能远超传统 CMD。

核心特点:

  • 对象导向: PowerShell 的命令不处理纯文本,而是处理结构化的 对象,这使得数据传递和处理更加高效和精确。
  • 管道: 可以像 Linux/Unix 一样,将一个命令的输出作为另一个命令的输入,实现强大的命令组合。
  • 脚本语言: 拥有完整的编程语言语法(变量、函数、循环、条件判断等),可以编写复杂的脚本。
  • 跨平台: 现代的 PowerShell (PowerShell Core) 可以在 Windows、Linux 和 macOS 上运行。
  • 可扩展性: 可以自己编写 cmdlet,或者使用丰富的社区模块。

如何启动 PowerShell?

在 Windows 上,你有多种方式启动 PowerShell:

  • 最推荐的方式: 按 Win + X,然后选择 “Windows PowerShell”“终端” (Windows 10/11 新版,推荐使用终端,它集成了 PowerShell、CMD 和 WSL)。
  • 开始菜单: 搜索 "PowerShell"。
  • 运行对话框: 按 Win + R,输入 powershell,然后回车。

启动后,你会看到一个蓝色的窗口,光标前有一个 PS C:\Users\你的用户名> 的提示符,这表示你当前在 PowerShell 环境中,并且位于你的用户主目录。


第二部分:基础语法与核心概念

命令的基本结构

PowerShell 的核心命令称为 Cmdlet (发音为 "command-let"),它的命名遵循一个严格的规则:

动词-名词

  • Get-Process: 获取正在运行的进程。
  • Set-Content: 设置文件内容。
  • Stop-Service: 停止一个服务。

这种命名方式使得命令非常直观,易于学习和记忆。

获取帮助

PowerShell 最好的老师就是它自己。Get-Help 是你最重要的命令。

# 获取某个命令的详细帮助
Get-Help Get-Process
# 获取命令的基本用法(
Get-Help Get-Process -Examples
# 获取关于命令参数的详细信息
Get-Help Get-Process -Parameter Name

快捷方式: 在任何命令前加上 manhelp 效果与 Get-Help 相同,man Get-Process

使用别名

为了方便用户,PowerShell 为许多常用命令和外部程序提供了简短的别名,就像 Linux 中的 ls, cd 一样。

  • lsdir -> Get-ChildItem (列出当前目录下的文件和文件夹)
  • cd -> Set-Location (切换目录)
  • cp -> Copy-Item (复制)
  • mv -> Move-Item (移动/重命名)
  • rm -> Remove-Item (删除)
  • clsclear -> Clear-Host (清屏)

建议: 初学者可以使用别名快速上手,但为了写出清晰、可维护的脚本,强烈建议使用完整的 动词-名词 命令。

管道

管道是 PowerShell 的精髓,它将一个命令的 输出对象 传递给另一个命令的 输入

语法: 命令1 | 命令2 | 命令3

示例: 找到所有名称中包含 "chrome" 的进程,并停止它们。

# 1. Get-Process 获取所有进程对象
# 2. Where-Object 筛选出 ProcessName 属性等于 "chrome" 的对象
# 3. Stop-Object 接收这些筛选后的对象,并停止它们
Get-Process | Where-Object { $_.ProcessName -eq "chrome" } | Stop-Process

$_ 是一个自动变量,代表管道中当前正在处理的“当前对象”。

变量

变量用于存储数据,在 PowerShell 中,变量名前必须加上 符号。

# 定义变量
$myName = "张三"
$age = 30
$isStudent = $false
# 使用变量
Write-Host "你好, $myName! 你今年 $age 岁。"
Write-Host "你是否是学生? $isStudent"

PowerShell 的变量可以存储任何类型的数据,包括数字、字符串、布尔值,甚至是复杂的对象。

运算符

  • 算术运算符: , , , , (取模)
  • 比较运算符:
    • -eq (等于), -ne (不等于)
    • -gt (大于), -lt (小于), -ge (大于等于), -le (小于等于)
    • -like (通配符匹配), -match (正则表达式匹配)
  • 逻辑运算符: -and (与), -or (或), -not (非)
$number = 10
if ($number -gt 5) {
    Write-Host "这个数字大于 5。"
}
# 在 Where-Object 中使用
Get-Process | Where-Object { $_.WorkingSet -gt 100MB } # 找出内存占用超过 100MB 的进程

第三部分:文件与系统管理

这部分是 PowerShell 最常用的场景之一。

文件系统操作

核心命令: Get-ChildItem, Set-Location, New-Item, Copy-Item, Move-Item, Remove-Item

# 切换到 C:\ 盘
Set-Location C:\
# 列出 C:\Windows 目录下的所有 .log 文件
Get-ChildItem C:\Windows -Filter *.log
# 创建一个新文件夹
New-Item -Path "C:\temp\MyNewFolder" -ItemType Directory
# 创建一个新文件并写入内容
"Hello, PowerShell!" | Out-File -FilePath "C:\temp\MyNewFolder\hello.txt"
# 复制文件夹
Copy-Item -Path "C:\temp\MyNewFolder" -Destination "C:\temp\MyNewFolder_Copy" -Recurse
# 删除文件夹 (谨慎使用!)
# Remove-Item -Path "C:\temp\MyNewFolder_Copy" -Recurse -Force

进程与服务管理

# 列出所有正在运行的进程
Get-Process
# 找到并停止记事本进程
Get-Process notepad | Stop-Process
# 获取所有 Windows 服务
Get-Service
# 停止一个服务
# Stop-Service -Name "spooler"
# 启动一个服务
# Start-Service -Name "spooler"

第四部分:编写你的第一个脚本

脚本就是将多个命令保存在一个 .ps1 文件中,然后一次性执行。

创建脚本文件

使用任何文本编辑器(如 VS Code、记事本)创建一个文件,命名为 MyFirstScript.ps1

编写脚本内容

MyFirstScript.ps1 中输入以下代码:

# 这是一个注释
# 1. 定义变量
$computerName = $env:COMPUTERNAME # 获取当前计算机名
$freeSpace = (Get-PSDrive C).Free / 1GB # 获取C盘剩余空间(GB)
# 2. 输出信息
Write-Host "----------------------------------------"
Write-Host "  计算机健康检查报告"
Write-Host "----------------------------------------"
Write-Host "计算机名: $computerName"
Write-Host "C盘剩余空间: $freeSpace GB"
# 3. 条件判断
if ($freeSpace -lt 10) {
    Write-Warning "警告:C盘剩余空间不足 10GB!"
} else {
    Write-Host "C盘空间充足。"
}
Write-Host "----------------------------------------"

执行脚本

默认情况下,为了安全,PowerShell 禁止直接运行脚本,你需要先设置执行策略。

步骤 1: 设置执行策略

以管理员身份打开 PowerShell,然后运行:

# 设置为 "RemoteSigned" 意味着本地创建的脚本可以运行,但从网上下载的脚本需要经过签名。
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
# 输入 Y 确认

步骤 2: 运行脚本

在 PowerShell 中,导航到你的脚本所在的目录,然后执行:

# 进入脚本所在目录
Set-Path C:\path\to\your\script
# 执行脚本
.\MyFirstScript.ps1

注意: .\ 表示在当前目录下查找脚本,这是在 PowerShell 中运行本地脚本的正确方式。


第五部分:进阶主题

函数

函数是用来封装一段可重用代码的块,它像一个小型的脚本,可以有输入参数和返回值。

function Get-ComputerInfo {
    param(
        [string]$ComputerName = $env:COMPUTERNAME # 参数,带默认值
    )
    $os = Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName $ComputerName
    $cpu = Get-CimInstance -ClassName Win32_Processor -ComputerName $ComputerName
    [PSCustomObject]@{
        ComputerName = $ComputerName
        OSVersion    = $os.Caption
        CPUBrand     = $cpu.Name
        TotalRAM     = "{0:N2} GB" -f ($os.TotalVisibleMemorySize / 1MB)
    }
}
# 使用函数
$info = Get-ComputerInfo
$info | Format-List
# 带参数使用
# $remoteInfo = Get-ComputerInfo -ComputerName "Server01"
# $remoteInfo | Format-List

模块

模块是 PowerShell 功能的扩展包,它将相关的 cmdlet、函数和脚本打包在一起,你可以从 PowerShell Gallery 安装海量第三方模块。

安装模块示例 (需要管理员权限):

# 安装用于管理 Azure 的模块
Install-Module -Name Az -Scope AllUsers -Force

使用模块:

安装后,相关的命令会自动加载,你就可以像使用内置命令一样使用它们了。

错误处理

在自动化脚本中,错误处理至关重要,使用 try-catch 块来捕获和处理错误。

try {
    # 尝试执行一个可能失败的操作
    Get-Service -Name "ThisServiceDoesNotExist"
    Write-Host "服务找到。"
}
catch {
    # 如果发生错误,执行这里的代码
    Write-Warning "发生错误: $($_.Exception.Message)"
}
finally {
    # 无论是否发生错误,这里的代码都会执行
    Write-Host "检查完成。"
}

第六部分:学习资源与最佳实践

官方资源

社区与学习网站

  • Learn PowerShell in a Month of Lunches (书籍): 经典入门书籍,有中文版。
  • The Posh Code (博客): https://poshcode.org/ - 收集了大量 PowerShell 脚本和示例。
  • Stack Overflow: 标签 powershell

最佳实践

  • 使用 Get-Help: 遇到任何不熟悉的命令,先查帮助。
  • 从命令行开始: 先在命令行上组合命令,确保逻辑正确后再写入脚本。
  • 多使用管道: 充分利用管道的威力,写出简洁高效的代码。
  • 注释你的代码: 为复杂的逻辑添加注释,方便自己和他人理解。
  • Write-VerboseWrite-Debug: 在脚本中使用这些命令来输出调试信息,而不是直接用 Write-Host
  • 模块化: 将复杂的脚本拆分成多个小函数,并封装成模块。

PowerShell 是一个极其强大的工具,学习曲线可能有些陡峭,但一旦掌握,它将成为你日常工作中不可或缺的利器,从今天开始,尝试用 PowerShell 替代你平时在 CMD 中执行的简单任务,逐步感受它的强大与优雅,祝你学习愉快!

分享:
扫描分享到社交APP
上一篇
下一篇