この記事について
- 業務都合によりGoogleファイルのオーナー移行が必要だったんですが、結構手間だったのでGAS書きました(4000ファイルぐらい)
- 異動時、退職時など、オーナー移行を自分でやる方は参考になるかもです
- 大量にオーナー移行のメールが飛ぶと受け取り側が困ると思うのでサイレント移行しています
1.自分がオーナーであるファイルの取得
書き出し先のスプレッドシート
- 自分がオーナーのファイルをシートに書き出します
- 書き出すデータは以下としました
- parents:親ディレクトリ
- filename:ファイル名
- URL:ファイルURL
- mimeType:ファイルタイプ
サンプルコード
- 「dump??」にて個別に実行でもよし、「dumpAll」にてまとめて実行でもよし
- 処理時間制限があるので、一度お試しでも良いかも
- 1行づつ書き出していますが、まとめて書き出すでOKです
dump.js
function dumpFilesListMine(mimeType) {
var query = "'me' in owners and mimeType = '" + mimeType + "'":
var files = DriveApp.searchFiles(query);
const sps = SpreadsheetApp.getActiveSpreadsheet();
const sht = sps.getSheets()[0];
var list = [];
while (files.hasNext()){
var file = files.next()
var parentlist = [];
var parents = file.getParents();
while(parents.hasNext()){
var parent = parents.next();
parentlist.unshift(parent.getName());
parents = parent.getParents();
}
var attiribute = [parentlist.join("/"),file.getName(),file.getUrl(),mimeType];
var lastrow = sht.getLastRow()+1;
sht.getRange(lastrow,1,1, attiribute.length).setValues([attiribute])
}
}
function dumpAll(){
dumpFolder();
dumpSS();
dumpSlide();
dumpDocs();
dumpForm();
dumpPNG();
}
function dumpFolder(){
dumpFilesListMine('application/vnd.google-apps.folder');
}
function dumpSS(){
dumpFilesListMine('application/vnd.google-apps.spreadsheet');
}
function dumpSlide(){
dumpFilesListMine('application/vnd.google-apps.presentation');
}
function dumpDocs(){
dumpFilesListMine('application/vnd.google-apps.document');
}
function dumpForm(){
dumpFilesListMine('application/vnd.google-apps.form');
}
function dumpPNG(){
dumpFilesListMine('image/png');
}
2.オーナーの切り替え
切り替え情報を記載しているスプレッドシート
- オーナーを変更するシート「setOwner」を作成し、以下の情報を準備します
- fileId:対象ファイルのID
- mail:オーナー権限付与先のメールアドレス
サンプルコード
changeOwner.js
function readData(){
const sheetName = 'setOwner';
const ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
const lastRow = ss.getLastRow();
const dataList = ss.getRange(2,1,lastRow - 1,5).getValues();
const drv = DriveApp;
var fileId, mail;
for (row of dataList){
fileId = row[0];
mail = row[1];
var chFile = drv.getFileById(fileId);
var fileOwner = chFile.getOwner().getEmail();
if(mail != fileOwner){
var ret = ownerChange(mail, fileId);
Logger.log([fileId, ret.role, ret.emailAddress]);
}
}
}
function ownerChange(mail, fileId) {
//ファイルオーナー権限を移譲する
var ret = Drive.Permissions.insert(
{
'role': 'owner', //writerとすると編集者権限になる
'type': 'user',
'value': mail
},
fileId, //ここにfileid変数のファイルのIDを入れる
{
'sendNotificationEmails': 'false' //trueとすると通知が飛んでしまう
}
);
return ret;
}