# Ввод параметров (интерактивно)
$BaseUrl = Read-Host "GitLab URL (например, https://git.zubovspace.com)"
$Token = Read-Host "Personal Access Token (PAT)"
$Project = Read-Host "Project ID или путь (например, zubovspace%2Fmyproj)"
# Показать лейблы (безопасно)
$labels = Invoke-RestMethod -Method Get -Uri "$BaseUrl/api/v4/projects/$Project/labels?per_page=100" -Headers @{ "PRIVATE-TOKEN" = $Token }
$labels.name | Sort-Object | ForEach-Object { Write-Host $_ }
$Label = Read-Host "Укажи ЛЕЙБЛ импортированных задач (например, jira-import)"
$dry = Read-Host "Сначала dry-run? (y/n)"
$Page = 1
$Total = 0
while ($true) {
$issues = Invoke-RestMethod -Method Get -Uri "$BaseUrl/api/v4/projects/$Project/issues?per_page=100&state=all&labels=$([uri]::EscapeDataString($Label))&page=$Page" -Headers @{ "PRIVATE-TOKEN" = $Token }
if (-not $issues -or $issues.Count -eq 0) { break }
foreach ($i in $issues) {
if ($dry -match '^[Yy]') {
Write-Host ("DRY-RUN: удалил бы #{0} `"{1}`"" -f $i.iid, $i.title)
} else {
Invoke-RestMethod -Method Delete -Uri "$BaseUrl/api/v4/projects/$Project/issues/$($i.iid)" -Headers @{ "PRIVATE-TOKEN" = $Token } | Out-Null
Write-Host ("Удалено: #{0} `"{1}`"" -f $i.iid, $i.title)
}
$Total++
}
$Page++
}
Write-Host ("Готово. Обработано задач: {0}" -f $Total)