Skip to content

Instantly share code, notes, and snippets.

@tatsumin39
Last active June 8, 2021 14:35
Show Gist options
  • Save tatsumin39/0cad2faa39ca168664b7a754990864ba to your computer and use it in GitHub Desktop.
Save tatsumin39/0cad2faa39ca168664b7a754990864ba to your computer and use it in GitHub Desktop.

Google Workspace共有ドライブの一覧と権限設定を出力するGAS

使い方

Googleスプレッドシートに下記の2つのシートを作成します。
シート名:List
見出し行:共有ドライブ名/共有ドライブID

シート名:Permission
見出し行:共有ドライブ名/共有ドライブID/ユーザー/アカウント/権限

スクリプトエディタの[リソース]>[Googleの拡張サービス]からAdmin SDKの[AdminDirectory]とDrive API[Drive]を有効にし、Google Workspaceの特権管理者アカウントで実行する必要があります。

下記2つのスクリプトを作成
teamDrivesList.gs
teamDrivesPermission.gs

特権管理者がスプレッドシートのメニューバーに表示された[GAS実行]メニューから実施するか
あらかじめ特権管理者アカウントでトリガーを設定し定期的に実行されるようにします。

//実行メニューを作成
function onOpen() {
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu("GAS実行");
menu.addItem("共有ドライブ権限一覧取得", "adminListAllTeamDrives");
menu.addToUi();
}
//共有ドライブの一覧を取得する(ID含む)
function adminListAllTeamDrives(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('list');
//変数の宣言
var pageToken;
var teamDrives;
var k = 2;
//シートの初期化
var lastRow = sheet.getLastRow();
if(lastRow > 1){
sheet.getRange(2,1,lastRow,2).clearContent();
}else{
;
}
//管理者リストを取得する
var drives = "";
do{
teamDrives = Drive.Drives.list({pageToken:pageToken,maxResults:50,useDomainAdminAccess:true})
if(teamDrives.items && teamDrives.items.length > 0){
for (var i = 0; i < teamDrives.items.length; i++) {
//listシートへドライブ一覧情報を書き込む
var teamDrive = teamDrives.items[i];
sheet.getRange(k,1).setValue(teamDrive.name);
sheet.getRange(k,2).setValue(teamDrive.id);
k ++;
}
}else{
Logger.log("権限が見つかりませんでした。");
}
//次のページのpageTokenを取得する
pageToken = teamDrives.nextPageToken
}while(pageToken)
//共有ドライブの権限一覧を取得する
getTeamDrivePermissions()
}
//共有ドライブの権限一覧を取得する
function getTeamDrivePermissions(){
var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('List');
var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Permission');
//変数の宣言
var permissions ;
var pageToken;
var name;
var id;
var k = 2;
var n = 2;
//シートの初期化
var lastRow = sheet2.getLastRow();
if(lastRow > 1){
sheet2.getRange(2,1,lastRow,5).clearContent();
}else{
;
}
while(sheet1.getRange(k, 1).getValue()) {
name = sheet1.getRange(k,1).getValue();
id = sheet1.getRange(k,2).getValue();
k ++;
//メンバーと権限の一覧を取得する
var roles = "";
do{
//supportsAllDrives:trueを入れないと動かない。けれどこのオプションはDeprecatedに指定されているという(なのでTrueにしておく)
//useDomainAdminAccess:trueにて特権管理者権限で権限情報を取得する
permissions = Drive.Permissions.list(id, {maxResults:20,pageToken:pageToken,supportsAllDrives:true,useDomainAdminAccess:true}) ;
if(permissions.items && permissions.items.length > 0){
for (var i = 0; i < permissions.items.length; i++) {
//権限情報を取得して変数に格納
var permission = permissions.items[i];
sheet2.getRange(n,1).setValue(name);
sheet2.getRange(n,2).setValue(id);
sheet2.getRange(n,3).setValue(permission.name);
sheet2.getRange(n,4).setValue(permission.emailAddress);
sheet2.getRange(n,5).setValue(permission.role);
n ++;
}
}else{
Logger.log("権限は見つかりませんでした。");
}
//次のページのpageTokenを取得する
pageToken = permissions.nextPageToken
}while(pageToken)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment