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
: 指定要创建的项的类型(File
、Directory
、SymbolicLink
、Junction
、HardLink
)。-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这个示例演示了如何使用管道:
Get-ChildItem
获取 C:\Windows 目录下的所有文件。Where-Object
过滤出长度大于 1MB 的文件。Sort-Object
按长度降序排序文件。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) 等。