misaka-mikoto-tech/agent-skills/powershell-safe-invocation
Claude Code and agent skill by misaka-mikoto-tech/agent-skills
- community
Checking that the SKILL.md file is still in the repository.
Use when writing or running PowerShell on Windows, especially native programs, quoted paths, escaping, pwsh, Start-Process, file operations, or shell troubleshooting.
Install
npx vskill@latest install misaka-mikoto-tech/agent-skills/powershell-safe-invocationSKILL.md
PowerShell Safe Invocation
Shell
Use PowerShell 7 through pwsh.exe unless Windows PowerShell 5.1 is explicitly required.
When the active shell is uncertain, verify:
Do not assume installing PowerShell 7 makes powershell.exe use PowerShell 7:
pwsh.exe= PowerShell 7powershell.exe= Windows PowerShell 5.1
Native Programs
Never construct one large command string when arguments can be passed separately.
Use:
Rules:
- Treat every native argument as one array item.
- Invoke executable paths stored in variables with
&. - Capture
$LASTEXITCODEimmediately. - Avoid using
$argsas your own argument array name; it is a PowerShell automatic variable. Use names like$argListor$nativeArgs. - Do not use
Invoke-Expression. - Do not add a
cmd.exe /clayer merely to launch an executable. - Do not use Bash-style
\"escaping in PowerShell.
Cmdlets
Use hashtable splatting for PowerShell cmdlets:
Use -LiteralPath for concrete paths when the cmdlet supports it. For cmdlets that expose only -Path, such as New-Item, use -Path; when unsure, check Get-Command <cmdlet> -Syntax.
Do not use $LASTEXITCODE to test a PowerShell cmdlet. Use terminating errors:
Wrap expressions passed as parameter values in parentheses or assign them first: use Select-Object -Index (100..120), not -Index 100..120.
Do not pipe directly from statement syntax such as foreach (...) { ... } | ...; assign the statement output first or use the pipeline cmdlet ForEach-Object.
Complex Commands
Avoid deeply quoted commands such as:
For multiline code, nested quotes, JSON, XML, regular expressions, pipelines, redirection, or non-ASCII paths:
- Write a temporary
.ps1file. - Execute it with:
Prefer -File over -Command for anything beyond a short, simple expression.
Do not add -ExecutionPolicy Bypass unless execution policy is actually blocking a trusted script.
When you must pass a script through -Command from an outer PowerShell process, remember that the outer shell expands $variables first. Use an outer single-quoted script string when the inner script contains $p, $env:..., $PSVersionTable, or similar:
If the command has to cross multiple interpreters or wrappers, stop and write a .ps1 file instead of stacking more quoting.
Strings And Multiline Code
- Use single quotes for literal strings and paths.
- Use double quotes only when PowerShell expansion is needed.
- Avoid backtick line continuation; use arrays, hashtables, splatting, parentheses, or script blocks.
- Do not use Bash heredocs such as
python - <<'PY'; PowerShell parses<differently. Use a temporary script file or a PowerShell here-string piped to the program. - For JSON, create objects and use
ConvertTo-Json; do not hand-escape JSON. - Use single-quoted here-strings for literal multiline text: put no characters after opening
@', and close with'@alone at the start of a line.
Encoding
PowerShell 7 defaults to UTF-8 without BOM for text output; Windows PowerShell 5.1 defaults vary by cmdlet.
- For a new text file consumed by another tool, specify its required encoding explicitly (usually
utf8). - Before changing an existing text file, identify and preserve its existing encoding. Do not silently convert GBK, UTF-16, or BOM-sensitive files; if the encoding is unclear, inspect or ask.
- Do not set
Console.InputEncodingorConsole.OutputEncodingby default. Set them only for a confirmed terminal or native-program encoding mismatch;$OutputEncodinginstead controls PowerShell text sent to native programs. - Do not apply text encoding options to binary files. Use byte APIs for binary data.
Start-Process
For normal foreground execution, use:
Use Start-Process only for elevation, new/hidden windows, detached launch, or shell behavior.
Start-Process -ArgumentList joins values into a command-line string and is not a reliable structured-argument API. Prefer ProcessStartInfo.ArgumentList when exact argument boundaries matter.
When a separate process is required and arguments are complex, use:
File Operations
Before recursive delete, move, or overwrite:
- Resolve the absolute root and target paths.
- Verify the target is inside the intended root.
- Reject empty, root-level, or unexpected paths.
- Keep filesystem mutations in PowerShell instead of passing paths to another shell.
Mapped drives are per user/session. If Test-Path X:\... fails under an automation or sandbox account but works interactively, check the current identity with whoami and inspect Get-PSDrive. If the mapping is not visible, ask the user for the UNC path, establish the mapping for the same account, or switch the task to a current-user/full-access execution mode when the platform supports it.
Version And Module Differences
PowerShell 5.1 and PowerShell 7 can expose the same command with different parameters or command types. Verify syntax in the active shell before relying on version-specific parameters:
For example, Format-Hex -Count is available in PowerShell 7 but not in Windows PowerShell 5.1. In 5.1, use pipeline limiting instead:
If command discovery behaves strangely, inspect $env:PSModulePath and Get-Module -ListAvailable <ModuleName> before assuming the cmdlet is missing.
Decision Order
Choose the simplest safe option:
- PowerShell cmdlet.
& $exe @argList.- Temporary
.ps1file withpwsh.exe -File. ProcessStartInfo.ArgumentList.Start-Processwhen its special behavior is required.cmd.exe /conly when cmd semantics are required.Invoke-Expressiononly as a tightly controlled last resort.
For uncommon cases and complete examples, read reference.md.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/powershell-safe-invocation/SKILL.md
Popularity
- Repository stars
- 273
- Repository forks
- 11
- 7-day trend score
- 28
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/misaka-mikoto-tech/agent-skills/powershell-safe-invocation)