PowerShell 脚本语言

精选 PowerShell 常用指令与核心速查备忘单,涵盖动词-名词 Cmdlet、管道处理、WMI 硬件查询、注册表管理及脚本编写。

#基础命令 (Basic Commands)

#辅助与帮助命令 (Helper Commands)

PowerShell 命令行工具采用统一的【动词-名词】(Verb-Noun) 命名格式。

常见动词 (Verbs) 含义:

动词 (Verb) 含义与用途描述
Get 获取或检索指定信息
Set 配置或更改系统/对象设置
New 创建新的对象实例或项目
Remove 删除或清理指定项目
Invoke 执行特定的动作或脚本操作
Start 启动或发起一个进程或操作
Stop 暂停、停止或终止运行中的进程
Enable 激活或启用指定功能/特性
Disable 停用或禁用指定功能/特性
Test 执行功能测试、连通性或状态检查
Update 更新或刷新数据/配置信息

列出当前系统所有可用的模块

Get-Module --ListAvailable

列出指定模块包含的 Cmdlet 和函数

Get-Command -Module ActiveDirectory

获取命令帮助文档

Get-Help <cmd>
Get-Help <cmd> -Examples
Get-Help -Name Get-Process -Parameter Id

列出所有别名 (Alias) 及其对应的真实 Cmdlet 名称

Get-Alias | Select-Object Name, Definition

Get-Member: 显示对象的属性 (Properties) 和方法 (Methods)

Get-Process | Get-Member

#对象操作与管道处理 (Object Manipulation)

Select-Object: 选择对象的特定属性或自定义输出展示

Get-Process | Select-Object Name, CPU

Where-Object: 按指定条件过滤集合对象

Get-Service | Where-Object { $PSItem.Status -eq 'Running' }
# 或使用简写别名 ?
Get-Service | ? { $_.Status -eq 'Running' }

Measure-Object: 计算统计数据(如求和 Sum、平均值 Average、计数 Count 等)

Get-Process | Measure-Object -Property WorkingSet -Sum

ForEach-Object: 遍历集合中的每一个对象并执行指定操作(警告:以下命令将给当前目录下的所有文件添加前缀)

Get-ChildItem | ForEach-Object { Rename-Item $_ -NewName "Prefix_$_" }

Sort-Object: 按指定属性对对象进行排序

Get-ChildItem | Sort-Object Length -Descending

Format-Table: 将输出格式化为带有指定列的表格

Get-Service | Format-Table -AutoSize  # 别名为 ft

Format-List: 将输出格式化为属性与值的列表

Get-Process | Format-List -Property Name, CPU  # 别名为 fl

#📁 文件系统操作 (FileSystem)

New-Item -path file.txt -type 'file' -value 'contents'
New-Item -path file.txt -type 'dir'
Copy-Item <src> -destination <dest>
Move-Item -path  <src> -destination <dest>
Remove-Item <file>
Test-Path <path>
Rename-Item -path <path> -newname <newname>

# 调用 .NET 基础基类库 (Base Class Library)
[System.IO.File]::WriteAllText('test.txt', '')
[System.IO.File]::Delete('test.txt')

Get-Content -Path "test.txt"
Get-Process | Out-File -FilePath "processes.txt"# 输出结果到文件
Get-Process | Export-Csv -Path "processes.csv"  # 导出为 CSV 文件
$data = Import-Csv -Path "data.csv"             # 从 CSV 文件导入数据

#系统管理 (System Management)

#🪟 Windows 管理规范 (WMI / CIM)

# 获取 BIOS 固件信息
Get-CimInstance -ClassName Win32_BIOS
# 获取本地连接的物理磁盘设备信息
Get-CimInstance -ClassName Win32_DiskDrive
# 获取已安装的物理内存 (RAM) 信息
Get-CimInstance -ClassName Win32_PhysicalMemory
# 获取已安装的网络适配器 (物理与虚拟网卡)
Get-CimInstance -ClassName Win32_NetworkAdapter
# 获取显卡/视频控制器 (GPU) 信息
Get-CimInstance -ClassName Win32_VideoController

# 列出所有可用的 ClassClassName
Get-CimClass | Select-Object -ExpandProperty CimClassName
# 探索 root\cimv2 命名空间下的各类 WMI 类
Get-CimClass -Namespace root\cimv2
# 探索 root\cimv2 命名空间下的子 WMI 命名空间
Get-CimInstance -Namespace root -ClassName __NAMESPACE

#网络管理 (Network Management)

# 测试与远程主机的网络连通性 (Ping)
Test-Connection -ComputerName google.com

# 获取网卡适配器信息
Get-NetAdapter

# 获取 IP 地址配置信息
Get-NetIPAddress

# 获取系统路由表信息
Get-NetRoute

# 测试远程主机的特定端口是否开放
Test-NetConnection google.com -Port 80

#用户与用户组管理 (User & Group Management)

# 获取本地用户账号信息
Get-LocalUser

