Skip to content

Instantly share code, notes, and snippets.

@guibranco
Last active August 2, 2023 16:36
Show Gist options
  • Save guibranco/66ca65aa88dacaf4b3a8c0dd8802720a to your computer and use it in GitHub Desktop.
Save guibranco/66ca65aa88dacaf4b3a8c0dd8802720a to your computer and use it in GitHub Desktop.
Clone all repositories from an organization in Azure DevOps
$organization = "AZURE_DEVOPS_ORGANIZATION"
$personalAccessToken = "AZURE_DEVOPS_PAT"
$base64AuthInfo = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($personalAccessToken)"))
$headers = @{Authorization=("Basic {0}" -f $base64AuthInfo)}
Write-Host "Cloning all repositories from organization: " $organization
$projectsUrl = "https://dev.azure.com/" + [uri]::EscapeDataString($organization) + "/_apis/projects?api-version=7.0"
$result = Invoke-RestMethod -Uri $projectsUrl -Method Get -Headers $headers
$result.value.name | ForEach-Object {
$project = $_;
Write-Host "Cloning all repositories from project: " $project
$projectUrl = "https://dev.azure.com/" + [uri]::EscapeDataString($organization) + "/" + [uri]::EscapeDataString($project) + "/_apis/git/repositories?api-version=7cls.0"
$result = Invoke-RestMethod -Uri $projectUrl -Method Get -Headers $headers
$result.value.name | ForEach-Object {
$repository = $_;
Write-Host "Cloning repository: " $repository
git clone ("https://" + [uri]::EscapeDataString($organization) + "@dev.azure.com/" + [uri]::EscapeDataString($organization) + "/" + [uri]::EscapeDataString($project) + "/_git/" + [uri]::EscapeDataString($repository)) repositories/$project/$repository
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment