Last active
December 3, 2024 16:50
-
-
Save austinsonger/f826c26ce9bc31a6272fa82998f73ec3 to your computer and use it in GitHub Desktop.
Google App Script - Transfer Ownership of File(s) OR Entire Drive
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"timeZone": "America/Chicago", | |
"dependencies": { | |
"enabledAdvancedServices": [ | |
{ | |
"userSymbol": "Drive", | |
"serviceId": "drive", | |
"version": "v2" | |
} | |
] | |
}, | |
"oauthScopes": [ | |
"https://www.googleapis.com/auth/drive", | |
"https://www.googleapis.com/auth/drive.file", | |
"https://www.googleapis.com/auth/script.scriptapp", | |
"https://www.googleapis.com/auth/script.external_request", | |
"https://www.googleapis.com/auth/spreadsheets", | |
"https://www.googleapis.com/auth/drive.metadata.readonly" | |
], | |
"exceptionLogging": "STACKDRIVER", | |
"runtimeVersion": "V8" | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Transfer ownership of a specific file to another user. | |
* @param {string} fileId The ID of the file to transfer ownership. | |
* @param {string} newOwnerEmail The email address of the new owner. | |
*/ | |
function transferFileOwnership(fileId, newOwnerEmail) { | |
try { | |
const file = DriveApp.getFileById(fileId); | |
Logger.log(`Current owner of file '${file.getName()}' is: ${file.getOwner().getEmail()}`); | |
file.setOwner(newOwnerEmail); | |
Logger.log(`Ownership of file '${file.getName()}' has been transferred to: ${newOwnerEmail}`); | |
} catch (e) { | |
Logger.log(`Error transferring ownership for file ID ${fileId}: ${e.message}`); | |
} | |
} | |
/** | |
* Transfer ownership of all files in the current user's drive to another user. | |
* @param {string} newOwnerEmail The email address of the new owner. | |
*/ | |
function transferAllFilesToUser(newOwnerEmail) { | |
try { | |
const files = DriveApp.getFiles(); // Get all files owned by the current user | |
let transferredCount = 0; | |
while (files.hasNext()) { | |
const file = files.next(); | |
const fileName = file.getName(); | |
Logger.log(`Transferring ownership of file: ${fileName}`); | |
try { | |
file.setOwner(newOwnerEmail); | |
transferredCount++; | |
} catch (e) { | |
Logger.log(`Error transferring ownership for file: ${fileName} - ${e.message}`); | |
} | |
} | |
Logger.log(`Ownership of ${transferredCount} files has been transferred to: ${newOwnerEmail}`); | |
} catch (e) { | |
Logger.log(`Error transferring files: ${e.message}`); | |
} | |
} | |
/** | |
* Transfer ownership of all files owned by a departing user to a new user. | |
* @param {string} departingUserEmail The email address of the departing user. | |
* @param {string} newOwnerEmail The email address of the new owner. | |
*/ | |
function transferOwnershipForDepartingUser(departingUserEmail, newOwnerEmail) { | |
try { | |
const files = DriveApp.getFilesByOwner(DriveApp.getUserByEmail(departingUserEmail)); // Get files owned by departing user | |
let transferredCount = 0; | |
while (files.hasNext()) { | |
const file = files.next(); | |
const fileName = file.getName(); | |
Logger.log(`Transferring ownership of file: ${fileName}`); | |
try { | |
file.setOwner(newOwnerEmail); | |
transferredCount++; | |
} catch (e) { | |
Logger.log(`Error transferring ownership for file: ${fileName} - ${e.message}`); | |
} | |
} | |
Logger.log(`Ownership of ${transferredCount} files has been successfully transferred from ${departingUserEmail} to ${newOwnerEmail}`); | |
} catch (e) { | |
Logger.log(`Error transferring files for departing user: ${e.message}`); | |
} | |
} | |
/** | |
* Batch transfer file ownership from a Google Sheet. | |
* Format: | |
* | File ID | New Owner Email | | |
* |--------------------|-----------------------| | |
* | fileId12345 | newowner@example.com | | |
*/ | |
function batchTransferOwnership() { | |
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); | |
const data = sheet.getDataRange().getValues(); | |
for (let i = 1; i < data.length; i++) { | |
const fileId = data[i][0]; // File ID from column A | |
const newOwnerEmail = data[i][1]; // New owner email from column B | |
if (fileId && newOwnerEmail) { | |
Logger.log(`Transferring ownership for file ID: ${fileId} to ${newOwnerEmail}`); | |
transferFileOwnership(fileId, newOwnerEmail); | |
} else { | |
Logger.log(`Skipping row ${i + 1}: Missing file ID or owner email.`); | |
} | |
} | |
} | |
/** | |
* Menu to choose between transferring specific files, an entire drive, or a departing user's files. | |
*/ | |
function onOpen() { | |
const ui = SpreadsheetApp.getUi(); | |
ui.createMenu("Ownership Transfer") | |
.addItem("Transfer Specific Files", "batchTransferOwnership") | |
.addItem("Transfer Entire Drive", "promptTransferAllFilesToUser") | |
.addItem("Transfer Departing User's Files", "promptDepartingUserTransfer") | |
.addToUi(); | |
} | |
/** | |
* Prompt user for new owner email and transfer all files in their drive. | |
*/ | |
function promptTransferAllFilesToUser() { | |
const ui = SpreadsheetApp.getUi(); | |
const response = ui.prompt("Transfer Entire Drive", "Enter the email address of the new owner:", ui.ButtonSet.OK_CANCEL); | |
if (response.getSelectedButton() === ui.Button.OK) { | |
const newOwnerEmail = response.getResponseText().trim(); | |
if (newOwnerEmail) { | |
Logger.log(`Starting transfer of all files to: ${newOwnerEmail}`); | |
transferAllFilesToUser(newOwnerEmail); | |
} else { | |
Logger.log("No email address provided. Transfer canceled."); | |
} | |
} else { | |
Logger.log("Transfer canceled by user."); | |
} | |
} | |
/** | |
* Prompt for departing user and new owner details, then transfer all files. | |
*/ | |
function promptDepartingUserTransfer() { | |
const ui = SpreadsheetApp.getUi(); | |
const departingUserResponse = ui.prompt( | |
"Departing User", | |
"Enter the email address of the departing user:", | |
ui.ButtonSet.OK_CANCEL | |
); | |
if (departingUserResponse.getSelectedButton() === ui.Button.OK) { | |
const departingUserEmail = departingUserResponse.getResponseText().trim(); | |
if (departingUserEmail) { | |
const newOwnerResponse = ui.prompt( | |
"New Owner", | |
"Enter the email address of the new owner:", | |
ui.ButtonSet.OK_CANCEL | |
); | |
if (newOwnerResponse.getSelectedButton() === ui.Button.OK) { | |
const newOwnerEmail = newOwnerResponse.getResponseText().trim(); | |
if (newOwnerEmail) { | |
Logger.log(`Starting transfer of all files from ${departingUserEmail} to ${newOwnerEmail}`); | |
transferOwnershipForDepartingUser(departingUserEmail, newOwnerEmail); | |
} else { | |
Logger.log("No new owner email provided. Transfer canceled."); | |
} | |
} | |
} else { | |
Logger.log("No departing user email provided. Transfer canceled."); | |
} | |
} else { | |
Logger.log("Transfer canceled by user."); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment