从零开始学PowerShell脚本:变量、函数与错误处理7天进阶教程

发布时间:2026/9/3 22:56:59
从零开始学PowerShell脚本:变量、函数与错误处理7天进阶教程 从零开始学PowerShell脚本变量、函数与错误处理7天进阶教程【免费下载链接】PowerShellPowerShell for every system!项目地址: https://gitcode.com/GitHub_Trending/po/PowerShellPowerShell是一款跨平台Windows、Linux、macOS的自动化配置工具和脚本语言被无数运维与开发者奉为效率神器。这篇PowerShell 脚本 7 天进阶教程将带你从零开始用一周时间掌握变量、函数与错误处理三大核心技能——无需编程基础照着做就能写出第一个实用脚本。本教程你将获得会打开 PowerShell 控制台、会定义变量、会写函数、会处理错误最终独立完成一个文件备份脚本。️ 7天学习路线图天数主题核心目标难度第1天认识 PowerShell 控制台打开 pwsh 并查看版本⭐第2天PowerShell 变量入门定义变量、字符串插值⭐第3天条件判断与循环让脚本会思考⭐⭐第4天编写 PowerShell 函数封装可复用代码⭐⭐第5天管道与对象掌握 PowerShell 灵魂⭐⭐⭐第6天错误处理技巧try/catch 与 throw⭐⭐⭐第7天实战备份脚本综合应用三大技能⭐⭐⭐第1天打开 PowerShell查看你的版本PowerShell 7 在 Windows、Linux 和 macOS 上都可以运行命令行输入pwsh即可启动。启动后用下面这条命令确认环境是否正常——它会输出一张包含版本号、平台等关键信息的表格$PSVersionTable你会看到PSVersion、OS、Platform等信息。如果输出类似下图说明一切就绪可以从零开始学 PowerShell 脚本了小贴士$PSVersionTable本身就是 PowerShell 内置的一个自动变量——这已经提前剧透了我们第二天的主题第2天PowerShell 变量入门——给数据贴标签变量是脚本的记忆盒子PowerShell 中所有变量都以$符号开头无需声明类型赋值即可使用$city 北京 # 字符串 $count 7 # 数字 $files (a.txt, b.txt) # 数组多个值 Write-Host 我住在$city今天学了$count天PowerShell变量使用 3 个黄金规则$不能省$city是变量city会被当成字符串或命令字符串插值双引号内$变量名会自动展开为它的值这是拼接文本的最快方式区分大小写非 Windows 平台Linux/macOS 上$City和$city是两个不同的变量跨平台脚本请务必保持一致。 想深入看变量的各种用法官方仓库有一份详尽的数组与变量测试脚本test/powershell/Language/Scripting/Array.Tests.ps1第3天条件判断与循环——让脚本会思考if/else做出选择if ($city -eq 北京) { Write-Host 欢迎来到北京 } else { Write-Host 欢迎来其他地方 }常用比较运算符-eq等于、-ne不等于、-gt大于、-like模糊匹配。完整运算符清单可参考官方测试目录 test/powershell/Language/Operators/。for / foreach重复工作交给机器foreach ($day in 1..7) { Write-Host 第 $day 天继续坚持学 PowerShell 脚本 }✅ 从第二天起建议每天把当天学到的命令存进一个.ps1文件第7天你会发现这些片段正是完整脚本的零件。第4天编写 PowerShell 函数——把重复代码打包函数Function是脚本的积木块。推荐用动词-名词命名如Get-Greeting并配合param块定义参数function Get-Greeting { param ( [string]$Name 朋友 # 默认值不传参时使用 ) 你好$Name欢迎进入 PowerShell 的世界 } Get-Greeting -Name 小明 # 输出你好小明欢迎进入 PowerShell 的世界选择你的脚本编辑器写函数时建议配合编辑器使用。Windows 上可以用 VS Code内置 PowerShell 扩展也可以像官方示例一样在 Visual Studio 中创建项目来管理脚本 官方仓库的 docs/cmdlet-example/ 目录收录了完整的示例文档展示了从创建项目到运行命令的全过程值得收藏。第5天管道与对象——PowerShell 的灵魂这是 PowerShell 脚本区别于 Bash 的关键管道传递的不是纯文本而是对象。看这条命令——列出当前目录所有.ps1脚本按大小过滤再按时间倒序取前 5 个Get-ChildItem -Filter *.ps1 | Where-Object Length -gt 10KB | Sort-Object LastWriteTime -Descending | Select-Object -First 5每个|后接一条命令像流水线一样逐级加工数据因为是对象你可以直接访问属性比如$_ .Length而不需要解析文本。掌握管道你就跨过了新手与熟练者之间的最大门槛。第6天PowerShell 错误处理——写好脚本的安全带脚本遇到错误会怎样默认情况下非终止错误不会中断脚本。想要健壮的生产级脚本必须主动处理错误。try / catch捕获意外try { $result abc / 2 # 会触发类型转换错误 } catch { Write-Host 捕获到错误$_ -ForegroundColor Yellow } Write-Host 脚本继续运行没有被中断throw主动抛出错误function Check-DiskFree { if ((Get-PSDrive C).Free -lt 1GB) { throw C 盘剩余空间不足 1GB } }三个实战建议技巧说明检查关键操作后是否失败结合if ($?)或显式throw提前暴露问题用catch记录错误上下文$_变量包含完整错误信息便于排查善用trap做全局兜底官方用法参考 test/powershell/Language/Scripting/Trap.Tests.ps1 官方仓库中的 test/powershell/Language/Scripting/TryCatch.Tests.ps1 和 test/powershell/Language/Scripting/CommandErrorHandling.Tests.ps1 是学习错误处理机制的最佳活教材里面覆盖了大量边界场景。第7天实战——写一个完整的备份脚本综合运用前六天的变量、函数与错误处理10 行代码写出一个实用备份工具function Invoke-Backup { param ( [string]$Source, # 变量源目录 [string]$Target # 变量目标目录 ) try { if (-not (Test-Path $Source)) { throw 源目录不存在$Source } Copy-Item $Source -Destination $Target -Recurse Write-Host ✅ 备份成功$Target -ForegroundColor Green } catch { Write-Host ❌ 备份失败$($_.Exception.Message) -ForegroundColor Red } } Invoke-Backup -Source D:\Data -Target E:\Backup\Data 恭喜你从第一天的$PSVersionTable到今天的完整备份脚本你已经走完了 PowerShell 脚本入门的最后一公里。 进阶方向用 C# 扩展 PowerShell当脚本能力不够用时可以用 C# 编写CmdletPowerShell 命令模块让 PowerShell 脚本调用更强大的原生能力。这是微软官方推荐的跨平台扩展方式效果如下图所示完整的命令行构建流程含.NET Standard跨平台原理与常见报错处理见官方文档docs/cmdlet-example/command-line-simple-example.md 仓库学习资源导航想继续深挖这些仓库文件都是你的私房教材资源说明README.md项目总览、安装与升级指南docs/FAQ.md新手常见问题解答test/powershell/Language/语言特性官方测试集变量、循环、函数全覆盖test/powershell/Language/Scripting/脚本编写专项测试管道、参数绑定、错误处理src/System.Management.Automation/engine/interpreter/脚本解析与执行引擎源码适合进阶阅读docs/building/linux.md / docs/building/macos.md从源码构建 PowerShell终极玩法✨ 写在最后PowerShell 脚本的学习曲线比想象中平缓第2天的变量和第4天的函数就足以应付日常小任务第6天的错误处理则决定了脚本能否上生产线。坚持每天 30 分钟七天后你收获的不仅是一个备份脚本更是一套能在任何操作系统上运行的自动化思维。现在打开你的终端敲下pwsh开始吧【免费下载链接】PowerShellPowerShell for every system!项目地址: https://gitcode.com/GitHub_Trending/po/PowerShell创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考