PowerShell 命令详解:常用命令及参数

PowerShell 命令详解:常用命令及参数

PowerShell 是一种跨平台的任务自动化和配置管理框架,由命令行 shell、脚本语言和配置管理框架组成。它基于 .NET,为系统管理员和高级用户提供了强大的工具来管理 Windows、Linux 和 macOS 系统。PowerShell 的强大之处在于其丰富的命令集(称为 cmdlet)和灵活的参数。

本文将深入探讨 PowerShell 的常用命令及其参数,帮助您更好地理解和使用 PowerShell 来提高工作效率。

1. Cmdlet 的基本概念

Cmdlet 是 PowerShell 中的基本构建块,每个 cmdlet 执行一个特定的操作。Cmdlet 的命名遵循“动词-名词”的约定,例如 Get-Process(获取进程)、Set-Location(设置位置)等。这种命名方式使得 cmdlet 的功能一目了然。

2. 获取帮助:Get-Help

在学习和使用 PowerShell 的过程中,Get-Help 是您最强大的助手。它可以提供关于 cmdlet、函数、提供程序、脚本等的详细信息。

  • 基本用法:

    powershell
    Get-Help Get-Process # 获取 Get-Process cmdlet 的帮助
    Get-Help about_Arrays # 获取关于数组的帮助主题

  • 常用参数:

    • -Detailed: 显示详细的帮助信息,包括参数描述、示例等。
    • -Examples: 仅显示示例。
    • -Full: 显示完整的帮助信息,包括语法、参数、示例、备注等。
    • -Online: 在线打开 Microsoft 文档中的帮助页面。
    • -Parameter: 显示特定参数的帮助信息。
    • -ShowWindow: 在单独的窗口中显示帮助信息。
  • 示例:

    powershell
    Get-Help Get-Process -Detailed # 显示 Get-Process 的详细帮助
    Get-Help Get-ChildItem -Examples # 查看 Get-ChildItem 的示例
    Get-Help Get-Service -Parameter Status # 查看 Get-Service 的 Status 参数的帮助

3. 常用 Cmdlet 及参数详解

以下是一些最常用的 PowerShell cmdlet 及其参数的详细说明:

3.1 文件和目录管理

  • Get-ChildItem (别名: ls, dir): 获取文件和目录。

    • 常用参数:

      • -Path: 指定要获取的路径。可以使用通配符。
      • -Filter: 使用通配符过滤文件或目录名。
      • -Include: 指定要包含的文件或目录类型。
      • -Exclude: 指定要排除的文件或目录类型。
      • -Recurse: 递归获取子目录中的文件和目录。
      • -Force: 获取隐藏文件和目录。
      • -File: 仅获取文件。
      • -Directory: 仅获取目录。
      • -Name : 仅返回名称
    • 示例:

      powershell
      Get-ChildItem -Path C:\Windows # 获取 C:\Windows 下的文件和目录
      Get-ChildItem -Path *.txt -Recurse # 递归获取所有 .txt 文件
      Get-ChildItem -Path C:\Temp -Exclude *.log # 获取 C:\Temp 下除 .log 文件外的所有内容
      Get-ChildItem -Directory # 仅获取当前目录中的所有子目录

  • New-Item: 创建新文件或目录。

    • 常用参数:

      • -Path: 指定要创建的文件或目录的路径。
      • -ItemType: 指定要创建的项的类型(FileDirectorySymbolicLinkJunctionHardLink)。
      • -Value: 指定文件内容(创建文件时)。
      • -Force: 如果父目录不存在,则创建父目录。
    • 示例:

      powershell
      New-Item -Path C:\Temp\newfile.txt -ItemType File -Value "Hello, World!" # 创建一个新文件
      New-Item -Path C:\Temp\newdir -ItemType Directory # 创建一个新目录

  • Remove-Item (别名: rm, del, rmdir): 删除文件或目录。

    • 常用参数:

      • -Path: 指定要删除的文件或目录的路径。
      • -Recurse: 递归删除子目录和文件。
      • -Force: 强制删除只读文件或非空目录。
      • -Confirm: 删除前提示确认。
      • -WhatIf: 显示将要执行的操作,但不实际执行。
    • 示例:

      powershell
      Remove-Item -Path C:\Temp\oldfile.txt # 删除文件
      Remove-Item -Path C:\Temp\olddir -Recurse -Force # 强制递归删除目录及其内容

  • Copy-Item (别名: cp, copy): 复制文件或目录。

    • 常用参数:

      • -Path: 指定要复制的源文件或目录的路径。
      • -Destination: 指定目标路径。
      • -Recurse: 递归复制子目录和文件。
      • -Force: 覆盖现有文件。
      • -PassThru : 返回代表已复制项目的对象.
    • 示例:

      powershell
      Copy-Item -Path C:\Source\file.txt -Destination C:\Destination # 复制文件
      Copy-Item -Path C:\Source -Destination C:\Destination -Recurse # 递归复制目录

  • Move-Item (别名: mv, move): 移动文件或目录。

    • 常用参数:

      • -Path: 指定要移动的源文件或目录的路径。
      • -Destination: 指定目标路径。
      • -Force: 覆盖现有文件。
    • 示例:

      powershell
      Move-Item -Path C:\Source\file.txt -Destination C:\Destination # 移动文件
      Move-Item -Path C:\Source -Destination C:\Destination # 移动目录

  • Rename-Item (别名: ren, rename): 重命名文件或目录。

    • -Path : 要重命名的项目
    • -NewName : 项目的新名称

    • 示例:
      powershell
      Rename-Item -Path "old_file.txt" -NewName "new_file.txt"

  • Set-Location (别名: cd, chdir): 更改当前位置。

    • 示例:
      powershell
      Set-Location C:\Windows
      cd .. #移动到上级目录
    • Get-Location (别名: pwd):显示当前位置。

