powershell-windows

PowerShell Windows patterns. Critical pitfalls, operator syntax, error handling.

View Source
name:powershell-windowsdescription:PowerShell Windows patterns. Critical pitfalls, operator syntax, error handling.allowed-tools:Read, Write, Edit, Glob, Grep, Bash

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. Unicode/Emoji Restriction

CRITICAL: No Unicode in Scripts

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

Rule: Use ASCII characters only in PowerShell scripts.


3. Null Check Patterns

Always Check Before Access

❌ Wrong✅ Correct
$array.Count -gt 0$array -and $array.Count -gt 0
$text.Lengthif ($text) { $text.Length }


4. String Interpolation

Complex Expressions

❌ Wrong✅ Correct
"Value: $($obj.prop.sub)"Store in variable first

Pattern:

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


5. Error Handling

ErrorActionPreference

ValueUse
StopDevelopment (fail fast)
ContinueProduction scripts
SilentlyContinueWhen errors expected

Try/Catch Pattern

  • Don't return inside try block

  • 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
    ReadGet-Content "file.json" -Raw
    Write`$data


    9. Common Errors

    Error MessageCauseFix
    "parameter 'or'"Missing parenthesesWrap cmdlets in ()
    "Unexpected token"Unicode characterUse ASCII only
    "Cannot find property"Null objectCheck null first
    "Cannot convert"Type mismatchUse .ToString()


    10. Script Template

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


    > Remember: PowerShell has unique syntax rules. Parentheses, ASCII-only, and null checks are non-negotiable.

      powershell-windows - Agent Skills