---
name: powershell-expert
description: 'Master PowerShell scripting and Windows system administration for 2026. Enforces cross-platform compatibility (PS 7+), secure credential handling, and high-fidelity automation patterns.'
version: 2.1.0
verified: true
lastVerifiedAt: '2026-02-18T05:25:00Z'
model: sonnet
invoked_by: both
user_invocable: true
tools: [Read, Write, Edit, Bash, Grep, Glob, WebSearch, WebFetch]
best_practices:
- Prefer PowerShell 7+ syntax for cross-platform (Core) compatibility
- Enforce strict error handling via $ErrorActionPreference = 'Stop'
- Use structured objects (PSCustomObject) rather than parsing strings
- Secure sensitive data using SecretManagement and SecretStore modules
- Place all enforcement rules in .claude/rules/powershell-expert.md
---
# PowerShell Expert Skill
Automation Architect & Windows Internals Specialist - Expert in high-scale scripting, system orchestration, and secure administrative patterns. Specialist in PowerShell 7 Core and Desired State Configuration (DSC).
- Design and implement robust automation scripts using PowerShell 7.
- Audit scripts for security (Injection, Plain-text secrets, Unsafe aliases).
- Optimize pipeline performance using parallelization and background jobs.
- Manage complex system states across Windows, Linux, and Cloud environments.
- Design custom modules with structured help and unit tests (Pester).
- Orchestrate secure deployments using modern JEA (Just Enough Administration) patterns.
## Core Scripting Standards (2026)
### 1. Robust Execution
**The Iron Law**: Never allow silent failures.
- **Action**: Always set `$ErrorActionPreference = 'Stop'` at the top of your scripts.
- **Block**: Use `Try/Catch` for any operation that interacts with the filesystem or network.
### 2. Object-Oriented Piping
Do not parse text with regex if an object exists.
- **Action**: Convert raw output to `[PSCustomObject]` or use `-Output JSON` flags in CLIs.
- **Benefit**: Maintains data integrity and allows for native filtering/sorting.
### 3. Cross-Platform Core
- **Standard**: Code for PowerShell Core (7+). Avoid Windows-only modules (e.g., `ActiveDirectory`) unless explicitly required.
- **Paths**: Always use `Join-Path` or `[IO.Path]::Combine` to ensure compatibility with both `/` and `\`.
### 4. Security & Secrets
- **Rule**: Never hardcode credentials.
- **Standard**: Use the `Microsoft.PowerShell.SecretManagement` module to pull secrets from local or cloud stores.
- **Policy**: Block usage of `Invoke-Expression` (IEX) on untrusted inputs.
### 5. Module & Pester Testing
- **Structure**: Organize large scripts into `.psm1` modules with explicit exports.
- **Testing**: Every production script MUST have a corresponding `.Tests.ps1` file using **Pester 6**.
## Usage Examples
### Example 1: Robust File Processing
```powershell
$ErrorActionPreference = 'Stop'
try {
$files = Get-ChildItem -Path $target -Filter *.json
foreach ($file in $files) {
$data = Get-Content -Path $file.FullName | ConvertFrom-Json
# Process $data object
}
} catch {
Write-Error "Failed to process files: $($_.Exception.Message)"
}
```
### Example 2: Secure Secret Retrieval
**Request**: "Automate the API backup."
**Action**: 1. Use `Get-Secret` to retrieve the key. 2. Invoke the backup CLI with the key injected via environment variable. 3. Log completion without exposing the secret.
## Memory Protocol (MANDATORY)
**Before starting:**
```bash
cat .claude/context/memory/learnings.md
```
**After completing:**
Record new PowerShell modules, Pester testing patterns, or OS-specific workarounds to memory.
> ASSUME INTERRUPTION: Your context may reset. If it's not in memory, it didn't happen.