菜鸟科技网

PowerShell命令大全,最常用命令有哪些?

目录

  1. PowerShell 核心概念

    PowerShell命令大全,最常用命令有哪些?-图1
    (图片来源网络,侵删)
    • 什么是 PowerShell?
    • Shell vs. PowerShell ISE vs. VS Code
    • 命令、 cmdlet、 函数、 脚本
    • 管道
    • 对象
    • 提供者
    • 别名
  2. 基础命令与操作

    • 系统信息
    • 文件和文件夹管理
    • 进程管理
    • 服务管理
    • 网络管理
    • 用户和组管理
    • 软件管理
    • 系统信息与配置
  3. 进阶命令与脚本

    • 变量
    • 条件判断
    • 循环
    • 函数与模块
    • 错误处理
    • 正则表达式
  4. 常用交互式命令

    • 获取帮助
    • 历史记录与自动补全
    • 会话管理
  5. 实用技巧与最佳实践

    PowerShell命令大全,最常用命令有哪些?-图2
    (图片来源网络,侵删)
    • 使用 Get-Member 探索对象
    • 使用 Format- cmdlet 美化输出
    • 使用 Select-Object 精选属性
    • 使用 Where-Object 筛选对象
    • 使用 ForEach-ObjectMeasure-Object
    • 远程执行
  6. 资源与链接


PowerShell 核心概念

什么是 PowerShell?

PowerShell 是一个基于任务的命令行 shell 和脚本语言,构建在 .NET 之上,它处理的是对象,而不仅仅是文本。

Shell vs. PowerShell ISE vs. VS Code

  • PowerShell (Shell): 命令行界面,用于执行命令和脚本。
  • PowerShell ISE (Integrated Scripting Environment): 旧版的图形化脚本编辑器,功能强大但已停止更新。
  • PowerShell VS Code: 现代、强大的跨平台代码编辑器,是编写 PowerShell 脚本的首选工具。

命令、 cmdlet、 函数、 脚本

  • Cmdlet (读作 "command-let"): PowerShell 的核心命令,遵循 动词-名词 的命名规范(如 Get-Process, Set-Content)。
  • 函数: 可以由用户或系统定义的可重用代码块,可以像 cmdlet 一样使用。
  • 脚本: 保存在 .ps1 文件中的一系列 cmdlet 和命令。
  • 命令: 一个总称,可以指代 cmdlet、函数、脚本、外部程序等。

管道

管道 () 是将一个命令的输出作为另一个命令的输入的机制,它连接的是对象,而不是纯文本。

# 获取所有以 "s" 开头的进程,然后筛选出 CPU 使用率最高的前5个
Get-Process | Where-Object { $_.Name -like "s*" } | Sort-Object -Property CPU -Descending | Select-Object -First 5

对象

PowerShell 中的所有数据都是对象,管道传递的是对象,这使得数据可以非常灵活地被后续命令处理。

PowerShell命令大全,最常用命令有哪些?-图3
(图片来源网络,侵删)

提供者

提供者让 PowerShell 能够像访问文件系统一样访问其他数据存储,如注册表 (HKLM:\)、环境变量 (Env:\)、证书 (Cert:\) 等。

别名

为了方便习惯 cmd 或其他 shell 的用户,PowerShell 提供了别名。lsGet-ChildItem 的别名,cdSet-Location 的别名。


基础命令与操作

系统信息

命令 功能 示例
Get-Host$PSVersionTable 显示 PowerShell 版本信息 $PSVersionTable
Get-ComputerInfo 获取详细的计算机信息 Get-ComputerInfo -OSName, OSVersion
systeminfo 调用外部 systeminfo.exe 命令 systeminfo

文件和文件夹管理

命令 功能 示例
Get-ChildItemls, dir 列出目录中的内容 Get-ChildItem C:\Windows
Set-Locationcd, chdir 更改当前目录 Set-Location C:\Temp
New-Item 创建新文件或目录 New-Item -Path "C:\Temp\newfile.txt" -ItemType File
Remove-Itemrm, del, rmdir 删除文件或目录 Remove-Item "C:\Temp\oldfile.txt"
Copy-Itemcp 复制文件或目录 Copy-Item "C:\source.txt" -Destination "C:\destination.txt"
Move-Itemmv 移动文件或目录 Move-Item "C:\temp\file.txt" -Destination "C:\archive\"
Rename-Itemren 重命名文件或目录 Rename-Item "C:\oldname.txt" -NewName "C:\newname.txt"
Get-Contentcat, type 读取文件内容 Get-Content "C:\log.txt"
Set-Content (覆盖) Set-Content "C:\log.txt" -Value "New Log Entry"
Add-Content Add-Content "C:\log.txt" -Value "Another Entry"
Get-Item 获取文件或目录的项对象 Get-Item "C:\Windows\notepad.exe"
Test-Path 检查路径是否存在 Test-Path "C:\Windows\System32"

