[ PROMPT_NODE_25150 ]
powershell-windows
[ SKILL_DOCUMENTATION ]
# 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. 空值检查模式
### 访问前务必检查
| ❌ 错误 | ✅ 正确 |
|----------|-----------|
| `$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 块内返回
- 使用 finally 进行清理
- 在 try/catch 之后返回
---
## 6. 文件路径
### Windows 路径规则
| 模式 | 用途 |
|---------|-----|
| 字面路径 | `C:UsersUserfile.txt` |
| 变量路径 | `Join-Path $env:USERPROFILE "file.txt"` |
| 相对路径 | `Join-Path $ScriptDir "data"` |
**规则:** 使用 Join-Path 以确保跨平台安全。
---
## 7. 数组操作
### 正确模式
| 操作 | 语法 |
|-----------|--------|
| 空数组 | `$array = @()` |
| 添加项 | `$array += $item` |
| ArrayList 添加 | `$list.Add($item) | Out-Null` |
---
## 8. JSON 操作
### 关键:深度参数
| ❌ 错误 | ✅ 正确 |
|----------|-----------|
| `ConvertTo-Json` | `ConvertTo-Json -Depth 10` |
**规则:** 处理嵌套对象时务必指定 `-Depth`。
### 文件操作
| 操作 | 模式 |
|-----------|---------|
| 读取 | `Get-Content "file.json" -Raw | ConvertFrom-Json` |
| 写入 | `$data | ConvertTo-Json -Depth 10 | Out-File "file.json" -Encoding UTF8`