0
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Microsoft Teams 新年度準備(高校での年度更新作業・授業準備)

Last updated at Posted at 2021-04-19

2020年度のコロナ対応でMicrosoft Teamsを用いて授業支援環境をつくってきましたが
新年度になるにあたって、年度更新作業が必要になったので、備忘録として記録に残します。
どなたかのお役に立てれば幸いです。

(2023年度に向けての作業で追記。 Premiumじゃないと使えない機能になったところなど)

#前提

  • 高校での設定例です。(勤務している学校は3学年・8クラス)
  • 「HRクラスごとにチームを作って、授業ごとにチャネルを作る」or「授業ごとにチームを作る」のいずれかになりますが、選択科目とかHRクラスをまたぐ授業クラスがあるので、「授業ごとにチームを作る」としています。
  • 教員・生徒ともにOffice365のアカウント(アドレス・パスワード)を持っています。(事前にアカウントを作成している)

Office365 のドメインは 仮に contoso.ed.jpとして記述しています。

教員アカウント → hogehoge@contoso.ed.jp ユーザ名は教員名をベースに付与
生徒アカウント → a000000@contoso.ed.jp ユーザ名は prefix + 学籍番号6桁

各授業科目には 6桁の科目コードを設定 
(例えば 社会と情報なら 100115)
HRクラス、選択授業講座には 3桁のグループコードを設定
(例えば 1年8組なら 108)

各チームは、検索しやすいように
MailNickName を a00_h2021_100115_108
DisplayName を 高21_社会と情報_1年8組
という風に頭に、年度やPrefixを設定しています。

###事前に作っておくデータ

  • チームを設定する授業
授業名(DisplayName) 授業コード(MailNickName)
高21_社会と情報_1年1組 a00_h2021_100115_101
高21_社会と情報_1年2組 a00_h2021_100115_102
  • 授業担当者(チームの所有者)
授業コード(MailNickName) 担当者(メールアドレス)
a00_h2021_100115_101 sensei1@contoso.ed.jp
a00_h2021_100115_102 sensei2@contoso.ed.jp
  • 授業の受講者(チームのメンバー)
授業コード(MailNickName) 生徒(メールアドレス)
a00_h2021_100115_101 a000001@contoso.ed.jp
a00_h2021_100115_101 a000002@contoso.ed.jp
a00_h2021_100115_101 a000003@contoso.ed.jp

上記のデータをExcel等で事前に準備。このリストからコマンドにする部分の説明は省略してます。

#作業のながれ

  • 新年度チーム作成(3月末ごろに準備はじめる)
  • 旧年度チームをアーカイブ(4月に入ったらすぐ)
  • 新入生のポリシー設定
  • 新年度チームへの所属(教員)
  • 新年度チームへの所属(生徒)

##事前準備
学校内の端末がWin8.1なので、PowershellのVersionを調べて、必要ならアップデート。

###PowerShellのVersionが5.1以上になっているか確認

> Get-Host | Select-Object Version

Version
-------
4.0


> Get-Host | Select-Object Version

Version
-------
5.1.14409.1005

###PowerShell の MicrosoftTeams モジュールをインストール
(TLS1.2でアクセスを強制する設定しないとだめだった…)
Install-Moduleだけで上手くいく場合は、最初の一行は不要

モジュールをインストール.ps1
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bOR [Net.SecurityProtocolType]::Tls12
Install-Module MicrosoftTeams

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
Import-Module MicrosoftTeams -Force

###(確認)現在あるチームをリストアップ

チームをリストアップ.ps1
Connect-MicrosoftTeams
Get-Team | Out-GridView  #画面に表示
Get-Team | Select * | Set-Clipboard #クリップボードにコピー
Get-Team | Where-Object {$_.MailNickName -match ".*108$"} #末尾が108=1年8組のチームだけ検索


##新年度チーム設定

「チームを設定する授業」 のデータから↓のコマンドをつくる。

チームを追加.ps1
New-Team -DisplayName "高21_社会と情報_1年1組" -MailNickName "a00_h2021_100115_101" -Template "EDU_Class" -Owner "sensei1@contoso.ed.jp" -AllowGiphy $true -GiphyContentRating "strict" -AllowStickersAndMemes $true -AllowCustomMemes $true -AllowGuestCreateUpdateChannels $false -AllowGuestDeleteChannels $false -AllowCreateUpdateChannels $false -AllowDeleteChannels $false -AllowAddRemoveApps $false -AllowCreateUpdateRemoveTabs $false -AllowCreateUpdateRemoveConnectors $false -AllowUserEditMessages $true -AllowUserDeleteMessages $true -AllowOwnerDeleteMessages $true -AllowTeamMentions $true -AllowChannelMentions $true -ShowInTeamsSearchAndSuggestions $true -RetainCreatedGroup

科目ごとに生徒が検索しやすいように、教科ごと科目毎に色分けしてアイコンを別途作成してある。
image.png

アイコン設定.ps1
Get-Team -MailNickName "a00_h2021_100115_101" | Set-TeamPicture -ImagePath ".\100115.png"

###できないこと(ほんとはしたいこと)
チームでの投稿や返信を生徒からさせたくない(勝手に掲示板状態にならないように)
だけど、
チームのモデレーション設定(GraphAPI?)
「一般」チャネルのモデレーションはPowerShellやGraphAPIでは設定不可(今回は全部手作業)
image.png


旧年度をリードオンリー

2020年度のチームをすべてArchiveする。(ReadOnlyになる)  
MailNickNameでフィルタして2020年度の