# 创建新的本地用户账号
New-LocalUser -Name NewUser -Password (ConvertTo-SecureString "Password123" -AsPlainText -强制执行)

# 删除本地用户账号
Remove-LocalUser -Name UserToRemove

# 获取本地用户组信息
Get-LocalGroup

# 将成员添加到本地用户组 (如 Administrators 管理员组)
Add-LocalGroupMember -Group Administrators -Member UserToAdd

#安全与权限管理 (Security & Permissions)

# 获取文件/目录的访问控制列表 (ACL)
Get-Acl C:\Path\To\File.txt

# 设置文件/目录的访问控制列表
Set-Acl -Path C:\Path\To\File.txt -AclObject $aclObject

#注册表管理 (Registry Management)

# 读取注册表键值
Get-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*" | Select DisplayName, DisplayVersion

# 修改注册表键值
Set-ItemProperty -Path "HKLM:\Software\MyApp" -Name "SettingName" -Value "NewValue"

# 创建新的注册表键值项
New-ItemProperty -Path "HKCU:\Software\MyApp" -Name "NewSetting" -Value "NewValue" -PropertyType String

# 删除注册表键值
Remove-ItemProperty -Path "HKCU:\Software\MyApp" -Name "SettingToRemove"

# 检查注册表路径是否存在
Test-Path "HKLM:\Software\MyApp"

#脚本编写 (Scripting)

#变量 (Variables)

初始化变量(带类型或不带类型约束):

$var = 0
[int] $var = 'Trevor'         # (抛出强类型转换异常)
[string] $var = 'Trevor'      # (正常声明为字符串类型)
$var.GetType()

# 多个变量并发赋值
$a,$b,$c = 'a','b','c'

# 创建数组变量
$arrayvar = @('va1','va2')

# 创建哈希字典变量
$dict = @{k1 = 'test'; k2 = 'best'}

变量相关 Cmdlet 命令

New-Variable -Name FirstName -Value Trevor
New-Variable FirstName -Value Trevor -Option <ReadOnly/Constant>

Get-Variable
Get-Variable | ? { $PSItem.Options -contains 'constant' }
Get-Variable | ? { $PSItem.Options -contains 'readonly' }

Remove-Variable -Name firstname
# 强制删除只读变量
Remove-Variable -Name firstname -强制执行

常见变量数据类型:int32, int64, string, bool

#运算符 (Operators)

# 运算符语法结构:
# (a <运算符> b)

= , += / -= , ++ / --
-eq / -ne , -lt / -gt , -le / -ge

$FirstName = 'Trevor'
$FirstName -like 'T*'
$true; $false # 布尔值 true/false

# 三元运算符 (Ternary Operator)
$FoodToEat = $BaconIsYummy ? 'bacon' : 'beets'

# -notin 或 -in 包含判断
'Celery' -in @('Bacon', 'Sausage', 'Steak')

# 输出: True
5 -is [int32]

# 正则表达式匹配 (支持数组)
'Trevor' -match '^T\w*'

# 正则多重匹配
$regex = [regex]'(\w*)'
$regex.Matches('this is test').Value

#代码结构 (Structure)

输入 / 输出操作 (I/O)

"直接打印字符串"

Write-Host "带颜色的彩色文本" -ForegroundColor Red

$age = Read-host "请输入年龄"

$pwd = Read-host "请输入密码" -asSecureString

Clear-Host

控制流语句 (Flow Controls)

IF(<#条件#>){
<#要执行的命令#>}ELSEIF(){}ELSE{}

Switch($var){
	"val1"{<#命令#>; break}
    "val2"{<#命令#>; break}
}

For($ct=0;$ct -le 3;$ct++){}

ForEach($var in $arr){}

while($var -ne 0){}

Do{}While()

#函数与模块 (Function / Modules)

示例 1

function funcname{

    [CmdletBinding()]
	param(
		[Parameter(Mandatory)]
		[String]$user
	)
	Write-Host "welcome " $user
    return "value"
}
$var = funcname -user pcb

示例 2

function Get-EvenNumbers {
    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline = $true)]
        [int] $Number
    )
    begin {<#初始化动作#>}
    process {
        if ($Number % 2 -eq 0) {
            Write-Output $Number
        }
    }
    end {<#收尾动作#>}
}
1..10 | Get-EvenNumbers

模块管理 (Modules)

# 查看 PowerShell 查找模块的路径环境变量
$env:PSModulePath

# 列出系统上已安装的所有模块
Get-Module -ListAvailable
# 查看当前会话中已导入的模块
Get-Module

Import-Module <moduleName>
Remove-Module <moduleName>

Find-Module -Tag cloud
Find-Module -Name ps*

# 在内存中创建临时的 PowerShell 模块
New-Module -Name trevor -ScriptBlock {
  function Add($a,$b) { $a + $b } }

#实用技巧小贴士

  • 在大多数编程语言中,转义字符为反斜杠 \,而在 PowerShell 中转义字符为反引号 `

#🔗 参考资源