조직의 Planner 테넌트를 이동할 수 있습니다.

조직의 Planner 테넌시를 새 영역으로 이동하도록 지원 요청을 한 테넌트 관리자라면 먼저 PowerShell을 사용하여 이동을 승인해야 합니다.

  • Windows PowerShell에서 Planner를 변경하기 위한 사전 요구 사항입니다.
  • PowerShell를 사용하여 Planner 테넌트 이동을 승인합니다.

참고

Planner 테넌시를 새 영역으로 이동하면 기존의 Planner 데이터가 손실됩니다.

Windows PowerShell에서 Planner 변경의 필수 구성 요소

이 절차는 PowerShell에서 Planner 관리 명령을 실행하는 데 필요한 파일을 다운로드하는 과정을 안내합니다.

  • 2개의 Active Directory DLL
  • 하나의 PowerShell 스크립트
  • 스크립트의 매니페스트

Windows PowerShell을 처음 사용한다면 Windows PowerShell 시작을 참조하세요.

  1. https://www.nuget.org/packages/Microsoft.IdentityModel.Clients.ActiveDirectory/3.19.8(으)로 이동합니다.
  2. 오른쪽에서 수동 다운로드를 선택하고 다른 이름으로 저장을 선택한 다음 저장 위치를 선택하고 저장을 선택합니다.
  3. 파일 탐색기에서 파일을 찾아 파일 확장명을 .nupkg에서 .zip으로 변경합니다.
  4. 파일을 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 일반 탭에서 차단 해제 확인란이 보이면 선택하고 확인을 선택합니다.
  5. .zip 파일을 마우스 오른쪽 단추로 클릭하고 모두 추출을 선택합니다. 추출을 선택합니다. "microsoft.identitymodel.clients.activedirectory.3.19.8"이라는 압축이 풀린 폴더가 생성됩니다.
  6. 텍스트 편집기로 다음 코드를 복사하고 "microsoft.identitymodel.clients.activedirectory.3.19.8\lib\net45" 폴더에 SetPlannerTenantSettings.psm1로 저장합니다.
function Connect-AAD ()
{
<#
.Synopsis
(Private to module) Attempts to obtain a token from AAD.
.Description
This function attempts to obtain a token from Azure Active Directory.
.example
$authorizationContext = Connect-AAD
#>
    $authUrl = "https://login.microsoftonline.com/common" # Prod environment
    $resource = "https://tasks.office.com" # Prod environment
    $clientId = "d3590ed6-52b3-4102-aeff-aad2292ab01c"
   
    $redirectUri = "urn:ietf:wg:oauth:2.0:oob"
    $platformParameters = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters" -ArgumentList "Always"    

    $authentiationContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authUrl, $False

    $authenticationResult = $authentiationContext.AcquireTokenAsync($resource, $clientId, $redirectUri, $platformParameters).Result
    return $authenticationResult
}

