2022/05/29に更新

【GASで監視】ファイルの共有権限を書き出す

ドライブスプレッドシート

指定したフォルダに入っているファイルの共有権限を、スプレッドシートに書き出すGoogle Apps Scriptです。権限の棚卸しをしたいときなどにどうぞ。

こんな悩みを解決します


  • メンバーが入れ替わったので、ファイルの共有権限を棚卸ししたい
  • アカウントが乗っ取られたかもしれない、ファイルの共有状態をチェックしたい

用意するもの


特にありません。GASの設置および出力先としてスプレッドシートを使用します。

このスクリプトで出来ること


  • 指定したGoogleドライブにあるファイルの、閲覧権限、参照権限をスプレッドシートに書き出すことができます。

使い方


1.スクリプトの実行

上のメニューにある「スクリプト実行」から「ファイルの共有権限を出力する」を実行します。
アクティブ(今開いている)シートのA1セルを起点に書き出しますので、新しいシートで実行することをおすすめします。

2.フォルダURLの入力

共有権限をチェックしたいフォルダのURLを入力してください。
Googleドライブを開いたときに、アドレスバーに表示される「https://drive.google.com/drive/folders/」で始まるURLです。

3.結果の確認

しばらく待つとアクティブなシートに書き出されます。
100ファイルでおよそ30秒かかりました。多数のファイルがある場合は6分以内に終わらないかもしれません。

書き出される項目は以下の通りです。

  • ファイル名
  • 閲覧権限保持者(空欄の場合は、誰も設定されていません)
  • 編集権限保持者(空欄の場合は、誰も設定されていません)
  • ファイルのURL

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00095/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('ファイルの共有権限を出力する', 'get_file_viewer_and_editor');

  // メニューを画面に追加する
  menu.addToUi();
}

function get_file_viewer_and_editor() {

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // アクティブなスプレッドシート、シートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // 権限をチェックしたい対象のGoogleドライブのURLを入力してもらう
  const input = ui.prompt('GoogleドライブフォルダのURLを入力してください', '例:https://drive.google.com/drive/folders/***************', ui.ButtonSet.OK_CANCEL);

  // キャンセルが押されたらスクリプトを終了する
  if (input.getSelectedButton() == ui.Button.CANCEL) {
    return;
  }

  // 入力されたテキストを取り出す
  const url = input.getResponseText();

  // 入力されたフォルダURLからID部分を取得する
  const folder_id = url.replace(/^https:.*folders\//, '');

  // フォルダ内のファイルを取得する
  const files = DriveApp.getFolderById(folder_id).getFiles();

  // シート書き込み用の配列を準備
  const result = [];

  // ファイルの数だけ情報を取得する
  for (let i = 0; files.hasNext(); i++) {

    let file = files.next(); //ファイルオブジェクトを取得

    let filename = file.getName(); //ファイル名を取得
    let viewers = file.getViewers(); // 閲覧権限保持者を取得する
    let editors = file.getEditors(); // 編集権限保持者を取得する
    let file_url = file.getUrl(); // ファイルのURLを取得

    let viewers_mail = []; // 閲覧権限保持者のメールアドレス格納用の配列
    let editors_mail = []; // 編集権限保持者のメールアドレス格納用の配列

    for (let j = 0; j < viewers.length; j++) {
      viewers_mail.push(viewers[j].getEmail()); // メールアドレスを取得
    }

    for (let k = 0; k < editors.length; k++) {
      editors_mail.push(editors[k].getEmail()); // メールアドレスを取得
    }

    result.push([filename, viewers_mail.join('\n'), editors_mail.join('\n'), file_url]); //シート書き込み用の配列に追加

  }

  // 項目名を追加
  result.unshift(['ファイル名', '閲覧権限保持者', '編集権限保持者', 'URL']);

  // 書き込む内容に応じた書き込み範囲を定義
  const range = sheet.getRange(1, 1, result.length, result[0].length);

  // シートへの書き込みを実行
  range.setValues(result);

}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

myfunc.jp