3.2 进程管理

  • Get-Process: 获取正在运行的进程。

    • 常用参数:

      • -Name: 指定进程名称(可以使用通配符)。
      • -Id: 指定进程 ID。
      • -ComputerName: 指定远程计算机。
    • 示例:

      powershell
      Get-Process # 获取所有进程
      Get-Process -Name notepad # 获取名为 notepad 的进程
      Get-Process -Id 1234 # 获取 ID 为 1234 的进程

  • Stop-Process: 停止正在运行的进程。

    • 常用参数:

      • -Name: 指定进程名称(可以使用通配符)。
      • -Id: 指定进程 ID。
      • -Force: 强制停止进程。
      • -PassThru: 返回已停止进程的对象。
    • 示例:

      powershell
      Stop-Process -Name notepad # 停止名为 notepad 的进程
      Stop-Process -Id 1234 -Force # 强制停止 ID 为 1234 的进程

  • Start-Process: 启动新进程。

    • 常用参数:
    • -FilePath: 要运行的文件的路径
    • -ArgumentList : 提供给可执行文件或脚本的参数
    • -Verb: 指定一个动词来打开文件,例如 "print" 或 "edit"

    • 示例:

      powershell
      Start-Process -FilePath notepad # 启动记事本
      Start-Process -FilePath "C:\MyScript.ps1" -ArgumentList "-param1 value1" #用参数启动脚本

3.3 服务管理

  • Get-Service: 获取服务。

    • 常用参数:

      • -Name: 指定服务名称(可以使用通配符)。
      • -DisplayName: 指定服务显示名称(可以使用通配符)。
      • -ComputerName: 指定远程计算机。
    • 示例:

      powershell
      Get-Service # 获取所有服务
      Get-Service -Name w32time # 获取名为 w32time 的服务

  • Start-Service: 启动服务。

    • 常用参数:

      • -Name: 指定服务名称。
      • -DisplayName: 指定服务显示名称。
    • 示例:

      powershell
      Start-Service -Name w32time # 启动 w32time 服务

  • Stop-Service: 停止服务。

    • 常用参数:

      • -Name: 指定服务名称。
      • -DisplayName: 指定服务显示名称。
      • -Force: 强制停止服务。
    • 示例:

      powershell
      Stop-Service -Name w32time # 停止 w32time 服务

  • Restart-Service: 重启服务。

    • 常用参数:

      • -Name: 指定服务名称。
      • -DisplayName: 指定服务显示名称。
      • -Force: 强制重启服务。
    • 示例:

      powershell
      Restart-Service -Name w32time # 重启 w32time 服务

