mcpField
P
powershell-windows

powershell-windows

github.com/sickn33开发48.7k2.6k 次安装今天更新
代码仓库

关于 powershell-windows

powershell-windows 是用于编写和调试 Windows PowerShell 与 PowerShell 7 脚本的参考技能,汇集运算符、编码、空值检查、错误处理、路径、数组和 JSON 操作模式。

主要功能

  1. 01逻辑运算符语法模式
  2. 02编码与可移植日志标记
  3. 03空值安全访问指导
  4. 04错误处理与清理模式
  5. 05路径、数组和 JSON 示例

适用场景

  1. 01调试 PowerShell 命令表达式
  2. 02为脚本和日志选择编码
  3. 03在脚本中处理路径与嵌套 JSON

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --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. 编码兼容性

优先使用可移植的日志标记
用途❌ 不要使用✅ 使用
成功✅ ✓[OK] [+]
错误❌ ✗ 🔴[!] [X]
警告⚠️ 🟡[*] [WARN]
信息ℹ️ 🔵[i] [INFO]
进度⏳[...]

PowerShell 支持 Unicode。使用 ASCII 日志标记是出于可移植性的考虑,并非语法要求。Windows PowerShell 5.1 读取的非 ASCII 脚本应使用带 BOM 的 UTF-8;PowerShell 7 默认使用不带 BOM 的 UTF-8。选择文件编码前,请检查使用该文件的工具。


3. Null 检查模式

访问前务必检查
❌ 错误✅ 正确
$array.Count -gt 0($null -ne $array) -and (@($array).Count -gt 0)
$text.Lengthif ($null -ne $text) { $text.Length }

4. 字符串插值

复杂表达式

"Value: $($obj.prop.sub)" 是有效的子表达式插值。如果将复杂表达式存入变量能提升可读性,就应这样做。

模式:

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

5. 错误处理

ErrorActionPreference
值用途
Stop必须让 cmdlet 故障进入 catch
Continue报告非终止错误,并有意继续执行
SilentlyContinue适用于预期会发生错误的情况
Try/Catch 模式
  • 在 try 中使用 return 是有效的;finally 仍会运行
  • 使用 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-JsonConvertTo-Json -Depth 10

规则: 对嵌套对象务必指定 -Depth。

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

9. 常见错误

错误消息原因修复方法
"parameter 'or'"缺少括号将 cmdlet 放入 () 中
"Unexpected token"解析或引号错误检查报告的令牌和文件编码
"Cannot find property"对象为 Null先检查 Null
"Cannot convert"类型不匹配验证输入,并转换为所需类型

10. 脚本模板

# Strict mode
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"

# Paths
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path

# Main
try {
    # Cmdlet logic here; check $LASTEXITCODE after native executables.
    Write-Output "[OK] Done"
    exit 0
}
catch {
    Write-Warning "Error: $_"
    exit 1
}

请记住: 检查 shell 版本、编码、Null 语义和原生命令退出代码。单靠 try/catch 无法可靠地将原生命令故障转换为异常。

参考:编码、引号规则。

适用场景

编写或调试 Windows PowerShell 或 PowerShell 7 脚本时使用,尤其适用于命令表达式、编码、路径和错误处理。

限制

  • 仅当任务明确符合上述范围时,才使用此技能。
  • 不要将输出视为特定环境验证、测试或专家评审的替代品。
  • 如果缺少必需的输入、权限、安全边界或成功标准,请停止并请求澄清。

评论

支持 Markdown