Planner.psm1
#requires -Module AzureAD # module-scoped variables $AadRedirectUri = "urn:ietf:wg:oauth:2.0:oob" $GraphUri = "https://graph.microsoft.com" $MSAuthority = "https://login.microsoftonline.com" $AadModule = Get-Module AzureAD -ListAvailable $Adal = Join-Path $AadModule.ModuleBase "Microsoft.IdentityModel.Clients.ActiveDirectory.dll" $Adalforms = Join-Path $AadModule.ModuleBase "Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll" Add-Type -Path $Adal Add-Type -Path $AdalForms Function Connect-Planner { <# .SYNOPSIS Connect to Microsoft Planner via the Graph API .DESCRIPTION Connect to Microsoft Planner via the Graph API. Requires that an application be registered in Azure Active Directory and that you know that application's ID. For more information about registering an application, run Get-Help about_Planner_Register. .EXAMPLE $Credential = Get-Credential $ClientId = 'f338765e-1cg71-427c-a14a-f3d542442dd' $AuthToken = Connect-Planner -Credential $Credential -ClientId $ClientId .EXAMPLE $ClientId = 'f338765e-1cg71-427c-a14a-f3d542442dd' $AuthToken = Connect-Planner -ClientId $ClientId -TenantName domain.onmicrosoft.com .LINK https://github.com/microsoftgraph/powershell-intune-samples/blob/master/Authentication/Auth_From_File.ps1 http://www.powershell.no/azure,graph,api/2017/10/30/unattended-ms-graph-api-authentication.html #> [cmdletbinding(DefaultParameterSetName = "ADAL")] param ( [Parameter(Mandatory = $true, ParameterSetName = 'PSCredential')] [PSCredential] $Credential, [Parameter(Mandatory = $true)] [String]$ClientId, [Parameter(Mandatory = $true, ParameterSetName = 'ADAL')] [String]$TenantName ) try { switch ($PsCmdlet.ParameterSetName) { 'ADAL' { $Authority = "{0}/{1}" -f $MSAuthority, $TenantName $AuthContext = [Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext]::new($Authority) $PlatformParameters = [Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters]::new("Always") $AuthResult = ($AuthContext.AcquireTokenAsync($GraphUri, $ClientID, $AadRedirectUri, $PlatformParameters)).Result } 'PSCredential' { $userUpn = New-Object "System.Net.Mail.MailAddress" -ArgumentList $Credential.Username $TenantName = $userUpn.Host $Authority = "{0}/{1}" -f $MSAuthority, $TenantName $AuthContext = [Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext]::new($Authority) $PlatformParameters = [Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters]::new("Auto") $UserCredentials = [Microsoft.IdentityModel.Clients.ActiveDirectory.UserPasswordCredential]::new($Credential.Username, $Credential.Password) $AuthResult = [Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContextIntegratedAuthExtensions]::AcquireTokenAsync($AuthContext, $GraphUri, $ClientId, $UserCredentials) if ($AuthResult.Exception) { throw "An error occured getting access token: $($AuthResult.Exception.InnerException)" } } } $Script:AuthHeader = @{ 'Content-Type' = 'application/json' 'Authorization' = "Bearer " + $AuthResult.Result.AccessToken 'ExpiresOn' = $AuthResult.Result.ExpiresOn } } catch { $PsCmdlet.ThrowTerminatingError($_) } } function Get-PlannerPlan { <# .SYNOPSIS Get one or more plans .DESCRIPTION Get one or more plans using a plan ID or an Office 365 group. .PARAMETER Identity The ID of the plan .PARAMETER Group An Office 365 to retrieve Plans for. .EXAMPLE Get-Plan -Identity 8VtbYBiNt0WbPS3MALYirnUADQDX .EXAMPLE Get-PlannerGroup | Get-Plan .NOTES General notes #> [CmdletBinding(DefaultParameterSetName = "Id")] param ( [Parameter(Mandatory, ParameterSetName = "Id")] $Identity, [Parameter(Mandatory, ParameterSetName = "Group", ValueFromPipeline)] $Group ) process { switch ($PSCmdlet.ParameterSetName) { "Id" { $GroupId = $Group.Id $Uri = "{0}/{1}" -f $GraphUri, "v1.0/planner/plans/$Identity" irm -uri $Uri -Headers $AuthHeader } "Group" { $GroupId = $Group.Id $Uri = "{0}/{1}" -f $GraphUri, "v1.0/groups/$GroupID/planner/plans" irm -uri $Uri -Headers $AuthHeader | Select -ExpandProperty Value } } } } function Get-PlannerTask { [CmdletBinding()] param ( [Parameter(Mandatory, ValueFromPipelineByPropertyName)] [Alias("Id")] $Identity ) process { $Uri = "{0}/{1}" -f $GraphUri, "v1.0/planner/plans/$Identity/tasks" irm -uri $Uri -Headers $AuthHeader | Select-Object -ExpandProperty Value } } function Get-PlannerBucket { [CmdletBinding()] param ( [Parameter(Mandatory, ValueFromPipelineByPropertyName)] [Alias("Id")] $Identity ) process { $Uri = "{0}/{1}" -f $GraphUri, "v1.0/planner/plans/$Identity/buckets" irm -uri $Uri -Headers $AuthHeader | Select-Object -ExpandProperty Value } } function Invoke-PlannerRestMethod { [CmdletBinding()] param ( $Endpoint, $Body ) } function Get-PlannerGroup { [CmdletBinding()] param ( [string] $Name ) $Uri = "{0}/{1}" -f $GraphUri, "v1.0/groups" $Groups = irm -Uri $Uri -Headers $AuthHeader | Select -ExpandProperty Value | Where-Object groupTypes -Contains "Unified" if ($Name) {$Groups | Where-Object displayName -Like $Name} else {$Groups} } |