附录
A:常用 Cmdlet 速查表
这张表汇集了在日常管理和脚本编写中最常遇到的 PowerShell Cmdlet。它按照功能进行分类,方便你根据需要快速定位。
| 分类 | Cmdlet | 功能描述 | 常见别名 |
|---|---|---|---|
| 控制台与帮助 | Get-Help | 显示关于 Cmdlet、函数、脚本的帮助信息。 | help, man |
| Get-Command | 获取所有已安装的 Cmdlet、函数、别名等。 | gcm | |
| Get-History | 获取当前会话中输入的命令历史。 | h, history | |
| Clear-Host | 清空控制台屏幕。 | cls, clear | |
| 文件与目录 | Get-Location | 获取当前工作目录的路径。 | gl, pwd |
| Set-Location | 更改当前工作目录。 | sl, cd, chdir | |
| Get-ChildItem | 列出指定路径下的文件和目录。 | gci, ls, dir | |
| New-Item | 创建新的文件或目录。 | ni | |
| Remove-Item | 删除文件或目录。 | ri, rm, del, erase | |
| Copy-Item | 复制文件或目录。 | cpi, cp, copy | |
| Move-Item | 移动文件或目录。 | mi, mv, move | |
| Rename-Item | 重命名文件或目录。 | rni, ren | |
| Get-Content | 读取并输出文件的内容。 | gc, cat, type | |
| Set-Content | 将内容写入文件(覆盖)。 | sc | |
| Add-Content | 将内容追加到文件末尾。 | ac | |
| 对象与管道 | Get-Member | 获取对象的属性、方法等成员信息。 | gm |
| Select-Object | 从对象中选择指定的属性。 | select | |
| Where-Object | 根据条件筛选对象。 | where, ? | |
| Sort-Object | 对对象集合进行排序。 | sort | |
| Measure-Object | 计算对象的数值属性(计数、求和、平均值等)。 | measure | |
| Group-Object | 根据指定的属性对对象进行分组。 | group | |
| ForEach-Object | 对集合中的每个对象执行操作。 | foreach, % | |
| 系统管理 | Get-Process | 获取系统中正在运行的进程。 | gps, ps |
| Stop-Process | 停止一个或多个正在运行的进程。 | spps, kill | |
| Get-Service | 获取系统中的服务。 | gsv | |
| Start-Service | 启动一个服务。 | sasv | |
| Stop-Service | 停止一个服务。 | spsv | |
| Restart-Service | 重启一个服务。 | rs | |
| Get-Date | 获取当前日期和时间。 | date | |
| Test-Connection | 向远程计算机发送 ICMP 回显请求(Ping)。 | ping, tcon | |
| Test-NetConnection | 诊断网络连接(Ping, TCP 端口测试, 路由跟踪)。 | tnc | |
| 数据处理 | Export-Csv | 将对象导出为 CSV 格式的文件。 | epcsv |
| Import-Csv | 从 CSV 文件导入数据并转换为对象。 | ipcsv | |
| ConvertTo-Json | 将对象转换为 JSON 格式的字符串。 | 1 | |
| ConvertFrom-Json | 将 JSON 格式的字符串转换为对象。 | 2 | |
| ConvertTo-Html | 将对象转换为 HTML 格式。 | 3 | |
| Invoke-RestMethod | 向 REST API 发送请求并解析响应。 | irm | |
| Invoke-WebRequest | 向网页发送 HTTP 请求。 | iwr, wget, curl |
B:常用别名列表
别名是为 Cmdlet 或函数提供的“昵称”,主要用于在交互式控制台中提高输入效率。在编写脚本时,强烈建议使用完整的 Cmdlet 名称以保证可读性。
| 别名 | Cmdlet |
|---|---|
| ? | Where-Object |
| % | ForEach-Object |
| ac | Add-Content |
| cat | Get-Content |
| cd | Set-Location |
| cls | Clear-Host |
| cp | Copy-Item |
| curl | Invoke-WebRequest |
| del | Remove-Item |
| dir | Get-ChildItem |
| echo | Write-Output |
| fl | Format-List |
| ft | Format-Table |
| gc | Get-Content |
| gci | Get-ChildItem |
| gcm | Get-Command |
| gm | Get-Member |
| gps | Get-Process |
| group | Group-Object |
| h | Get-History |
| help | Get-Help |
| iex | Invoke-Expression |
| irm | Invoke-RestMethod |
| iwr | Invoke-WebRequest |
| kill | Stop-Process |
| ls | Get-ChildItem |
| man | Get-Help |
| md | New-Item (用于创建目录) |
| ) | move |
| mount | New-PSDrive |
| mv | Move-Item |
| popd | Pop-Location |
| ps | Get-Process |
| pushd | Push-Location |
| pwd | Get-Location |
| r | Invoke-History |
| ren | Rename-Item |
| rm | Remove-Item |
| rmdir | Remove-Item |
| sc | Set-Content |
| select | Select-Object |
| sl | Set-Location |
| sort | Sort-Object |
| tee | Tee-Object |
| type | Get-Content |
| wget | Invoke-WebRequest |
| where | Where-Object |
C:正则表达式快速参考
正则表达式(Regular Expression, Regex)是用于匹配和处理文本的强大模式。PowerShell 在 -match, -split, -replace 等运算符和 Select-String Cmdlet 中广泛使用它。
| 符号/序列 | 描述 | 示例 |
|---|---|---|
| 基本本符 | ||
| . | 匹配除换行符外的任意单个字符。 | ‘a.c’ 匹配 “abc”, “a_c”, “a1c” 配除换行符外的任意单个字符 |
| \d | 匹配任意一个数字 (等同于 [0-9])。 | ‘\d{3}’ 匹配 “123” 匹任意一个数字 (等同于 [0-9]) |
| \w | 匹配任意一个单词字符 (字母、数字、下划线)。 | ‘\w+’ 匹配 “word1_23” 匹任意一个单词字符 (字母、数字、下划线) |
| \s | 匹配任意一个空白字符 (空格, Tab, 换行符)。 | ‘a\sb’ 匹配 “a b” 匹任意一个空白字符 (空格, Tab, 换行符) |
| \D, \W, \S | 分别与 \d, \w, \s 相反。 | ‘\D’ 匹配 “a”, “_” 分别与 \d, , \s 相反 |
| 量词 | ||
| + | 匹配前面的元素 1 次或多次。 | ‘a+b’ 匹配 “ab”, “aaab” 匹前面的元素 1 次或多次 |
| ? | 匹配前面的元素 0 次或 1 次。 | ‘colou?r’ 匹配 “color”, “colour” 匹前面的元素 0 次或 1 次 |
| {n} | 匹配前面的元素恰好 n 次。 | ‘\d{4}’ 匹配 “2023” 匹配面的元素恰好 n 次 |
| {n,} | 匹配前面的元素至少 n 次。 | ‘\d{2,}’ 匹配 “12”, “1234” 匹配面的元素至少 n 次 |
| {n,m} | 匹配前面的元素至少 n 次,但不超过 m 次。 | ‘\w{3,5}’ 匹配 “cat”, “house” 匹配前的元素至少 n 次,但不超过 m 次 |
| 锚点 | ||
| $ | 匹配字符串的结尾。 | ‘end$’ 匹配 “This is the end” 匹字符串的结尾 |
| \b | 匹配单词边界。 | ‘\bword\b’ 匹配 “word” 但不匹配 “wording” 匹单词边界 |
| 分组与范围 | ||
| [^…] | 匹配任意一个不在方括号内的字符。 | ‘[^0-9]’ 匹配任意非数字字符 匹配任一个不在方括号内的字符 |
| ( … ) | 分组,将多个元素视为一个整体,并用于捕获。 | ‘(ab)+’ 匹配 “ab”, “abab” 分组,将个元素视为一个整体,并用于捕获 |
| 或,匹配 | ||
| 转义 | ||
| \ | 转义殊字符,使其被视为普通字符。 | ‘C:\Temp’ 匹配 “C:\Temp” 义特殊字符,使其被视为普通字符 |
结语:代码之外,路在脚下
亲爱的读者,当您翻到这一页时,我们共同的旅程已悄然抵达终点。我仿佛能看到,灯光下,您长舒一口气,眼中闪烁着知识沉淀后的光芒。请允许我,作为您这段旅程的虚拟向导,与您一同回望来路,并遥看前方的星辰大海。
我们从何处启航?从那个闪烁着光标、既熟悉又陌生的命令行窗口。我们怀着一丝忐忑与好奇,敲下了第一行 Get-Date,感受到了 PowerShell 即时回应的脉搏。那是我们与这个强大世界缔结契约的第一个瞬间。我们曾像一个蹒跚学步的孩童,学习着 cd 与 ls 这些基础的“单词”,在文件系统的广阔平原上,学会了行走与奔跑。我们曾惊叹于 Get-Process | Sort-Object CPU -Descending 这一行代码所展现出的管道艺术,第一次窥见了“对象”这一核心哲学的无穷魅力。
随后,我们开始构建自己的“语法宫殿”。变量是基石,运算符是钢筋,流程控制则是那精巧的廊柱与穹顶。我们不再仅仅是命令的使用者,我们开始用 function 关键字,创造属于自己的“魔法咒语”。我们学会了用 [CmdletBinding()] 和注释式帮助,将粗糙的脚本,打磨成闪耀着专业光芒的工具。我们探索了作用域的边界,用模块将智慧封装,准备将其分享给世界。我们直面了错误与异常,用 Try-Catch 为我们的代码穿上坚固的铠甲,用调试器赋予我们洞察毫厘的“火眼金睛”。
当我们的“内功”日渐深厚,便开始在更广阔的实战江湖中闯荡。在 Windows 的心脏地带,我们精细地操控着文件权限(ACL),像巡视自家领地一样漫游注册表。我们与 WMI/CIM 进行了深度对话,聆听硬件与软件的低语。我们掌控了 Active Directory 这个庞大的“户籍系统”,将数百用户的创建与管理,浓缩于一杯咖啡的时间。
我们并未就此止步。我们扬帆出海,将 PowerShell 的旗帜插上了 Linux 和 macOS 的土地,见证了它与 grep、awk 等原生工具的和谐共舞。我们驾驭着 Az 和 AWS.Tools 这两艘巨轮,驶向了云端的无垠蓝海,以代码定义着未来的基础设施。我们掌握了 Invoke-RestMethod 这把万能钥匙,与世间万千 API 对话,真正实现了与万物互联。
最终,我们登上了精通之境的顶峰。我们用高级函数和模块清单,构建出企业级的解决方案。我们用 class 和 enum 定义着自己的世界模型。我们用 ForEach-Object -Parallel 冲破了单线程的束缚,感受着效率的狂飙。我们用 DSC 描绘着服务器配置的终极蓝图,从“如何做”的工匠,蜕变为“是什么”的架构师。我们为这一切,都加持了安全的封印,注入了最佳实践的灵魂,并用 Git 为我们的智慧成果,找到了永恒的归宿。
掩卷沉思,您学到的仅仅是 PowerShell 吗?不。您学到的是一种结构化的思维方式,一种将复杂问题分解为一系列有序、优雅步骤的能力。您学到的是一种自动化的核心理念,一种将重复、枯燥的劳动,转化为可靠、高效的智慧创造的哲学。您学到的是一种持续学习的工程素养,一种在面对未知系统时,通过 Get-Command、Get-Help 和 Get-Member 自我探索、自我驱动的专业精神。
这本书的结束,绝非您学习的终点,而恰恰是您真正精彩的 PowerShell 旅程的起点。世界在变,云原生、人工智能、物联网方兴未艾,新的模块、新的 API、新的挑战将层出不穷。但您已经掌握了最核心的“渔”,而非一时的“鱼”。您已经拥有了那把能够开启任何一扇自动化大门的钥匙。
现在,请合上书本,走到您的计算机前。那里有等待您去优化的流程,有等待您去整合的系统,有等待您去构建的自动化方案。去解决一个真实的问题,哪怕它很小。去编写一个能让您或同事每天节省十分钟的脚本。去将您今天学到的一个新知识点,应用到您的下一个项目中。
代码的生命在于运行,知识的价值在于应用。
请永远保持那份初见时的新奇,那份探索中的热情,那份精通后的谦逊。去社区提问,去 GitHub 分享,去博客撰文,去帮助那些像曾经的您一样,站在这扇大门前的好奇的探索者。在分享与交流中,您的技艺将愈发精纯。
感谢您,亲爱的读者,选择这本书,并坚持走到了最后。愿 PowerShell 成为您手中那把无往不利的瑞士军刀,助您在未来的职业生涯中,披荆斩棘,游刃有余。
前路浩荡,未来可期。现在,请开始谱写属于您自己的、独一无二的自动化史诗吧。