powershell-windows

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

By sickn33 · 2,540 installs

npx skills add sickn33/agentic-awesome-skills --skill powershell-windows

Source repository · Upstream listing

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.Length if ($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: 5. Error Handling ErrorActionPreference Value Use Stop Required cmdlet failures must enter catch Continue Report a non terminating error and continue deliberately SilentlyContinue When 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 Pattern Use Literal path C:\Users\User\file.txt Variable path Join Path $env:USERPROFILE "file.txt" Relative Join Path $ScriptDir "data" Rule: Use Join Path for cross platform safety. 7. Array Operations Correct Patterns Operation Syntax Empty array $array = @() Add item $array += $item ArrayList add $list.Add($item) Out Null 8. JSON Operations CRITICAL: Depth Parameter ❌ Wrong ✅ Correct ConvertTo Json ConvertTo Json Depth 10 Rule: Always specify Depth for nested objects. File Operations Operation Pattern Read Get Content "file.json" Raw ConvertFrom Json Write $data ConvertTo Json Depth 10 Out File "file.json" Encoding UTF8 9. Common Errors Error Message Cause Fix "parameter 'or'" Missing parentheses Wrap cmdlets in () "Unexpected token" Parsing or quoting error Inspect the reported token and file encoding "Cannot find property" Null object Check null first "Cannot convert" Type mismatch Validate input and convert to the required type 10. Script Template 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](https://learn.microsoft.com/en us/powershell/module/microsoft.powershell.core/about/about Character Encoding), [quoting](https://learn.microsoft.com/en us/powershell/module/microsoft.powershell.core/about/about quoting rules). 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.