はじめに
本記事は、Google Workspaceを利用している組織のシステム管理者が、GASを用いて
Googleドライブにおける共有ドライブの一覧情報(共有ドライブ名、メンバー、役割etc)を
Googleシートに出力する手順について説明します。
なお、同様の記事として、すでに@ryosukさんの
「GASでGoogle Driveの共有ドライブと所属ユーザ一の一覧を出力する」があります。
私のスクリプトでは、上記を大いに参考にしつつ、以下の点を考慮しました。
- 共有ドライブの数が100を超える場合の処理
- 配列を用いた処理の高速化
- 後々加工しやすい出力形式(これは用途によりますが)
実行結果
事前準備
-
出力対象のすべての共有ドライブ対し、システム管理者(スクリプト実行者)を
「管理者」として追加します。
[Google Workspace管理コンソール] → [アプリ] → [Google Workspace] → [ドライブとドキュメントの設定] → [共有ドライブの管理] → 対象の共有ドライブの[メンバーを管理] → システム管理者のアカウントを入力 → [管理者]を選択 → [共有]
-
出力先のスプレッドシートを作成し、Apps Scriptに「Drive API」を追加します。
[Googleシート] → [新しいスプレッドシートを作成] → [拡張機能]タブ → [Apps Script]→
サービス[+] → [Drive API] → [追加]
スクリプト
Apps Scriptから下記のスクリプトを実行します。
初回のみプロジェクトへの承認が求められますので、許可してください。
const act_sheet = SpreadsheetApp.getActive().getActiveSheet();
let drv_list, drv_info, drv_token;
let prm_list, prm_info, role_ja;
let array = [];
function myFunction() {
array.push(["共有ドライブ", "メンバー", "メール", "タイプ", "役割"]);
// Drive APIから共有ドライブのリストを取得、pageTokenがある限り繰り返し
do {
drv_list = Drive.Drives.list({
maxResults: 100,
pageToken: drv_token,
useDomainAdminAccess: true
});
for (let i = 0; i < drv_list.items.length; i++) {
drv_info = drv_list.items[i];
try {
// 共有ドライブごとにパーミッション情報を取得
prm_list = Drive.Permissions.list(
drv_info.id,
{supportsAllDrives: true, useDomainAdminAccess: true}
);
for (let j = 0; j < prm_list.items.length; j++) {
prm_info = prm_list.items[j];
// ロール情報を日本語化
switch (prm_info.role) {
case ("organizer"):
role_ja = "管理者";
break;
case ("fileOrganizer"):
role_ja = "コンテンツ管理者";
break;
case ("reader"):
role_ja = "閲覧者";
break;
case ("commenter"):
role_ja = "閲覧者(コメント可)";
break;
case ("writer"):
role_ja = "投稿者";
break;
default:
role_ja = prm_info.role;
}
// 取得した共有ドライブ名および各種情報を配列に追加
if (j === 0) {
array.push([
drv_info.name,
prm_info.name, prm_info.emailAddress, prm_info.type, role_ja
]);
} else {
array.push([
"", // 出力形式上、最初のメンバー以外の配列には共有ドライブ名不要
prm_info.name, prm_info.emailAddress, prm_info.type, role_ja
]);
}
}
} catch (err) {
console.log(err);
array.push([err]);
continue;
}
}
drv_token = drv_list.nextPageToken;
} while (drv_token);
// 配列をGoogleシートに反映
act_sheet.clear();
act_sheet.setFrozenRows(1);
act_sheet.getRange(1, 1, array.length, array[0].length).setValues(array);
}
参考
-
GASでGoogle Driveの共有ドライブと所属ユーザ一の一覧を出力する - Qiita
https://qiita.com/ryosuk/items/8fdcd606d94e89e156ed -
Spreadsheet Service | Apps Script | Google Developers
https://developers.google.com/apps-script/reference/spreadsheet -
API Reference | Drive API | Google Developers
https://developers.google.com/drive/api/v2/reference -
Roles | Drive API | Google Developers
https://developers.google.com/drive/api/guides/ref-roles