3.4 内容处理

  • Get-Content (别名: cat, type): 获取文件内容。

    • 常用参数:

      • -Path: 指定文件路径。
      • -Tail: 获取文件末尾的指定行数。
      • -Wait: 持续监视文件变化。
      • -Raw: 将整个文件内容作为单个字符串读取。
    • 示例:

      powershell
      Get-Content -Path C:\Temp\log.txt # 获取 log.txt 的内容
      Get-Content -Path C:\Temp\log.txt -Tail 10 # 获取 log.txt 的最后 10 行

  • Set-Content (别名: sc): 将内容写入文件。

    • -Path: 指定文件路径。
    • -Value : 要写入文件的内容
    • -Encoding : 字符编码

    • 示例:

      powershell
      Set-Content -Path C:\Temp\output.txt -Value "Hello, PowerShell!" # 将内容写入 output.txt
      "New Content" | Set-Content -Path file.txt # 使用管道写入内容

      * Add-Content: 向文件中追加内容。
      * -Path: 指定文件路径。
      * -Value : 要追加的内容

    • 示例:
      powershell
      Add-Content -Path log.txt -Value "New log entry"

  • Clear-Content: 清空文件内容。

    • 示例:
      powershell
      Clear-Content -Path file.txt

      3.5 其他常用 Cmdlet
  • Write-Host: 将文本输出到控制台。

    • 常用参数:

      • -ForegroundColor: 指定文本颜色。
      • -BackgroundColor: 指定背景颜色。
    • 示例:

      powershell
      Write-Host "Hello, World!" -ForegroundColor Green # 以绿色显示文本

  • Write-Output: 将对象输出到管道。

    • 示例:
      powershell
      "Hello, World!" | Write-Output # 通常省略,直接写 "Hello, World!"
  • Where-Object (别名: where, ?): 根据条件过滤对象。

    • 示例:

      powershell
      Get-Process | Where-Object {$_.WorkingSet -gt 100MB} # 获取工作集大于 100MB 的进程
      Get-ChildItem | Where-Object Name -like "*.txt" #获取所有txt文件, 效果等同于 Get-ChildItem *.txt

  • ForEach-Object (别名: foreach, %): 对管道中的每个对象执行操作。

    • 示例:

      powershell
      Get-ChildItem | ForEach-Object {Write-Host $_.FullName} # 显示每个文件的完整路径
      1..5 | ForEach-Object {$_ * 2} # 将 1 到 5 的每个数字乘以 2

  • Select-Object (别名: select): 选择对象的属性。

    • 常用参数:

      • -Property: 指定要选择的属性。
      • -First: 选择前几个对象。
      • -Last: 选择最后几个对象。
      • -Skip: 跳过前几个对象。
      • -Unique: 选择唯一对象。
    • 示例:

      powershell
      Get-Process | Select-Object -Property Name, ID, WorkingSet # 选择进程的名称、ID 和工作集
      Get-ChildItem | Select-Object -First 10 # 选择前 10 个文件

  • Sort-Object (别名: sort): 对对象进行排序。

    • 常用参数:

      • -Property: 指定要排序的属性。
      • -Descending: 按降序排序。
    • 示例:

      powershell
      Get-Process | Sort-Object -Property WorkingSet -Descending # 按工作集降序排序进程

      * Group-Object (别名: group): 根据指定的属性对对象进行分组。
      * 示例:

      powershell
      Get-Process | Group-Object -Property ProcessName # 根据进程名对进程进行分组

  • Measure-Object (别名: measure): 计算对象的统计信息(例如计数、平均值、总和、最大值、最小值)。

    • 示例:

      powershell
      Get-ChildItem | Measure-Object -Property Length -Sum -Average -Maximum -Minimum # 计算文件长度的总和、平均值、最大值和最小值

      * Invoke-WebRequest (别名: iwr): 发送 HTTP 和 HTTPS 请求。

    • 常用参数:

      • -Uri : 要请求的 URL。
      • -Method : HTTP 方法 (GET, POST, PUT, DELETE, etc.)。
      • -Headers: 请求头
      • -Body : 请求体
    • 示例:

    powershell
    $response = Invoke-WebRequest -Uri "https://www.example.com"
    Write-Host $response.Content

  • Invoke-RestMethod: 发送 HTTP 请求并自动解析 JSON 或 XML 响应。 比Invoke-WebRequest更高级, 适合处理API

    • 示例:
      powershell
      $data = Invoke-RestMethod -Uri "https://api.example.com/data" -Method Get
  • ConvertFrom-Json: 将 JSON 字符串转换为 PowerShell 对象。

    • 示例:

      powershell
      $json = '{"name": "John Doe", "age": 30}'
      $object = ConvertFrom-Json -InputObject $json
      Write-Host $object.name # 输出 "John Doe"

  • ConvertTo-Json: 将 PowerShell 对象转换为 JSON 字符串。

    • 示例:

    powershell
    $person = @{Name="Alice"; Age=25}
    $json = ConvertTo-Json -InputObject $person

  • ConvertFrom-Csv: 将 CSV 文本转换为对象.

  • ConvertTo-Csv: 将对象转换为 CSV 文本。
  • Export-Csv: 将对象导出到 CSV 文件。
  • Import-Csv: 从 CSV 文件导入对象.

