杰瑞科技汇

PowerShell教程怎么学?从入门到上手要多久?

PowerShell 教程:从入门到实践

PowerShell 不仅仅是一个命令行工具,它是一个功能强大的跨平台任务自动化配置管理框架,对于 Windows 用户、系统管理员和开发者来说,掌握 PowerShell 是一项非常重要的技能。

PowerShell教程怎么学?从入门到上手要多久?-图1
(图片来源网络,侵删)

第一部分:初识 PowerShell

什么是 PowerShell?

想象一下,你以前使用的是 cmd.exe(那个经典的黑色窗口),PowerShell 是它的超级升级版。

  • 面向对象:PowerShell 的核心是处理对象,而不仅仅是纯文本,这使得数据传递和处理更加结构化和强大。
  • 脚本语言:它拥有完整的编程语言功能(变量、循环、函数、类等),可以编写复杂的脚本来实现自动化。
  • 管道:这是 PowerShell 的精髓,你可以像工厂流水线一样,将一个命令的输出(对象)作为另一个命令的输入,轻松组合命令完成复杂任务。
  • 模块化:功能以模块形式提供,可以按需加载,保持环境的轻量。
  • 跨平台:PowerShell 不仅在 Windows 上运行,还可以在 Linux 和 macOS 上使用。

如何启动 PowerShell?

在 Windows 10/11 上,有多种方式:

  • 最推荐的方式:按 Win 键,输入 PowerShell,然后选择 "Windows PowerShell""终端" (Terminal),终端是新版,集成了 PowerShell、命令提示符和 Azure Cloud Shell,非常强大。
  • 通过运行对话框:按 Win + R,输入 powershell,然后回车。
  • 通过开始菜单:在“开始”菜单中找到 "Windows PowerShell" 文件夹并启动。

启动后,你会看到一个蓝色的窗口,提示符通常看起来像这样:PS C:\Users\YourName>

(这是一个典型的 PowerShell 窗口)

PowerShell教程怎么学?从入门到上手要多久?-图2
(图片来源网络,侵删)

第二部分:PowerShell 基础语法

命令的基本结构

PowerShell 的命令遵循一个统一的格式:动词-名词

  • 动词:表示要执行的操作。Get, Set, New, Remove, Start, Stop,这让你能快速猜测命令的功能。
  • 名词:表示操作的对象。Process, Service, Item, User

示例:

  • Get-Process:获取进程。
  • Stop-Service:停止服务。
  • New-Item:新建一个项目(如文件或文件夹)。

获取帮助

PowerShell 最好的特性之一就是它内置的、非常完善的帮助系统,任何时候你遇到不懂的命令,都可以用 Get-Help

  • Get-Help <命令名>:获取命令的基本帮助。
  • Get-Help <命令名> -Detailed:获取更详细的信息,包括参数描述。
  • Get-Help <命令名> -Full:获取完整的帮助文档,包括示例。
  • Get-Help <命令名> -Examples:只查看使用示例。

示例:

PowerShell教程怎么学?从入门到上手要多久?-图3
(图片来源网络,侵删)
Get-Help Get-Process

这是学习 PowerShell 的最佳习惯!

使用别名

为了方便用户和兼容旧习惯,PowerShell 提供了别名,别名是短命令,映射到完整的 动词-名词 命令。

  • ls -> Get-ChildItem (列出当前目录下的内容)
  • cd -> Set-Location (切换目录)
  • pwd -> Get-Location (获取当前目录)
  • cat -> Get-Content (查看文件内容)
  • copy -> Copy-Item (复制文件/文件夹)
  • del / rm -> Remove-Item (删除文件/文件夹)

注意:虽然别名方便,但为了脚本的可读性和长期维护,强烈建议在编写脚本时使用完整的命令名。

管道

管道是 字符,它将左边命令的输出(对象)作为右边命令的输入。

示例: 假设你想查看当前系统中所有正在运行的进程,并找出名字包含 "chrome" 的进程。

  1. Get-Process 会获取所有进程对象。
  2. Where-Object 是一个筛选命令。
  3. 我们用管道把它们连接起来:
Get-Process | Where-Object {$_.Name -like "*chrome*"}

解释一下这个命令:

  • Get-Process:获取所有进程。
  • 将进程对象传递给下一个命令。
  • Where-Object {...}:筛选符合条件的对象。
  • $_:这是一个特殊变量,代表当前正在处理的管道对象,它代表每一个进程。
  • Name -like "*chrome*":检查进程的 Name 属性是否匹配通配符模式 "chrome"(即包含 "chrome")。

变量

变量用于存储数据,变量名以 符号开头。

# 定义一个变量
$myName = "PowerShell Learner"
$processCount = (Get-Process).Count
# 使用变量
Write-Host "Hello, $myName!"
Write-Host "There are $processCount processes running."

通配符

PowerShell 支持标准的通配符来匹配文件名或字符串:

  • 匹配零个或多个字符。
  • 匹配单个字符。
  • []:匹配指定范围内的字符([a-c])。