进程管理

命令 功能 示例
Get-Processps 获取正在运行的进程列表 Get-Process
Stop-Processkill, spps 停止一个进程 Stop-Process -Name "notepad"
Start-Processsaps 启动一个新进程 Start-Process "notepad.exe"
Wait-Process 等待进程结束 Wait-Process -Name "mspaint"

服务管理

命令 功能 示例
Get-Service 获取所有服务的列表 Get-Service
Start-Service 启动一个服务 Start-Service -Name "spooler"
Stop-Service 停止一个服务 Stop-Service -Name "spooler"
Restart-Service 重启一个服务 Restart-Service -Name "spooler"
Set-Service 更改服务的属性(如启动类型) Set-Service -Name "spooler" -StartupType Automatic

网络管理

命令 功能 示例
Test-Connectionping 测试网络连接 Test-Connection google.com
Resolve-DnsNamenslookup 执行 DNS 查询 Resolve-DnsName www.bing.com
Get-NetAdapter 获取网络适配器信息 Get-NetAdapter | Where-Object { $_.Status -eq "Up" }
Get-NetIPAddress 获取 IP 地址信息 Get-NetIPAddress -AddressFamily IPv4
Invoke-WebRequestcurl, wget 发送 HTTP/HTTPS 请求并获取响应 Invoke-WebRequest -Uri "https://api.github.com" -UseBasicParsing

用户和组管理 (需要管理员权限)

命令 功能 示例
Get-LocalUser 获取本地用户账户列表 Get-LocalUser
New-LocalUser 创建新的本地用户 New-LocalUser -Name "TestUser" -Password (Read-Host -AsSecureString "Enter Password")
Remove-LocalUser 删除本地用户 Remove-LocalUser -Name "TestUser"
Get-LocalGroup 获取本地组列表 Get-LocalGroup
Add-LocalGroupMember 将用户添加到本地组 Add-LocalGroupMember -Group "Administrators" -Member "TestUser"

软件管理

命令 功能 示例
Get-Package 获取已安装的软件包 (需要 PowerShellGet 模块) Get-Package -ProviderName Programs
Find-Package 查找可安装的软件包 (需要 PowerShellGet 模块) Find-Package -Name "7zip" -Source PSGallery
Install-Package 安装软件包 (需要 PowerShellGet 模块) Install-Package -Name "7zip" -Source PSGallery
winget install 使用 Windows Package Manager 安装软件 winget install --id Git.Git

系统信息与配置

命令 功能 示例
Get-HotFix 获取已安装的 Windows 更新 Get-HotFix -Id KB5005565
Get-EventLog 读取 Windows 事件日志 Get-EventLog -LogName Application -Newest 10
Get-ExecutionPolicy 获取当前脚本执行策略 Get-ExecutionPolicy
Set-ExecutionPolicy 设置脚本执行策略 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Enable-PSRemoting 启用 PowerShell 远程处理 (需要管理员) Enable-PSRemoting

进阶命令与脚本

变量

使用 符号定义和使用变量。

$myVariable = "Hello, World"
Write-Output $myVariable
$computerName = $env:COMPUTERNAME # 访问环境变量

条件判断

使用 if, elseif, else

$age = 25
if ($age -ge 18) {
    Write-Output "You are an adult."
} elseif ($age -ge 13) {
    Write-Output "You are a teenager."
} else {
    Write-Output "You are a child."
}

循环

  • for: 用于已知次数的循环。
  • foreach: 用于遍历集合中的每个项。
  • while: 当条件为真时循环。
# foreach
$processes = Get-Process
foreach ($proc in $processes) {
    Write-Output $proc.Name
}
# for
for ($i = 1; $i -le 5; $i++) {
    Write-Output "Count: $i"
}

