Add scripts/install.ps1 — PowerShell port of install.sh

Native cmdlet equivalent of install.sh: same behavior (copy each
skills/<name>/ into ~\.claude\skills\<name>\, skip if SKILL.md is
missing, support $env:CLAUDE_SKILLS_DIR override and -Names filter).

Removes bash dependency on Windows — no need to invoke git-bash from
pwsh, mirrors the existing build.sh / build.ps1 pair.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-06 11:48:04 +03:00
parent 81af7825b6
commit ef14594a9f

46
scripts/install.ps1 Normal file
View File

@@ -0,0 +1,46 @@
# Install skills/<name>/ into ~\.claude\skills\<name>\ (or $env:CLAUDE_SKILLS_DIR)
# Usage: install.ps1 [-Names <name1>,<name2>] (no args = all)
#
# PowerShell port of install.sh — same behavior, native cmdlets, no bash dependency.
[CmdletBinding()]
param(
[string[]]$Names = @()
)
$ErrorActionPreference = 'Stop'
$root = Split-Path -Parent $PSScriptRoot
$src = Join-Path $root 'skills'
if ($env:CLAUDE_SKILLS_DIR) {
$target = $env:CLAUDE_SKILLS_DIR
} else {
$target = Join-Path $env:USERPROFILE '.claude\skills'
}
if (-not (Test-Path $target)) {
New-Item -ItemType Directory -Force -Path $target | Out-Null
}
if ($Names.Count -eq 0) {
$Names = Get-ChildItem -Path $src -Directory | Sort-Object Name | Select-Object -ExpandProperty Name
}
foreach ($name in $Names) {
$srcDir = Join-Path $src $name
$dstDir = Join-Path $target $name
if (-not (Test-Path $srcDir -PathType Container)) {
Write-Warning "skip: $name (not found in skills/)"
continue
}
if (-not (Test-Path (Join-Path $srcDir 'SKILL.md'))) {
Write-Warning "skip: $name (missing SKILL.md)"
continue
}
if (Test-Path $dstDir) {
Remove-Item -Recurse -Force $dstDir
}
Copy-Item -Recurse $srcDir $dstDir
Write-Host "installed: $name -> $dstDir"
}