AgentSkillsCN

powershell

为FieldWorks中使用的脚本(开发脚本与CI助手)提供PowerShell最佳实践。在scripts/或Build/Agent/目录下编写或修改PowerShell脚本时使用。

SKILL.md
--- frontmatter
name: powershell
description: >
  PowerShell best practices for scripts used in FieldWorks (dev scripts & CI helpers).
  Use when writing or modifying PowerShell scripts in scripts/ or Build/Agent/.
allowed-tools: "Read,Bash(pwsh:*)"
version: "1.0.0"

PowerShell Development Skill

Conventions and safety patterns for PowerShell scripts in scripts/ and CI.

Style and Linting

  • Use pwsh/PowerShell Core syntax where possible and Set-StrictMode -Version Latest.
  • Use Write-Host sparingly; prefer Write-Output and Write-Error for correct streams.
  • Use -ErrorAction Stop in helper functions when errors should abort execution.
  • No Unicode icons or emojis in output messages (e.g., , , , 🔧). Use plain ASCII text like [OK], [FAIL], [WARN], ERROR: instead. Unicode causes encoding issues in CI logs.

Security

  • Avoid embedding secrets in scripts; read from env vars and prefer platform secret stores.
  • Do not commit credential tokens in any scripts or docs.

Testing and Execution

  • Use pwsh -NoProfile -ExecutionPolicy Bypass -File in CI wrappers.
  • Add small smoke test steps to validate paths and required tools are present.

Auto-Approval Patterns

CRITICAL: Agent terminal security blocks complex commands. The following require manual approval:

  • Pipes (|)
  • Semicolons (;) or &&
  • Redirection (2>&1)

ALWAYS use scripts/Agent/ wrapper scripts for these operations. Do not attempt raw commands.

See terminal.instructions.md for the complete transformation table.

Examples

powershell
# Good: simple commands auto-approve
.\build.ps1
git status

# Good: use wrapper scripts (ALWAYS for git with pipes)
.\scripts\Agent\Git-Search.ps1 -Action show -Ref "release/9.3" -Path "file.h" -HeadLines 20
.\scripts\Agent\Git-Search.ps1 -Action log -HeadLines 20
.\scripts\Agent\Read-FileContent.ps1 -Path "file.cs" -HeadLines 50 -LineNumbers

# BAD: these require manual approval - NEVER USE
# git log --oneline | head -20
# Get-Content file.cs | Select-Object -First 50