function Set-PlannerConfiguration
{
<#
.Synopsis
Configures tenant level settings for Microsoft Planner.
.Description
This cmdlet allows tenant administrators to change policies regarding availability of certain features in Microsoft Planner. The changes to settings take effect immediately. This cmdlet specifies the administrator preference on whether the feature should be available. The features can still be disabled due to Microsoft Planner behavior, at the discretion of Microsoft.
.Parameter Uri
The URL of the Tenant-Level Settings API for the Planner instance to control.
.Parameter AccessToken
A valid access token of a user with tenant-level administrator privileges.
.Parameter AllowCalendarSharing
If set to $false, disables creating iCalendar links from Microsoft Planner, and disables previously created iCalendar links.  If set to $true, enables creating iCalendar links from Microsoft Planner and re-enables any previously created iCalendar links.
.Parameter AllowTenantMoveWithDataLoss
If set to $true, allows the tenant to be moved to another Planner environment or region. This move will result in the tenant's existing Planner data being lost.
.example

Set-PlannerConfiguration -AllowCalendarSharing $true

.example

Set-PlannerConfiguration -AllowTenantMoveWithDataLoss $true
#>
    param(
        [ValidateNotNull()]
        [System.String]$Uri="https://tasks.office.com/taskAPI/tenantAdminSettings/Settings",

        [ValidateNotNullOrEmpty()]
        [Parameter(Mandatory=$false)][System.String]$AccessToken,
        [Parameter(Mandatory=$false, ValueFromPipeline=$true)][System.Boolean]$AllowCalendarSharing,
        [Parameter(Mandatory=$false, ValueFromPipeline=$true)][System.Boolean]$AllowTenantMoveWithDataLoss
        )
   
    if(!($PSBoundParameters.ContainsKey("AccessToken"))){
        $authorizationContext = Connect-AAD
        $AccessToken = $authorizationContext.AccessTokenType.ToString() + ' ' +$authorizationContext.AccessToken
    }
   
    $flags = @{}
   
     if($PSBoundParameters.ContainsKey("AllowCalendarSharing")){
        $flags.Add("allowCalendarSharing", $AllowCalendarSharing);
    }

    if($PSBoundParameters.ContainsKey("AllowTenantMoveWithDataLoss")){
        $flags.Add("allowTenantMoveWithDataLoss", $AllowTenantMoveWithDataLoss);
    }

    $propertyCount = $flags | Select-Object -ExpandProperty Count
    
    if($propertyCount -eq 0) {
        Throw "No properties were set."
    }
    
    $requestBody = $flags | ConvertTo-Json

    Invoke-RestMethod -ContentType "application/json;odata.metadata=full" -Headers @{"Accept"="application/json"; "Authorization"=$AccessToken; "Accept-Charset"="UTF-8"; "OData-Version"="4.0;NetFx"; "OData-MaxVersion"="4.0;NetFx"} -Method PATCH -Body $requestBody $Uri
}
function Get-PlannerConfiguration
{
<#
.Synopsis
Retrieves tenant level settings for Microsoft Planner.
.Description
This cmdlet allows users and tenant administrators to retrieve policy preferences set by the tenant administrator regarding availability of certain features in Microsoft Planner.  While a feature may be permitted by a tenant administrator's preference, features can still be disabled due to Microsoft Planner behavior, at the discretion of Microsoft.
.Parameter Uri
The URL of the Tenant-Level Settings API for the Planner instance to retrieve.
.Parameter AccessToken
A valid access token of a user with tenant-level administrator privileges.
.example
Get-PlannerConfiguration
#>
    param(
        [ValidateNotNull()]
        [System.String]$Uri="https://tasks.office.com/taskAPI/tenantAdminSettings/Settings",
        [Parameter(Mandatory=$false)]
        [ValidateNotNullOrEmpty()]
        [System.String]$AccessToken
        )
   
    if(!($PSBoundParameters.ContainsKey("AccessToken"))){
        $authorizationContext = Connect-AAD
        $accessToken = $authorizationContext.AccessTokenType.ToString() + ' ' +$authorizationContext.AccessToken
    }
   
    $response = Invoke-RestMethod -ContentType "application/json;odata.metadata=full" -Headers @{"Accept"="application/json"; "Authorization"=$AccessToken; "Accept-Charset"="UTF-8"; "OData-Version"="4.0;NetFx"; "OData-MaxVersion"="4.0;NetFx"} -Method GET $Uri
     $result = New-Object PSObject -Property @{
        "AllowCalendarSharing" = $response.allowCalendarSharing
        "AllowTenantMoveWithDataLoss" = $response.allowTenantMoveWithDataLoss
    }

    return $result
}

Export-ModuleMember -Function Get-PlannerConfiguration, Set-PlannerConfiguration
  1. 텍스트 편집기로 다음 코드를 복사하고 "microsoft.identitymodel.clients.activedirectory.3.19.8\lib\net45" 폴더에 SetPlannerTenantSettings.psd1로 저장합니다.
#
# Module manifest for module 'SetTenantSettings'
#
# Generated by: Microsoft Corporation
#
# Generated on: 12/17/2017
#

