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だけで上手くいく場合は、最初の一行は不要
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bOR [Net.SecurityProtocolType]::Tls12
Install-Module MicrosoftTeams
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
Import-Module MicrosoftTeams -Force
###(確認)現在あるチームをリストアップ
Connect-MicrosoftTeams
Get-Team | Out-GridView #画面に表示
Get-Team | Select * | Set-Clipboard #クリップボードにコピー
Get-Team | Where-Object {$_.MailNickName -match ".*108$"} #末尾が108=1年8組のチームだけ検索
##新年度チーム設定
「チームを設定する授業」 のデータから↓のコマンドをつくる。
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
科目ごとに生徒が検索しやすいように、教科ごと科目毎に色分けしてアイコンを別途作成してある。
Get-Team -MailNickName "a00_h2021_100115_101" | Set-TeamPicture -ImagePath ".\100115.png"
###できないこと(ほんとはしたいこと)
チームでの投稿や返信を生徒からさせたくない(勝手に掲示板状態にならないように)
だけど、
チームのモデレーション設定(GraphAPI?)
「一般」チャネルのモデレーションはPowerShellやGraphAPIでは設定不可(今回は全部手作業)
旧年度をリードオンリー
2020年度のチームをすべてArchiveする。(ReadOnlyになる)
MailNickNameでフィルタして2020年度の
$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に設定変更)
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管理画面で、ポリシーパッケージ「高校生」をカスタムで設定してある。
設定方法はここでは省略
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じゃないとできなくなった)
Conncet-MicrosoftTeams
$users = Get-Content "ユーザー一覧のテキストファイル"
$Users | ForEach-Object { Grant-CsUserPolicyPackage -Identity $_ -PackageName "高校生" }
##新年度チームへの所属(教員)
毎回 Get-Teamをすると時間がかかるので、いったん$team に読み込んでから
Where-Object で 科目コード等でフィルタして、そこに教員ユーザを -Role Owner(所有者)で追加しています。
-Verboseは画面出力のメッセージがたくさん出るので進捗状況確認用
$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を入れないとメンバーとして追加される。
$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分…結構時間がかかります。
###作業後の確認
チームと所属するメンバーを一覧にする場合は↓
$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 *
単にユーザ数だけ調べる場合は↓
$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の設定が簡単になったら…と思いますが、あまりやり過ぎるのガラパゴス化しちゃうので、難しいところですね。