mcpField
P
powershell-windows

powershell-windows

github.com/sickn33Development48.7k2.6k installsUpdated today
Repository

About powershell-windows

powershell-windows is a reference skill for writing and debugging Windows PowerShell and PowerShell 7 scripts. It collects practical patterns for operators, encoding, null checks, errors, paths, arrays, and JSON handling.

Key features

  1. 01Logical operator syntax patterns
  2. 02Encoding and portable log markers
  3. 03Null-safe access guidance
  4. 04Error handling and cleanup patterns
  5. 05Path, array, and JSON examples

Use cases

  1. 01Debugging PowerShell command expressions
  2. 02Choosing encoding for scripts and logs
  3. 03Handling paths and nested JSON in scripts

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill powershell-windows

After installing, type/powershell-windowsin Claude Code to confirm it loaded.

Details

From the project README

PowerShell Windows Patterns

Critical patterns and pitfalls for Windows PowerShell.


1. Operator Syntax Rules

CRITICAL: Parentheses Required
❌ Wrong✅ Correct
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))

Rule: Each cmdlet call MUST be in parentheses when using logical operators.


2. Encoding Compatibility

Prefer portable log markers
Purpose❌ Don't Use✅ Use
Success✅ ✓[OK] [+]
Error❌ ✗ 🔴[!] [X]
Warning⚠️ 🟡[*] [WARN]
Infoℹ️ 🔵[i] [INFO]
Progress⏳[...]

PowerShell supports Unicode. ASCII log markers are a portability choice, not a syntax requirement. For non-ASCII scripts read by Windows PowerShell 5.1, use UTF-8 with BOM; PowerShell 7 uses UTF-8 without BOM by default. Check the consuming tool before choosing file encoding.


3. Null Check Patterns

Always Check Before Access
❌ Wrong✅ Correct
$array.Count -gt 0($null -ne $array) -and (@($array).Count -gt 0)
$text.Lengthif ($null -ne $text) { $text.Length }

4. String Interpolation

Complex Expressions

"Value: $($obj.prop.sub)" is valid subexpression interpolation. Store a complex expression in a variable when that improves readability.

Pattern:

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

5. Error Handling

ErrorActionPreference
ValueUse
StopRequired cmdlet failures must enter catch
ContinueReport a non-terminating error and continue deliberately
SilentlyContinueWhen errors expected
Try/Catch Pattern
  • A return inside try is valid; finally still runs
  • Use finally for cleanup
  • Return after try/catch

6. File Paths

Windows Path Rules
PatternUse
Literal pathC:\Users\User\file.txt
Variable pathJoin-Path $env:USERPROFILE "file.txt"
RelativeJoin-Path $ScriptDir "data"

Rule: Use Join-Path for cross-platform safety.


7. Array Operations

Correct Patterns
OperationSyntax
Empty array$array = @()
Add item$array += $item
ArrayList add`$list.Add($item)

8. JSON Operations

CRITICAL: Depth Parameter
❌ Wrong✅ Correct
ConvertTo-JsonConvertTo-Json -Depth 10

Rule: Always specify -Depth for nested objects.

File Operations
OperationPattern
Read`Get-Content "file.json" -Raw
Write`$data

9. Common Errors

Error MessageCauseFix
"parameter 'or'"Missing parenthesesWrap cmdlets in ()
"Unexpected token"Parsing or quoting errorInspect the reported token and file encoding
"Cannot find property"Null objectCheck null first
"Cannot convert"Type mismatchValidate input and convert to the required type

10. Script Template

# 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
}

Remember: Check shell version, encoding, null semantics and native exit codes. try/catch alone does not reliably turn native command failures into exceptions.

References: encoding, quoting.

When to Use

Use when writing or debugging Windows PowerShell or PowerShell 7 scripts, especially command expressions, encoding, paths and error handling.

Limitations

  • Use this skill only when the task clearly matches the scope described above.
  • Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
  • Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.

Comments

Markdown supported