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)
Group.Read.All
Tasks.Read.All
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
Comments