函数与模块

  • 函数: 封装可重用的代码块。
    function Get-MyDiskInfo {
        Get-Volume | Format-Table DriveLetter, FileSystemLabel, SizeRemaining
    }
    Get-MyDiskInfo
  • 模块: 包含多个函数、cmdlet 和脚本的文件集合,用于扩展 PowerShell 功能,可以使用 Import-Module 导入。

错误处理

使用 try, catch, finally 来处理可能出现的错误。

try {
    # 尝试执行可能出错的代码
    $content = Get-Content -Path "C:\nonexistentfile.txt"
}
catch {
    # 捕获错误并处理
    Write-Warning "An error occurred: $_"
}
finally {
    # 无论是否出错都会执行
    Write-Output "This block always runs."
}

正则表达式

PowerShell 使用 -match, -replace 等操作符支持正则表达式。

$text = "My email is test.user@example.com"
if ($text -match "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}") {
    $matches[0] # 访问匹配到的内容
}
# 替换
$newText = $text -replace "test.user", "john.doe"
Write-Output $newText

常用交互式命令

获取帮助

PowerShell 的帮助系统非常强大。

命令 功能 示例
Get-Help 获取 cmdlet、函数等的帮助信息 Get-Help Get-Process
Update-Help 更新本地帮助文档 (需要管理员) Update-Help
Get-Command 查找所有可用的命令 Get-Command -Verb Get
Get-Alias 查找所有别名 Get-Alias

帮助参数:

  • -Detailed: 显示更详细的信息,包括参数说明。
  • -Examples: 显示使用示例。
  • -Full: 显示完整帮助信息(包括技术细节)。
# 查看 Get-Process 的示例
Get-Help Get-Process -Examples

历史记录与自动补全

  • 上/下箭头: 浏览命令历史。
  • Tab 键: 自动补全命令、参数、路径和文件名。
  • Ctrl + R: 搜索命令历史 (反向搜索)。

会话管理

命令 功能 示例
Exit-PSSessionexit 退出远程会话 Exit-PSSession
Clear-Hostcls 清除屏幕 cls

实用技巧与最佳实践

使用 Get-Member 探索对象

这是学习 PowerShell 最重要、最强大的命令之一,它可以显示任何对象的属性和方法。

# 获取一个进程对象,然后查看它的所有成员
$proc = Get-Process -Id $PID
$proc | Get-Member
# 查看特定属性
$proc | Select-Object -Property Id, Name, CPU

使用 Format- cmdlet 美化输出

默认情况下,PowerShell 会以表格形式显示数据。Format- cmdlet 可以改变输出格式。

命令 功能 示例
Format-Listfl 以列表形式显示每个对象的属性 Get-Process | Format-List Name, Id, CPU
Format-Tableft 以表格形式显示(默认) Get-Process | Format-Table Name, Id, CPU -AutoSize
Format-Wide 以宽列表形式显示,只显示一个属性 Get-ChildItem C:\Windows | Format-Wide Name -Column 3

使用 Select-Object 精选属性

只显示你关心的属性,使输出更清晰。

# 只显示进程的名称和ID
Get-Process | Select-Object -Property Name, Id

使用 Where-Object 筛选对象

根据条件过滤对象集合。$_ 代表当前正在处理的对象。

# 只显示CPU使用率超过100的进程
Get-Process | Where-Object { $_.CPU -gt 100 }
# 使用简化语法 (推荐)
Get-Process | Where-Object CPU -gt 100

使用 ForEach-ObjectMeasure-Object

  • ForEach-Object: 对集合中的每个对象执行操作。
  • Measure-Object: 对数值属性进行计算(求和、平均值等)。
# 对每个进程执行一个操作
Get-Process | ForEach-Object { Write-Output "Processing process: $($_.Name)" }
# 计算所有进程的CPU总使用量
Get-Process | Measure-Object -Property CPU -Sum

远程执行

在多台计算机上执行命令。

# 在远程计算机上执行命令
Invoke-Command -ComputerName "Server01", "Server02" -ScriptBlock {
    Get-Process | Where-Object Name -like "win*"
}
# 建立持久化的远程会话
$session = New-PSSession -ComputerName "Server01"
Invoke-Command -Session $session -ScriptBlock { Get-Service }
Remove-PSSession -Session $session

资源与链接

这份大全涵盖了 PowerShell 的绝大部分常用功能,要真正掌握它,最好的方法就是多练习,尝试用 PowerShell 完成日常的自动化任务。

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