PowerShell核心概念有哪些必知点?

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 的简短替代名称(如 dirGet-ChildItem 的别名,cdSet-Location 的别名)。
  • *脚本 (`.ps1`):** 包含一系列 PowerShell 命令的文本文件,用于自动化任务。

如何有效使用 PowerShell 命令:基础步骤与技巧

  1. 启动 PowerShell:

    • Windows:
      • Win + R,输入 powershellpwsh (PowerShell Core 7+) 回车。
      • 在开始菜单搜索 “PowerShell”。
      • 在文件资源管理器地址栏输入 powershellpwsh 回车(在当前目录打开)。
    • macOS/Linux: 打开终端,输入 pwsh 回车(需预先安装 PowerShell Core)。
  2. 获取帮助 – Get-Help:

    • 这是最重要的命令! 遇到任何不熟悉的 Cmdlet,首先查询其帮助文档。
    • 基本用法: Get-Help <Cmdlet名称> (Get-Help Get-Process)
    • 详细帮助: Get-Help <Cmdlet名称> -Full (显示所有参数、示例、技术细节)
    • 在线帮助: Get-Help <Cmdlet名称> -Online (在默认浏览器中打开官方在线文档)
    • 查找命令: Get-Help *<关键词>* (Get-Help *process* 查找所有包含 “process” 的命令)
  3. 发现命令 – Get-Command:

    • 查找可用的 Cmdlet、函数、别名等。
    • 按名称查找: Get-Command <名称或部分名称> (Get-Command Get-* 查找所有以 “Get-” 开头的命令)
    • 按模块查找: Get-Command -Module <模块名> (Get-Command -Module NetAdapter 查看网络适配器相关命令)
    • 查看命令类型: Get-Command 输出中的 CommandType 列显示类型(Cmdlet、Alias、Function 等)。
  4. 执行基本命令:

    • 导航目录:
      • Set-Locationcd: 更改当前目录 (例:cd C:\Users\YourName\Documents, cd .. 返回上级目录)
      • Get-Locationpwd: 显示当前目录路径。
    • 查看目录内容:
      • Get-ChildItemdir / ls: 列出当前目录下的文件和子目录。
        • -Path: 指定路径 (例:Get-ChildItem -Path C:\Windows)
        • -Filter: 按名称筛选 (例:Get-ChildItem -Filter *.txt)
        • -Recurse: 递归列出所有子目录内容 (例:Get-ChildItem -Recurse)
        • -File / -Directory: 仅列出文件或目录。
    • 管理进程:
      • Get-Processps: 列出正在运行的进程。
        • -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 等)。
  5. 利用管道 () 进行强大组合:

    • 管道允许你将一个命令的输出无缝传递给另一个命令作为输入。
    • 示例 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() } 停止所有服务 – 慎用!)。
  6. 使用参数:

    • 命名参数: 最常见,使用 后跟参数名和值 (例:Get-ChildItem -Path C:\Windows -Filter *.dll -Recurse)。
    • 位置参数: 某些常用参数可以省略名称,按定义的位置提供值,查看 Get-Help 中的 SYNTAX 部分了解位置顺序 (例:Get-ChildItem C:\Windows *.dll 等同于上面命名参数的例子,PathFilter 是位置参数)。
    • 开关参数: 不需要值,存在即表示 $true (例:Get-ChildItem -Recurse 中的 -Recurse)。
  7. 处理输出:

    • 默认输出: 根据对象类型,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.txtGet-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)。
  8. *运行脚本 (`.ps1`):**

    • 执行策略: 出于安全考虑,默认可能阻止脚本运行,查看当前策略:Get-ExecutionPolicy,常见策略:
      • Restricted: 默认,不允许任何脚本运行。
      • AllSigned: 只允许运行由受信任发布者签名的脚本。
      • RemoteSigned: 本地脚本可运行,从网上下载的脚本需签名。
      • Unrestricted: 允许所有脚本运行(不推荐,有风险)。
    • 更改策略 (需管理员权限): Set-ExecutionPolicy <PolicyName> (例:Set-ExecutionPolicy RemoteSigned)。
    • 运行脚本: 在脚本所在目录打开 PowerShell,输入脚本路径 (例:.\MyScript.ps1)。注意前面的 .\ 是必须的,表示运行当前目录下的脚本。

重要安全与最佳实践

  1. 最小权限原则: 日常操作使用标准用户账户,仅在需要管理员权限执行特定任务时,使用 以管理员身份运行 启动 PowerShell (右键点击 PowerShell 图标选择)。
  2. 理解命令再执行: 永远不要盲目复制粘贴网上找到的命令! 使用 Get-Help 理解命令的作用和参数,特别注意涉及删除 (Remove-Item/rm/del/rd)、停止服务 (Stop-Service)、修改系统配置或注册表的命令。
  3. *谨慎使用通配符 (`) 和递归 (-Recurse):** 结合Remove-Item等命令时极易误删大量文件,务必先使用Get-ChildItem` 配合相同参数预览将要操作的文件。
  4. 脚本安全:
    • 只从可信来源获取脚本。
    • 在运行前检查脚本内容。
    • 优先使用 RemoteSigned 执行策略。
    • 考虑对常用脚本进行数字签名。
  5. 利用 Tab 补全: 在命令行输入命令或路径时,按 Tab 键可以自动补全名称,提高效率并减少拼写错误。
  6. 持续学习:
    • 官方文档是金标准: 微软官方文档是最权威、最全面的学习资源。
    • 社区资源: 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

(0)
酷番叔酷番叔
上一篇 6天前
下一篇 6天前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信