关于 powershell-windows
面向 Windows 脚本编写的 PowerShell 参考技能,聚焦语法规则与常见陷阱,涵盖运算符、空值检查、路径、JSON 和错误处理,并提供更稳妥的脚本模式。
主要功能
- 01运算符括号规则
- 02仅使用 ASCII 字符的建议
- 03空值安全访问模式
- 04字符串插值建议
- 05错误处理实践
- 06路径、数组和 JSON 模式
适用场景
- 01避免逻辑运算符解析错误
- 02安全处理可选值
- 03编写稳健的 JSON 文件操作
- 04选择脚本错误处理行为
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ davila7/ claude-code-templates --skill powershell-windows安装后在 Claude Code 中输入/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 检查模式
访问前始终检查
| ❌ 错误 | ✅ 正确 |
|---|---|
$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 对象 | 先检查 null |
| "Cannot convert" | 类型不匹配 | 使用 .ToString() |
10. 脚本模板
# Strict mode
Set-StrictMode -Version Latest
$ErrorActionPreference = "Continue"
# Paths
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
# Main
try {
# Logic here
Write-Output "[OK] Done"
exit 0
}
catch {
Write-Warning "Error: $_"
exit 1
}
记住: PowerShell 有独特的语法规则。括号、仅限 ASCII 以及 null 检查是不可妥协的。
评论
支持 Markdown