################START SCRIPT################ #rilevo time per log inizio analisi $startTime = (Get-Date).toString("yyyy/MM/dd HH:mm:ss") # avvio stopwatch $mainStopWatch = [system.diagnostics.stopwatch]::StartNew() #contatore ciclo do while $projectCount = 1 #numero massimo di progetti da analizzare $projectNumber = 150 #conteggio progetti trovati $existingProjects = 0 #conteggio progetti trovati $protectedProjects = 0 #livello di log: 0=log sintetico, 1=log errori, 2=log full, 3=log ampolloso $logLevel = 3 #output a terminale: 0=disattivo, 1=abilitato $terminalOutput = 1 #abilita o disabilita la cancellazione della protezione (1=cancella, 0=toca negot) $deleteProtection = 0 #specifica quale installazione di gitlab va controllata #$gitlabIstance = "https://gitlab-nembro" #$head = @{"PRIVATE-TOKEN"="glpat-TzZkRUoYAdKikgwFXW_E"} $gitlabIstance = "https://gitlab-azzano" $head = @{"PRIVATE-TOKEN"="glpat-gADkrEhkEsvQxGxKez4y"} #cartella file di log $GitLogFolder="c:\Steamware\Logs\Gitlab\" #nome file di log $logFile = Join-Path $GitLogFolder "GitlabProtectedBranches.log" #dichiaro funzione per scrittura output Function WriteLogOutput { Param ($logType, [string]$logString) if($logType -le $logLevel) { #scrivo su file la stringa Add-content $logFile -value "$logString" #scrivo su terminale la stringa se $terminalOutput=1 if($terminalOutput -eq 1){ Write-Output($logString) } } } #creazione folder di Log se non già esistente if (Test-Path $GitLogFolder) { } else { New-Item $GitLogFolder -ItemType Directory } #scrivo intestazione e inizio analisi WriteLogOutput 0 "--------------------" Switch ($logLevel) { 0 {WriteLogOutput 0 "LOG SINTETICO GITLAB PROTECTED_BRANCHES"} 1 {WriteLogOutput 0 "LOG ERRORI GITLAB PROTECTED_BRANCHES"} 2 {WriteLogOutput 0 "LOG FULL GITLAB PROTECTED_BRANCHES"} 3 {WriteLogOutput 0 "LOG AMPOLLOSO PROTECTED_BRANCHES"} } WriteLogOutput 0 "" WriteLogOutput 0 "Percorso log: $GitLogFolder" WriteLogOutput 0 "" WriteLogOutput 0 "Inizio Esecuzione Script: $startTime" #ciclo principale do/while che cicla da 1 a N projectNumber do { #chiamata api che restituisce informazioni sullo stato dei mirror $callUrl = $gitlabIstance + ".steamware.net/api/v4/projects/" + $projectCount + "/protected_branches" try { #parsing della risposta api convertita da json $Response = Invoke-WebRequest -URI $callUrl -Headers $head -ContentType "application/json" -UseBasicParsing $parsedResponse = $Response.Content | ConvertFrom-Json #scrivo il numero del progetto nel terminale e su file WriteLogOutput 1 "" WriteLogOutput 1 "--------------------" WriteLogOutput 1 "**PROGETTO $projectCount**" foreach($item in $parsedResponse) { WriteLogOutput 1 "Protected Branch Name: $($item.name) - Allow Force Push: $($item.allow_force_push)" $protectedProjects=$protectedProjects+1 if($deleteProtection -eq 1) { #nuovo URL x delete $callUrlDelete = $gitlabIstance + ".steamware.net/api/v4/projects/" + $projectCount + "/protected_branches/" + $item.name #chiamo method DELETE Invoke-WebRequest -Method Delete -URI $callUrlDelete -Headers $head -ContentType "application/json" -UseBasicParsing } } $existingProjects=$existingProjects+1 } #scrivo se trovo un errore (in particolare progetto ID non trovato) durante il try/catch catch { WriteLogOutput 3 "" WriteLogOutput 3 "--------------------" WriteLogOutput 3 "**ERRORE: PROGETTO $projectCount NON ESISTENTE**" } $projectCount=$projectCount+1 } #fine ciclo principale while($projectCount -le $projectNumber) # fermo stopwatch e calcolo durata script $mainStopWatch.Stop() $durataScript = $mainStopWatch.Elapsed.TotalSeconds #rilevo time per log fine analisi $endTime = (Get-Date).toString("yyyy/MM/dd HH:mm:ss") #scrivo a video le statistiche WriteLogOutput 0 "" WriteLogOutput 0 "PROGETTI ANALIZZATI: $existingProjects" WriteLogOutput 0 "" WriteLogOutput 0 "PROGETTI CON BRANCH PROTETTI: $protectedProjects" WriteLogOutput 0 "" WriteLogOutput 0 "Fine Esecuzione Script: $endTime" WriteLogOutput 0 "" WriteLogOutput 0 "Durata Esecuzione Script: $durataScript secondi" WriteLogOutput 0 ""