旧年度をアーカイブ.ps1
$teams = Get-Team
$teams | Where-Object { $_.MailNickName -like "a00_h2020_*" -and $_.Archived -eq $false } | Set-TeamArchivedState -Archived $true

上のコマンドで
SetSpoSiteReadOnlyForMembers $true がうまく効かないことがあったので
SharePointOnline モジュールで、個別にLockStateをReadOnlyに設定
(例 2020年度のサイトをすべてReadOnlyに設定変更)

SharePointをReadonly.ps1
Install-Module -Name Microsoft.Online.SharePoint.PowerShell

Connect-SPOService -Url https://contosoedjp-admin.sharepoint.com
#状態を調べる
Get-SPOSite -Limit ALL | Where-Object { $_.Url -like "*a00_h2020_*"} | Select Url,LockState 
#設定する
Get-SPOSite -Limit ALL | Where-Object { $_.Url -like "a00_h2020_*"} | Set-SPOSite -LockState "ReadOnly"

##生徒ポリシー一括設定(新入生)
あらかじめ ユーザは設定している。

テキストファイルには
a000001@contoso.ed.jp
a000002@contoso.ed.jp
a000003@contoso.ed.jp
と、ユーザ名(メールアドレス)を一覧にしている。

Teams管理画面で、ポリシーパッケージ「高校生」をカスタムで設定してある。
image.png
設定方法はここでは省略

ポリシー設定(旧).ps1
Conncet-MicrosoftTeams
$users | Grant-CsTeamsAppPermissionPolicy -PolicyName "高校生"
$users | Grant-CsTeamsAppSetupPolicy -PolicyName "高校生"
$users | Grant-CsTeamsCallingPolicy -PolicyName "高校生"
$users | Grant-CsTeamsMeetingBroadcastPolicy -PolicyName "高校生"
$users | Grant-CsTeamsMessagingPolicy -PolicyName "高校生"
$users | Grant-CsTeamsMeetingPolicy -PolicyName "高校生"

↓カスタムポリシーパッケージでの設定方法(Premiumじゃないとできなくなった)

ポリシー設定.ps1
Conncet-MicrosoftTeams
$users = Get-Content "ユーザー一覧のテキストファイル"

$Users | ForEach-Object { Grant-CsUserPolicyPackage  -Identity $_ -PackageName "高校生" }

##新年度チームへの所属(教員)
毎回 Get-Teamをすると時間がかかるので、いったん$team に読み込んでから
Where-Object で 科目コード等でフィルタして、そこに教員ユーザを -Role Owner(所有者)で追加しています。
-Verboseは画面出力のメッセージがたくさん出るので進捗状況確認用

ユーザ所属(教員).ps1
$team = Get-Team
$team | Where-Object { $_.MailNickName -eq "a00_h2021_100115_101" } |Add-TeamUser -User "sensei1@contoso.ed.jp" -Role Owner -Verbose
$team | Where-Object { $_.MailNickName -eq "a00_h2021_100115_101" } |Add-TeamUser -User "sensei2@contoso.ed.jp" -Role Owner -Verbose

※所有者への昇格などユーザにポップアップで通知されたりするので、真夜中に作業すると教員からクレームがくるかも…

##新年度チームへの所属(生徒)
基本は教員の追加と同じ。-Role Ownerを入れないとメンバーとして追加される。

ユーザ所属(生徒).ps1
$team = Get-Team
$team | Where-Object { $_.MailNickName -eq "a00_h2021_100115_101" } |Add-TeamUser -User "a000001@contoso.ed.jp" -Verbose
$team | Where-Object { $_.MailNickName -eq "a00_h2021_100115_101" } |Add-TeamUser -User "a000002@contoso.ed.jp" -Verbose
$team | Where-Object { $_.MailNickName -eq "a00_h2021_100115_101" } |Add-TeamUser -User "a000003@contoso.ed.jp" -Verbose

※だいたい1000件で10分…結構時間がかかります。

###作業後の確認

チームと所属するメンバーを一覧にする場合は↓

チーム所属メンバーを調べる.ps1
$teams = @();
$team = Get-Team
$team | Where-Object { $_.MailNickName -like "a00_h2021_*" } | ForEach-Object {
	$groupId = $_.GroupId
	$displayName = $_.DisplayName
	$mailNickName = $_.MailNickName

	$_ | Get-TeamUser | ForEach-Object {
		$obj = New-Object object
		$obj | Add-Member -NotePropertyMembers @{
			"GroupId"       = $groupId ;
			"DisplayName"   = $displayName;
			"MailNickName" 	= $mailNickName;
			"User"		= $_.User;
			"Name"		= $_.Name;
			"Role"		= $_.Role;

		}
		$teams += ($obj | Select GroupId,MailNickName,DisplayName,User,Name,Role) 
	}	
}
$teams | Select * 

単にユーザ数だけ調べる場合は↓

ユーザ数調べる.ps1
$team = Get-Team
$team | Where-Object { $_.MailNickName -like "a00_h2021_*" } | ForEach-Object {
	$users = Get-TeamUser -GroupId $_.groupid
	$count = $users.count
	Write-Host $_.MailNickName,$count
}

##参考情報

##補足
勤務校はロイロノート・スクールを使っていて、ロイロの授業区分にあわせてTeamsの各チームを設定しました。
学校向けに特化したロイロはやっぱり便利なので、それくらいTeamsの設定が簡単になったら…と思いますが、あまりやり過ぎるのガラパゴス化しちゃうので、難しいところですね。

0
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?