4. 管道(Pipeline)

PowerShell 的管道是其最强大的特性之一。它允许您将一个 cmdlet 的输出作为另一个 cmdlet 的输入,从而将多个命令链接在一起以执行复杂的操作。管道使用管道符 | 连接命令。

  • 示例:

    powershell
    Get-ChildItem -Path C:\Windows -File | Where-Object {$_.Length -gt 1MB} | Sort-Object Length -Descending | Select-Object -First 5

    这个示例演示了如何使用管道:

    1. Get-ChildItem 获取 C:\Windows 目录下的所有文件。
    2. Where-Object 过滤出长度大于 1MB 的文件。
    3. Sort-Object 按长度降序排序文件。
    4. Select-Object 选择前 5 个文件。

5. 变量

PowerShell 中的变量以 $ 符号开头,用于存储数据。

  • 示例:

    powershell
    $filePath = "C:\Temp\log.txt"
    $fileContent = Get-Content -Path $filePath
    Write-Host $fileContent

6. 脚本

PowerShell 脚本是包含一系列 PowerShell 命令的文本文件,文件扩展名为 .ps1

  • 创建一个名为 MyScript.ps1 的文件,其中包含以下内容:

```powershell

MyScript.ps1

Write-Host "Hello from PowerShell script!"
$date = Get-Date
Write-Host "Today is: $($date.ToString('yyyy-MM-dd'))"
```

  • 运行脚本:

    powershell
    .\MyScript.ps1

7. 执行策略

为了安全起见,PowerShell 具有执行策略,用于控制是否允许运行脚本。

  • Get-ExecutionPolicy: 查看当前执行策略。
  • Set-ExecutionPolicy: 设置执行策略。

    • Restricted: 不允许运行任何脚本(默认)。
    • AllSigned: 仅允许运行由受信任的发布者签名的脚本。
    • RemoteSigned: 允许运行本地创建的脚本和由受信任的发布者签名的脚本。
    • Unrestricted: 允许运行所有脚本(不推荐)。
    • Bypass: 不阻止任何脚本,也不显示任何警告或提示。

    powershell
    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser # 将当前用户的执行策略设置为 RemoteSigned

    重要提示: 在更改执行策略之前,请务必了解其安全影响。

8. PowerShell 模块

模块是包含 cmdlet、函数、变量、别名等的打包集合。 它们提供了扩展 PowerShell 功能的方法。

  • Get-Module: 列出已加载的模块和可用模块.

    • -ListAvailable : 显示所有已安装的模块.
  • Import-Module: 加载模块

  • Remove-Module: 卸载模块

总结

本文详细介绍了 PowerShell 的常用命令及其参数,包括文件和目录管理、进程管理、服务管理、内容处理、管道、变量、脚本和执行策略等。 掌握这些基本概念和命令是有效使用 PowerShell 的基础。 通过不断练习和探索,您将能够利用 PowerShell 强大的功能来自动化任务、管理系统并提高工作效率。 记住,Get-Help 是您最好的朋友,随时可以使用它来获取更多信息和帮助。 随着您对PowerShell的更深入了解,您还可以探索更高级的功能,例如远程处理、工作流、期望状态配置 (DSC) 等。

THE END