Skip to content

PowerShell命令行编程艺术(Microsoft Copilot版)

掌握命令行的力量,释放自动化的潜能。

以下是《PowerShell命令行编程艺术.md》的完整内容草稿,结构清晰、内容丰富,适合初学者和进阶用户参考:


PowerShell简介

PowerShell 是微软开发的任务自动化和配置管理框架,具有强大的命令行界面和脚本语言功能。它基于 .NET,支持面向对象的操作,并广泛应用于系统管理、DevOps、云平台自动化等领域。


基础语法与命令

  • 使用 Get-Command 查看所有可用命令
  • 使用 Get-Help 获取命令帮助文档
  • 使用 Get-Process 查看当前进程
  • 使用 Set-Location 切换目录(类似 cd
  • 使用 Get-ChildItem 列出文件和文件夹(类似 ls

示例:

Get-ChildItem -Path "C:\Users" -Recurse

变量与数据类型

  • 定义变量使用 $ 符号,例如:$name = "PowerShell"
  • 常见数据类型:字符串、整数、数组、哈希表、布尔值
  • 查看变量类型:$name.GetType()
  • 数组示例:$arr = @(1, 2, 3)
  • 哈希表示例:
$person = @{
  Name = "Alice"
  Age = 30
}

流程控制与逻辑判断

  • 条件语句:if, elseif, else
  • 循环语句:for, foreach, while, do-while
  • 逻辑运算符:-eq, -ne, -gt, -lt, -and, -or

示例:

if ($age -ge 18) {
  Write-Output "成年人"
} else {
  Write-Output "未成年人"
}

函数与模块

  • 定义函数:
function Say-Hello {
  param($name)
  Write-Output "Hello, $name!"
}
  • 导入模块:Import-Module
  • 查看模块:Get-Module -ListAvailable
  • 创建模块:将函数保存为 .psm1 文件

对象与管道机制

PowerShell 的核心优势在于对象处理能力:

  • 命令返回的是对象而非文本
  • 使用管道 | 将对象传递给下一个命令
  • 使用 Select-Object, Where-Object, Sort-Object 进行筛选和排序

示例:

Get-Process | Where-Object {$_.CPU -gt 100} | Sort-Object CPU -Descending

文件与目录操作

  • 创建文件:New-Item -Path "file.txt" -ItemType File
  • 读取文件:Get-Content file.txt
  • 写入文件:Set-Content file.txt "Hello World"
  • 追加内容:Add-Content file.txt "New Line"
  • 删除文件:Remove-Item file.txt

远程管理与自动化

  • 启用远程功能:Enable-PSRemoting
  • 使用 Invoke-Command 执行远程命令
  • 使用 Enter-PSSession 进入远程会话
  • 自动化任务:结合计划任务、脚本调度、CI/CD 工具

示例:

Invoke-Command -ComputerName "Server01" -ScriptBlock { Get-Service }

错误处理与调试技巧

  • 使用 try, catch, finally 处理异常
  • 使用 $Error 查看错误信息
  • 使用 Write-Debug, Write-Verbose 输出调试信息
  • 设置调试模式:$DebugPreference = "Continue"

示例:

try {
  Get-Item "nonexistent.txt"
} catch {
  Write-Output "文件不存在"
}

PowerShell实用技巧

  • 使用 Out-GridView 可视化结果
  • 使用 Measure-Command 测量执行时间
  • 使用 Start-Job 实现异步任务
  • 使用 ConvertTo-JsonConvertFrom-Json 处理结构化数据
  • 使用 Register-ScheduledTask 创建计划任务

安全性与注意事项

  • 脚本执行策略:Get-ExecutionPolicy, Set-ExecutionPolicy 例如使用 powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
  • 推荐使用 RemoteSignedAllSigned
  • 谨慎使用管理员权限运行脚本
  • 避免硬编码密码,使用 Get-Credential 获取凭据
  • 使用 Test-Path 检查路径有效性

推荐资源与学习路径

  • 📚 官方文档:Microsoft Learn - PowerShell
  • 📘 书籍推荐:《PowerShell in Action》《Learn Windows PowerShell in a Month of Lunches》
  • 🎓 视频课程:Pluralsight、Udemy、YouTube
  • 🧪 实践平台:PowerShell Gallery、GitHub 示例项目
  • 🛠 工具推荐:VS Code + PowerShell 插件

如果你希望将这份内容转为 PDF 或继续扩展某一章节,我可以帮你继续完善。你想先深入哪一部分?