top of page
AutorenbildMicha

PowerShell - Teams Planner Task Report

Wenn eine Teams Gruppe mehrere Planner in unterschiedlichen Kanäle hat. Kann ein CSV Report schnell eine Übersicht verschaffen.

Ihr könnt die Daten an anderen Stellen weiterverarbeiten, oder einfach nur eine Auswertung für das nächste Joutfix


Vorrausetzungen

  • Admin Rechte zum Erstellen einer Azure Anwendung

  • Azure Anwendung

  • Group ID der Teams Gruppe


Azure Anwendung erstellen

Im Azure Portal unter

könnt Ihr Euch eine entsprechende Anwendung erstellen


erforderliche API Berechtigungen für Microsoft Graph (Anwendung)


erstellt Euch dann noch ein Key, den Ihr später in das PS Skript einfügt.


Group ID der jeweiligen Teams Gruppe ermitteln

Unter folgender Webseite

könnt Ihr nach dem gewünschten Team suchen, die ID steht im Attribut "Objekt-ID"


Skript anpassen und ausführen

# Variables

$TenatDomainName = "" # Tenant Name eingeben / onmicrosoft Domain des Tenants
$ApplicationID = "" # AppId der Azuer Anwendung
$AccessSecret = "" # Key, den Ihr vorab erstellt habt
$GrouoId = "" # Object-ID der Teams Gruppe
$csvfile = "$env:TEMP\Report-ClosedTasks.csv"
$results = @()
$URL = "https://graph.microsoft.com/v1.0/groups/$GroupId/planner/plans"

$Body = @{    
Grant_Type    = "client_credentials"
Scope         = "https://graph.microsoft.com/.default"
client_Id     = $ApplicationID
Client_Secret = $AccessSecret
} 

# Connect
$ConnectGraph = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenatDomainName/oauth2/v2.0/token" -Method POST -Body $Body
$token = $ConnectGraph.access_token

# Get All Plans
$Plans =  (Invoke-RestMethod -Headers @{Authorization = "Bearer $($token)"; "content-type" = "application/json"; "charset" = "utf-8"} -Uri $URL -Method Get).value

foreach($plan in $plans){
    $user = $null
    $completeDate = $null
    $PlanId = $plan.id
    $TaskURL = "https://graph.microsoft.com/v1.0/groups/3fc517c1-b656-4f5c-993d-fa8b8de8b238/planner/plans/$PlanId/Tasks"

    $Tasks =  (Invoke-RestMethod -Headers @{Authorization = "Bearer $($token)"; "content-type" = "application/json"; "charset" = "utf-8"} -Uri $TaskURL -Method Get).value

    foreach($task in $tasks){
        $user = $null
        $completeDate = $null

        if( $task.completedBy.user.id -ne $null){
            $UserId = $task.completedBy.user.id
            $UserURL = "https://graph.microsoft.com/v1.0/users/$UserId"
            $User = Invoke-RestMethod -Headers @{Authorization = "Bearer $($token)"; "content-type" = "application/json"; "charset" = "utf-8"} -Uri $UserURL -Method Get
        }else{
            $user = $null
        }
        if($task.completedDateTime -ne $null){
            $completeDate = get-date $task.completedDateTime -Format "dd.MM.yyyy"
        }else{
            $completeDate = $null
        }
        $obj = [PSCustomObject]@{
		    Plan = $plan.title
		    Task = $task.title
            ClosedBy = $User.displayName
            Date = $completeDate
	    }
        $results += $obj
    }
}

# Export Result to CSV
$results | export-csv -Path $csvfile -Delimiter ";" -Encoding UTF8 -NoTypeInformation

Die CSV Datei sieht in Excel dann ungefähr so aus


18 Ansichten0 Kommentare

Comentarios


bottom of page