powershell-windows

powershell-windows

热门

PowerShell Windows 开发范式与最佳实践。涵盖高频踩坑点、运算符语法细节以及错误处理机制。

4.4万Star
6509Fork
更新于 2026/7/31
SKILL.md
只读
名称
powershell-windows
描述

PowerShell Windows 开发范式与最佳实践。涵盖高频踩坑点、运算符语法细节以及错误处理机制。

PowerShell Windows 开发范式与实战模式

Windows PowerShell 的核心模式与关键避坑指南。


1. 运算符语法规则

致命踩坑点:必须使用括号

❌ 错误示范 ✅ 正确写法
if (Test-Path "a" -or Test-Path "b") if ((Test-Path "a") -or (Test-Path "b"))
if (Get-Item $x -and $y -eq 5) if ((Get-Item $x) -and ($y -eq 5))

硬性规则: 使用逻辑运算符时,每一个 cmdlet 调用都必须用括号括起来。


2. Unicode / Emoji 字符限制

致命踩坑点:脚本内严禁包含 Unicode 字符

用途 ❌ 严禁使用 ✅ 推荐使用
成功提示 ✅ ✓ [OK] [+]
报错提示 ❌ ✗ 🔴 [!] [X]
警告提示 ⚠️ 🟡 [*] [WARN]
信息提示 ℹ️ 🔵 [i] [INFO]
进度提示 [...]

硬性规则: PowerShell 脚本中仅允许使用纯 ASCII 字符。


3. 空值检查模式 (Null Check)

属性访问前务必先校验判空

❌ 错误示范 ✅ 正确写法
$array.Count -gt 0 $array -and $array.Count -gt 0
$text.Length if ($text) { $text.Length }

4. 字符串插值

复杂表达式的处理

❌ 错误示范 ✅ 正确写法
"Value: $($obj.prop.sub)" 先存入临时变量再引用

推荐写法:

$value = $obj.prop.sub
Write-Output "Value: $value"

5. 错误处理

ErrorActionPreference 参数设置

属性值 适用场景
Stop 开发阶段(快速失败,暴露问题)
Continue 生产环境脚本
SilentlyContinue 预期会出现非致命错误时

Try/Catch 异常捕获模式

  • 切勿在 try 块内部直接使用 return 退出
  • 使用 finally 块进行资源清理
  • 在 try/catch 块之后再执行 return

6. 文件路径处理

Windows 路径规范

路径类型 语法格式
字面量绝对路径 C:\Users\User\file.txt
环境变量路径 Join-Path $env:USERPROFILE "file.txt"
相对路径 Join-Path $ScriptDir "data"

硬性规则: 务必使用 Join-Path 拼接路径,以确保跨平台兼容安全性。


7. 数组操作

标准用法

操作 语法
创建空数组 $array = @()
追加元素 $array += $item
ArrayList 添加元素 `$list.Add($item)

8. JSON 操作

致命踩坑点:Depth 参数

❌ 错误示范 ✅ 正确写法
ConvertTo-Json ConvertTo-Json -Depth 10

硬性规则: 转换嵌套对象时,必须显式指定 -Depth 层级参数。

文件读写操作

操作 代码模式
读取 `Get-Content "file.json" -Raw
写入 `$data

9. 常见报错与排查

报错信息 诱发原因 解决方案
"parameter 'or'" 漏写括号 使用 () 将 cmdlet 包裹起来
"Unexpected token" 脚本存在 Unicode 字符 全面替换为纯 ASCII 字符
"Cannot find property" 对象为 Null 操作前先进行判空校验
"Cannot convert" 类型不匹配 调用 .ToString() 进行显式转换

10. 标准脚本模板

# 严格模式
Set-StrictMode -Version Latest
$ErrorActionPreference = "Continue"

# 脚本路径获取
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path

# 主逻辑入口
try {
    # 业务逻辑代码放置处
    Write-Output "[OK] Done"
    exit 0
}
catch {
    Write-Warning "Error: $_"
    exit 1
}

避坑提醒: PowerShell 的语法规则非常硬核,必须加括号、全纯 ASCII 字符以及对象判空都是不可逾越的底线。

适用场景

当需要执行概述中所述的流程或具体操作时,使用本 Skill。

使用限制

  • 仅当任务明确符合上述定义的适用范围时,才可使用本 Skill。
  • 不得将输出结果直接替代针对特定环境的校验、实际测试或专家评审。
  • 若缺少必要的输入参数、权限、安全边界或验收标准,应立即停止操作并寻求进一步明确。