示例:

  • Get-ChildItem *.txt:获取所有 .txt 文件。
  • Get-Process s*:获取所有以 "s" 开头的进程。

第三部分:常用核心命令

这里是一些最常用的命令,掌握它们你就能完成大部分日常任务。

命令 别名 功能描述
Get-ChildItem ls, dir 获取目录中的项(文件和文件夹)。
Set-Location cd 更改当前工作目录。
Get-Location pwd 获取当前工作路径。
New-Item ni 创建新文件或新文件夹。
Remove-Item del, rm 删除文件或文件夹。
Copy-Item copy, cp 复制文件或文件夹。
Rename-Item ren 重命名文件或文件夹。
Get-Content cat, type 读取文件内容。
Out-File 将命令输出写入到文件中。
Select-Object select 从对象中选择指定的属性。
Where-Object where 根据条件筛选对象。
Sort-Object sort 对对象进行排序。
Measure-Object measure 计算对象的数值属性(如总和、平均值、计数)。
ForEach-Object foreach 对管道中的每个对象执行操作。

第四部分:实战演练

让我们通过几个例子来感受一下 PowerShell 的强大。

练习 1:查找并清理大文件

假设你想在 C:\Users 目录下查找所有超过 100MB 的 .log 文件,并列出它们的详细信息。

# 1. 进入目标目录
Set-Location C:\Users
# 2. 查找所有.log文件,筛选出大小大于100MB的(100MB = 100 * 1024 * 1024 字节)
#    -Path "*.log" 指定查找.log文件
#    -Recurse 递归查找所有子目录
#    -Filter "Length -gt 100MB" 筛选条件
Get-ChildItem -Path "*.log" -Recurse -Filter { $_.Length -gt 100MB }
# 3. 将结果保存到一个文件中,方便查看
Get-ChildItem -Path "*.log" -Recurse -Filter { $_.Length -gt 100MB } | Out-File -FilePath C:\Temp\LargeLogFiles.txt

练习 2:管理 Windows 服务

假设你想找出所有正在运行的 "Microsoft" 相关的服务,并停止它们。

# 1. 获取所有服务
# 2. 筛选出状态为 "Running" 且 DisplayName 包含 "Microsoft" 的服务
# 3. 停止这些服务
Get-Service | Where-Object { $_.Status -eq 'Running' -and $_.DisplayName -like '*Microsoft*' } | Stop-Service

注意:执行 Stop-Service 需要管理员权限,右键点击 PowerShell 窗口,选择“以管理员身份运行”。


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

脚本是一系列保存在 .ps1 文件中的 PowerShell 命令。

  1. 创建脚本文件:在记事本或其他代码编辑器中输入以下内容。
  2. 保存文件:将其保存为 HelloScript.ps1
# 这是一个简单的 PowerShell 脚本
Write-Host "Hello from PowerShell Script!"
Write-Host "The current date and time is: $(Get-Date)"
# 获取并显示前5个进程
Write-Host "Here are the first 5 processes:"
Get-Process | Select-Object -First 5 | Format-Table Name, Id, CPU -AutoSize
  1. 执行脚本
    • 在 PowerShell 窗口中,使用 cd 命令进入你保存脚本的目录。
    • 然后输入 .\HelloScript.ps1 并回车。

可能会遇到的问题:默认情况下, PowerShell 的执行策略是 Restricted(受限),不允许运行脚本,你需要更改它。

  • 以管理员身份运行 PowerShell
  • 执行以下命令来更改策略(RemoteSigned 是一个常用的策略,允许本地脚本运行):
    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
  • 系统会提示你确认,输入 Y 并回车。

再次尝试运行你的脚本,它应该就能正常工作了。


第六部分:进阶学习资源

当你掌握了基础后,可以探索以下更高级的主题和资源:

  • ISE 和 VS Code:使用集成开发环境来编写和调试脚本,Visual Studio Code 配合 PowerShell 扩展是目前最流行的选择。
  • 远程管理:学习使用 Enter-PSSessionInvoke-Command 在远程计算机上执行命令。
  • Desired State Configuration (DSC):一种强大的配置管理工具,用于自动化服务器的部署和配置。
  • PowerShell 7+:了解最新版本的 PowerShell,它带来了更多跨平台改进和性能提升。

推荐资源:

  1. Microsoft 官方文档PowerShell 文档 - 最权威、最全面的资料。
  2. Learn PowerShell in a Month of Lunches:一本非常经典的入门书籍。
  3. The PoshGram 博客:由 PowerShell 团队成员撰写,内容深入。
  4. YouTube 频道:搜索 "PowerShell" 或 "Jeff Hicks",有很多优秀的视频教程。

PowerShell 是一个工具,熟能生巧,不要害怕尝试,多用 Get-Help,多写小脚本,多使用管道来组合命令,很快你就会发现,曾经需要手动重复几十次的操作,现在只需要一行简单的 PowerShell 命令就能完成,祝你学习愉快!

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