PowerShell是微软开发的跨平台自动化工具和脚本语言,核心包括面向对象管道、基于.NET的Cmdlet命令集及脚本自动化能力,用于系统管理和任务自动化。
PowerShell (PS) 是微软开发的跨平台任务自动化和配置管理框架,包含一个强大的命令行 shell 和脚本语言,它超越了传统命令提示符 (cmd),通过处理 对象(而非纯文本)和提供丰富的 Cmdlet(读作 “command-let”)来执行复杂任务。
- Cmdlet: PowerShell 的核心命令,遵循
动词-名词
命名约定(如Get-Process
,Set-Location
,Stop-Service
),清晰表达其功能。 - 对象: Cmdlet 输入和输出的是具有属性和方法的 .NET 对象,这使得数据操作更强大(直接筛选进程的
CPU
属性)。 - 管道 (): 将一个 Cmdlet 的输出作为另一个 Cmdlet 的输入传递,实现命令链式组合。
- 参数: 用于配置 Cmdlet 的行为,通常以 开头(如
-Name
,-Recurse
),有位置参数和命名参数。 - 别名 (Alias): 常用命令或 Cmdlet 的简短替代名称(如
dir
是Get-ChildItem
的别名,cd
是Set-Location
的别名)。 - *脚本 (`.ps1`):** 包含一系列 PowerShell 命令的文本文件,用于自动化任务。
如何有效使用 PowerShell 命令:基础步骤与技巧
-
启动 PowerShell:
- Windows:
- 按
Win + R
,输入powershell
或pwsh
(PowerShell Core 7+) 回车。 - 在开始菜单搜索 “PowerShell”。
- 在文件资源管理器地址栏输入
powershell
或pwsh
回车(在当前目录打开)。
- 按
- macOS/Linux: 打开终端,输入
pwsh
回车(需预先安装 PowerShell Core)。
- Windows:
-
获取帮助 –
Get-Help
:- 这是最重要的命令! 遇到任何不熟悉的 Cmdlet,首先查询其帮助文档。
- 基本用法:
Get-Help <Cmdlet名称>
(Get-Help Get-Process
) - 详细帮助:
Get-Help <Cmdlet名称> -Full
(显示所有参数、示例、技术细节) - 在线帮助:
Get-Help <Cmdlet名称> -Online
(在默认浏览器中打开官方在线文档) - 查找命令:
Get-Help *<关键词>*
(Get-Help *process*
查找所有包含 “process” 的命令)
-
发现命令 –
Get-Command
:- 查找可用的 Cmdlet、函数、别名等。
- 按名称查找:
Get-Command <名称或部分名称>
(Get-Command Get-*
查找所有以 “Get-” 开头的命令) - 按模块查找:
Get-Command -Module <模块名>
(Get-Command -Module NetAdapter
查看网络适配器相关命令) - 查看命令类型:
Get-Command
输出中的CommandType
列显示类型(Cmdlet、Alias、Function 等)。
-
执行基本命令:
- 导航目录:
Set-Location
或cd
: 更改当前目录 (例:cd C:\Users\YourName\Documents
,cd ..
返回上级目录)Get-Location
或pwd
: 显示当前目录路径。
- 查看目录内容:
Get-ChildItem
或dir
/ls
: 列出当前目录下的文件和子目录。-Path
: 指定路径 (例:Get-ChildItem -Path C:\Windows
)-Filter
: 按名称筛选 (例:Get-ChildItem -Filter *.txt
)-Recurse
: 递归列出所有子目录内容 (例:Get-ChildItem -Recurse
)-File
/-Directory
: 仅列出文件或目录。
- 管理进程:
Get-Process
或ps
: 列出正在运行的进程。-Name
: 按进程名筛选 (例:Get-Process -Name chrome
)
Stop-Process
: 停止进程。-Name
: 按名称停止 (例:Stop-Process -Name notepad
– 会停止所有记事本)-Id
: 按进程 ID (PID) 停止 (更精确,先用Get-Process
查 PID) (例:Stop-Process -Id 1234
)
Start-Process
: 启动新进程/程序 (例:Start-Process notepad
,Start-Process "C:\MyApp.exe" -ArgumentList "/silent"
)
- 管理服务:
Get-Service
: 列出系统服务。-Name
: 按服务名筛选 (例:Get-Service -Name WinRM
)-DisplayName
: 按显示名筛选。-Status
: 按状态筛选 (Running, Stopped) (例:Get-Service -Status Running
)
Start-Service
: 启动服务 (例:Start-Service -Name WinRM
)Stop-Service
: 停止服务 (例:Stop-Service -Name Spooler
)Restart-Service
: 重启服务 (例:Restart-Service -Name WinRM
)
- 获取系统信息:
Get-ComputerInfo
: 获取广泛的计算机系统信息 (OS, BIOS, 硬件等)。Get-HotFix
: 查看已安装的更新补丁。Get-NetIPConfiguration
/ipconfig
: 查看网络配置 (IP 地址、网关、DNS 等)。
- 导航目录:
-
利用管道 () 进行强大组合:
- 管道允许你将一个命令的输出无缝传递给另一个命令作为输入。
- 示例 1: 获取所有正在运行的进程,按 CPU 使用率降序排序,并显示前 5 个:
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5
- 示例 2: 停止所有名为 “notepad” 的进程:
Get-Process -Name notepad | Stop-Process
- 示例 3: 获取所有已停止的服务,并只显示它们的显示名称和状态:
Get-Service | Where-Object {$_.Status -eq 'Stopped'} | Select-Object DisplayName, Status
- 关键管道 Cmdlet:
Where-Object
(或 ): 根据条件筛选对象 (例:... | Where-Object {$_.CPU -gt 50}
筛选 CPU > 50% 的进程)。Select-Object
(或select
): 选择对象的特定属性 (例:... | Select-Object Name, Id, CPU
只显示进程名、PID 和 CPU)。Sort-Object
(或sort
): 根据属性对对象排序 (例:... | Sort-Object WorkingSet -Descending
按内存使用降序排序)。ForEach-Object
(或 ): 对集合中的每个对象执行操作 (例:Get-Service | ForEach-Object { $_.Stop() }
停止所有服务 – 慎用!)。
-
使用参数:
- 命名参数: 最常见,使用 后跟参数名和值 (例:
Get-ChildItem -Path C:\Windows -Filter *.dll -Recurse
)。 - 位置参数: 某些常用参数可以省略名称,按定义的位置提供值,查看
Get-Help
中的SYNTAX
部分了解位置顺序 (例:Get-ChildItem C:\Windows *.dll
等同于上面命名参数的例子,Path
和Filter
是位置参数)。 - 开关参数: 不需要值,存在即表示
$true
(例:Get-ChildItem -Recurse
中的-Recurse
)。
- 命名参数: 最常见,使用 后跟参数名和值 (例:
-
处理输出:
- 默认输出: 根据对象类型,PowerShell 会自动格式化输出到屏幕。
- 格式化输出:
Format-Table
(ft
): 以表格形式显示 (例:Get-Process | Format-Table Name, Id, CPU -AutoSize
)。Format-List
(fl
): 以列表形式显示对象的所有属性 (例:Get-Process -Name powershell | Format-List *
)。Format-Wide
(fw
): 以宽格式(多列)显示单个属性 (例:Get-ChildItem | Format-Wide Name -Column 3
)。
- 输出到文件:
Out-File
: 将输出写入文本文件 (例:Get-Process > processes.txt
或Get-Process | Out-File -FilePath processes.txt
)。>
是Out-File
的重定向运算符。Export-Csv
: 将对象输出为 CSV 文件 (例:Get-Service | Export-Csv -Path services.csv -NoTypeInformation
)。Export-Clixml
: 将对象序列化为 XML 文件,保留对象结构和类型信息 (例:Get-Process | Export-Clixml -Path processes.xml
)。
-
*运行脚本 (`.ps1`):**
- 执行策略: 出于安全考虑,默认可能阻止脚本运行,查看当前策略:
Get-ExecutionPolicy
,常见策略:Restricted
: 默认,不允许任何脚本运行。AllSigned
: 只允许运行由受信任发布者签名的脚本。RemoteSigned
: 本地脚本可运行,从网上下载的脚本需签名。Unrestricted
: 允许所有脚本运行(不推荐,有风险)。
- 更改策略 (需管理员权限):
Set-ExecutionPolicy <PolicyName>
(例:Set-ExecutionPolicy RemoteSigned
)。 - 运行脚本: 在脚本所在目录打开 PowerShell,输入脚本路径 (例:
.\MyScript.ps1
)。注意前面的.\
是必须的,表示运行当前目录下的脚本。
- 执行策略: 出于安全考虑,默认可能阻止脚本运行,查看当前策略:
重要安全与最佳实践
- 最小权限原则: 日常操作使用标准用户账户,仅在需要管理员权限执行特定任务时,使用 以管理员身份运行 启动 PowerShell (右键点击 PowerShell 图标选择)。
- 理解命令再执行: 永远不要盲目复制粘贴网上找到的命令! 使用
Get-Help
理解命令的作用和参数,特别注意涉及删除 (Remove-Item
/rm
/del
/rd
)、停止服务 (Stop-Service
)、修改系统配置或注册表的命令。 - *谨慎使用通配符 (`
) 和递归 (
-Recurse):** 结合
Remove-Item等命令时极易误删大量文件,务必先使用
Get-ChildItem` 配合相同参数预览将要操作的文件。 - 脚本安全:
- 只从可信来源获取脚本。
- 在运行前检查脚本内容。
- 优先使用
RemoteSigned
执行策略。 - 考虑对常用脚本进行数字签名。
- 利用 Tab 补全: 在命令行输入命令或路径时,按
Tab
键可以自动补全名称,提高效率并减少拼写错误。 - 持续学习:
- 官方文档是金标准: 微软官方文档是最权威、最全面的学习资源。
- 社区资源: Stack Overflow, PowerShell Gallery, 技术博客等是解决问题的宝贵场所。
延伸学习资源
- Microsoft Learn PowerShell 学习路径:
https://learn.microsoft.com/zh-cn/training/paths/powershell/
(替换zh-cn
为你的语言代码,如en-us
) - PowerShell 文档:
https://learn.microsoft.com/zh-cn/powershell/
(核心参考) - PowerShell Gallery:
https://www.powershellgallery.com/
(查找社区模块和脚本)
引用说明
- 本文中涉及的所有 PowerShell Cmdlet 功能、语法、参数描述及核心概念均基于 Microsoft 官方 PowerShell 文档。
- 安全最佳实践部分参考了微软关于 PowerShell 安全性和执行策略的官方建议。
- E-A-T 原则通过依赖官方文档来源、强调安全操作、提供实用且准确的操作步骤以及推荐权威学习资源来体现。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7272.html