PowerShell 是什么?Windows 用户必备的最强 Shell 深度解析
在之前的 Bash 入门系列中,我们主要聚焦于 macOS 和 Linux 上标配的 Bash Shell。但相信很多 Web 创作者会觉得:“我平时用的是 Windows 啊……”。请放心!Windows 系统中标准搭载了一款远超传统命令提示符(小黑窗)的超强 Shell。它就是我们这次要介绍的 PowerShell。
PowerShell 不仅仅是一个命令执行工具。它是一个能将 Windows 的各种设置自动化,用几行代码就解决复杂任务的存在,堪称一根“魔法棒”。特别是在 Web 开发中管理服务器,或是在日常工作中提升效率方面,它的威力是巨大的。
本文将解答新手朋友们“PowerShell 是什么?”“它和命令提示符有什么区别?”等疑问,同时通过可直接复制粘贴运行的示例,通俗易懂地解说其基本用法和魅力。所有 Windows 用户都拥有这个最强的武器,何不从今天起就来学习驾驭它呢?
PowerShell 的真面目 - 诞生于 Windows 的最强 Shell
PowerShell 是由微软开发的,专门用于 Windows 管理和自动化的命令行 Shell,同时它也是一门脚本语言。如果说传统的命令提示符是计算器,那么 PowerShell 就像是 Excel。两者都能计算,但能处理的数据类型和能做的事情的广度完全不同。
最大的区别在于处理“对象”
命令提示符和 PowerShell 的决定性区别在于命令返回信息的“形式”。
- 命令提示符 (cmd.exe): 命令的结果仅仅作为“文本(字符串)”返回。这对于人类阅读来说还好,但要从这些文本中提取出“文件名”或“大小”等特定信息用于后续处理,就非常困难。
- PowerShell: 命令的结果作为结构化的数据——“对象 (Object)”返回。对象上关联着独立的“属性”,如文件名、大小、更新日期等,就像 Excel 的单元格一样,可以轻松地提取、排序或筛选特定数据。
正是这种“处理对象”的特性,使 PowerShell 从一个单纯的命令行工具,升华为一个强大的自动化平台。
体验 PowerShell 的力量!通过管道操控对象
百闻不如一见。PowerShell 的真正价值,在将命令通过“管道符 |”连接起来时才能体现出来。让我们来看看对象是如何像传送带上的物品一样,被传递给下一个命令进行加工的吧。
首先,我们用 Get-Process 命令获取当前计算机上正在运行的进程列表。PowerShell 命令的一大特点是采用了易于理解的动词-名词格式。
Get-Process
屏幕上显示了许多表格形式的进程,对吧?这就是对象的集合。
接下来,我们将这个结果通过管道传递给 Where-Object,筛选出“进程名(ProcessName)为'chrome'”的那些进程。$_ 指代的是从管道传递过来的每一个对象。
Get-Process | Where-Object { $_.ProcessName -eq 'chrome' }
只显示了与 Chrome 相关的进程。正因为处理的是对象而非文本,我们才能通过指定 ProcessName 这个属性来轻松地进行筛选。
我们再进一步,将筛选后的结果传递给 Sort-Object,按内存使用量(WS)从高到低进行排序。
Get-Process | Where-Object { $_.ProcessName -eq 'chrome' } | Sort-Object -Property WS -Descending
像这样,仅通过连接命令,就能像操作数据库一样随心所欲地提取和加工复杂信息。这就是 PowerShell 的力量。
来试试基本命令(Cmdlet)吧
PowerShell 的命令,正式名称为 Cmdlet (Command-let)。这里,我们将介绍如何用 PowerShell 的 Cmdlet 来执行那些在 Bash 或命令提示符中我们所熟悉的操作。许多 Cmdlet 都提供了简短的“别名”,所以像 ls 或 cd 这样习惯了的命令也可以直接使用。
移动位置 (pwd, cd, sl)
使用 Get-Location 查看当前位置,使用 Set-Location 进行移动。
# 显示当前位置 (别名: pwd)
Get-Location
# 移动到 C:\Users 目录 (别名: cd, sl)
Set-Location C:\Users
显示列表 (ls, dir, gci)
使用 Get-ChildItem 来显示文件和文件夹列表。
# 显示当前目录的内容 (别名: ls, dir, gci)
Get-ChildItem
发挥对象的优势,还可以轻松地递归查找(包括子文件夹内)特定类型的文件。
# 从当前位置开始搜索所有 .css 文件
Get-ChildItem -Recurse -Filter "*.css"
创建文件和文件夹 (ni)
使用 New-Item 来创建新项目(文件或文件夹)。
创建文件:
New-Item -Path ".\new-file.txt" -ItemType File
创建文件夹:
New-Item -Path ".\new-folder" -ItemType Directory
读写文件内容 (cat, gc, sc)
使用 Get-Content 读取文件内容,使用 Set-Content 写入内容。
向文件写入内容:
"Hello from PowerShell!" | Set-Content -Path ".\new-file.txt"
读取文件内容 (别名: cat, gc):
Get-Content -Path ".\new-file.txt"
删除文件和文件夹 (rm, del, rmdir)
使用 Remove-Item 来删除文件或文件夹。此操作无法撤销,执行时请务必小心。
Remove-Item -Path ".\new-file.txt"
要连同文件夹及其内容一并删除,需要 -Recurse 选项。
Remove-Item -Path ".\new-folder" -Recurse
总结
这次,我们为您打开了通往 PowerShell 世界的大门,这是 Windows 系统标准搭载的强大 Shell。起初可能会对不熟悉的 Cmdlet 感到困惑,但一旦理解了其本质,便没有比它更可靠的工具了。
- PowerShell 处理的是对象,而不仅仅是文本。
动词-名词格式的Cmdlet具有一致性,易于学习。- 通过管道连接对象,可以直观地实现高级数据处理。
在 Web 制作领域,常见的工作流程是在本地 Windows 环境中作业,然后部署到生产环境的 Linux 服务器上。如果能熟练使用 PowerShell 在 Windows 上实现工作的自动化和效率化,同时又能通过 WSL 无缝地操作 Linux 环境,那简直是如虎添翼。
希望今天的文章能让您感受到 PowerShell 的魅力和强大之处。在下一篇文章中,我们将解说如何将 PowerShell 更新到最新版本,以及在 macOS/Linux 上安装的步骤。