@{

# Script module or binary module file associated with this manifest.
RootModule = 'SetPlannerTenantSettings.psm1' 
# Version number of this module. 
ModuleVersion = '1.0' 
# Supported PSEditions # 
CompatiblePSEditions = @() 
# ID used to uniquely identify this module 
GUID = '6250c644-4898-480c-8e0b-bd3ebdf246ca' 
# Author of this module 
Author = 'Microsoft Corporation' 
# Company or vendor of this module 
CompanyName = 'Microsoft Corporation' 
# Copyright statement for this module 
Copyright = '(c) 2017 Microsoft Corporation. All rights reserved.' 
# Description of the functionality provided by this module 
Description = 'Planner Tenant Settings client' 
# Minimum version of the Windows PowerShell engine required by this module #
PowerShellVersion = '' 
# Name of the Windows PowerShell host required by this module # 
PowerShellHostName = '' 
# Minimum version of the Windows PowerShell host required by this module #
PowerShellHostVersion = '' 
# Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only. #
DotNetFrameworkVersion = '' 
# Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only. # 
CLRVersion = '' 
# Processor architecture (None, X86, Amd64) required by this module #
ProcessorArchitecture = '' 
# Modules that must be imported into the global environment prior to importing this module # 
RequiredModules = @() 
# Assemblies that must be loaded prior to importing this module 
RequiredAssemblies = @("Microsoft.IdentityModel.Clients.ActiveDirectory.dll","Microsoft.IdentityModel.Clients.ActiveDirectory.Platform.dll") 
# Script files (.ps1) that are run in the caller's environment prior to importing this module. # 
ScriptsToProcess = @() 
# Type files (.ps1xml) to be loaded when importing this module # 
TypesToProcess = @() 
# Format files (.ps1xml) to be loaded when importing this module # 
FormatsToProcess = @() 
# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess # 
NestedModules = @() 
# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export. 
FunctionsToExport = @("Get-PlannerConfiguration", "Set-PlannerConfiguration") 
# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export. 
CmdletsToExport = @() 
# Variables to export from this module 
VariablesToExport = '*' 
# Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export. 
AliasesToExport = @() 
# DSC resources to export from this module # 
DscResourcesToExport = @() 
# List of all modules packaged with this module # 
ModuleList = @() 
# List of all files packaged with this module # 
FileList = @("SetTenantSettings.psm1") 
# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell. 
PrivateData = @{ PSData = @{ 
# Tags applied to this module. These help with module discovery in online galleries. # 
Tags = @() 
# A URL to the license for this module. # 
LicenseUri = '' 
# A URL to the main website for this project. # 
ProjectUri = '' 
# A URL to an icon representing this module. # 
IconUri = '' 
# ReleaseNotes of this module # 
ReleaseNotes = '' } 
# End of PSData hashtable 
} 
# End of PrivateData hashtable 
# HelpInfo URI of this module # 
HelpInfoURI = '' 
# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix. # 
DefaultCommandPrefix = '' }
  1. 이 명령을 실행하여 파일을 PowerShell로 가져오고 컴퓨터에서 고유한 파일 경로를 추가합니다.
Import-Module [File path on your computer]microsoft.identitymodel.clients.activedirectory.3.19.8\lib\net45\SetPlannerTenantSettings.psd1 

이제 PowerShell을 사용하여 조직 수준에서 Planner를 변경할 준비가 되었습니다.

PowerShell을 사용하여 테넌트 이동을 승인합니다.

  1. PowerShell을 열고 다음 명령을 실행하여 테넌트를 이동할 수 있도록 인증합니다.

    Set-PlannerConfiguration -AllowTenantMoveWithDataLoss $true

    생각이 바뀌어서 테넌트가 이동되지 않도록 하려면 다음 명령을 실행합니다. Planner 팀이 테넌트 이동을 시작하면 최종 이동이 이루어집니다.

    Set-PlannerConfiguration -AllowTenantMoveWithDataLoss $false

    참고

    Azure Active Directory 자격 증명을 사용하여 로그인하고 로컬 PowerShell 창(Azure Cloud Shell이 아님)을 사용해야 합니다.

  2. 설정을 확인하려면 다음과 같이 합니다.

    • PowerShell에서 Get-PlannerConfiguration을(를) 실행합니다.
    • 이 명령으로 반환된 LowTenantMoveWithDataLoss 값은 테넌트 이동이 현재 권한이 있는지 여부를 나타냅니다.