Google Apps 脚本中的“共享云端硬盘”支持

tgp*_*fer 4 javascript google-apps-script google-drive-api google-drive-shared-drive

我正在 Google Apps 脚本中编写一个 JavaScript 工具来检查文档的某些属性,例如“所有链接是否有效”、“权限设置是否正确”等。我正在使用https://developers.google.com/apps-script/reference/drive/drive-app中记录的 API按 ID 查找文件、检查其权限、在 Google Drive 中找到它们等,但我发现“共享驱动器”不能很好地与该 API 配合使用。

例如,

  • 对于共享云端硬盘的根文件夹,Folder.getName()仅返回“Drive”而不是云端硬盘的名称,
  • 即使mygroup@domain.com是共享驱动器的“管理器”,folder.getAccess('mygroup@domain.com')为 NONE 并且folder.getViewers()为空,
  • 共享驱动器中的某些文件夹并不(始终)包含在DriveApp.getFolders()迭代器中。

特别是第二点现在对我来说是一个障碍,但我在这里错过了什么?我是否应该使用其他一些 API,或者这只是我应该报告的错误?是否有一些文档说明Drive我可以和不能与共享云端硬盘一起使用 API 的哪些功能?

zig*_*hka 5

使用高级驱动服务而不是DriveApp

  • 事实上,共享驱动器不受其支持,DriveApp其范围有限
  • 但如果您启用Advanced Drive Serviceyuo 将能够在 Apps 脚本中使用支持共享驱动器的Drive API v2的所有方法

样本:

function myFunction() {
  var sharedDriveName = Drive.Drives.get("XXXXXXXXXXXXXXXXXXX").name;
  //it is important to specify that the folder is located on a shared drive with {"supportsAllDrives": true}
  var folderOnDriveName = Drive.Files.get("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",{"supportsAllDrives": true}).title;
  var folderPermissions = Drive.Permissions.list("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",{"supportsAllDrives": true});
}
Run Code Online (Sandbox Code Playgroud)

  • 我明白了,我以前遇到过“Drive.Drives”,但我不明白一旦启用高级驱动服务,它也可以从 Google Apps 脚本中使用,我认为它只是一个 Web API。因此,现在给定一个“GoogleAppsScript.Drive.File”,我可以使用“Drive.Permissions.list(f.getId(), {supportsAllDrives: true}).find((p) => p.emailAddress =”之类的内容检查权限=“mygroup@domain.com”);`。谢谢你! (2认同)
  • @tgpfeiffer - 请注意,供将来参考,不仅是云端硬盘,所有高级服务都是围绕相应 REST API 的[包装器](https://developers.google.com/apps-script/guides/services/advanced#support_for_advanced_services),所以你可以互换使用它们 (2认同)