Получить файлы заблокированных пользователей

Есть ли способ в сценарии приложений Google для получения файлов приостановленного владельца на основе его / ее идентификатора электронной почты? Я буквально пытаюсь реализовать перенос файлов диска новому владельцу с помощью google apps, я использую этот код, чтобы найти сведения обо всех заблокированных пользователях:

/**
 * Fetches the suspended user details from the AdminDirectory.
 */
function fetchUser() {
  // Set the constant options only once.
  const options = {
    domain: 'xyz.com',
    orderBy: 'email',
    query: 'isSuspended=true',
    maxResults: 500,
    fields: "nextPageToken,users"
  };
  // Could log the options here to ensure they are valid and in the right format.

  const results = [];
  do {
    var search = AdminDirectory.Users.list(options);
    // Update the page token in case we have more than 1 page of results.
    options.pageToken = search.nextPageToken;
    // Append this page of results to our collected results.
    if(search.users && search.users.length)
      Array.prototype.push.apply(results, search.users);
  } while (options.pageToken);
  //Logger.log(results);

  for(var k = 0; k < results.length; k++){
     var fullEmail = results[k].primaryEmail;
     Logger.log(fullEmail);
     fetchFiles(fullEmail);
  }
}

/**
 * Fetches the files of the suspended users based on their email.
 */
function fetchFiles(email){
  var pageToken;
    var filesList = Drive.Files.list({  // Invalid value error is thrown here, I am not sure if this the right way to use Drive API in google script
      domain: 'xyz.com',
      orderBy: 'email',
      q: "'email' in owners",
      maxResults: 500,
      pageToken: pageToken
    });  
  Logger.log('filesList:' +filesList);
}

Я пытаюсь реализовать что-то вроде Передать право собственности на файл другому пользователю в скрипте Google Apps, но есть ли способ который я могу получить файлы пользователя из деталей, полученных из приведенного выше кода, который в основном возвращает следующий вывод:

[
  {
    orgUnitPath = /,
    ipWhitelisted = false,
    gender = {type = other},
    creationTime = 2017-06-13T14:38:44.000Z,
    isMailboxSetup = true,
    isEnrolledIn2Sv = false,
    kind = admin#directory#user,
    suspensionReason = ADMIN,
    isAdmin = false,
    suspended = true,
    emails = [{
      address = [email protected],
      primary = true
    }],
    lastLoginTime = 2017-09-12T00:27:00.000Z,
    isDelegatedAdmin = false,
    isEnforcedIn2Sv = false,
    changePasswordAtNextLogin = false,
    customerId = v12idsa,
    name = {
      givenName = John,
      familyName = Seb,
      fullName = John Seb
    },
    etag = "npJcgeAc7Xbfksfwer22344/sfasdfaffUDsfdsjfhsfhsdfw-ec",
    id = 1033392392142423424,
    primaryEmail = [email protected],
    agreedToTerms = true,
    includeInGlobalAddressList = true
  },
  ...
] 

Я пытаюсь использовать Drive API в приложениях Google. скрипт, чтобы получить доступ к файлам заблокированных пользователей, используя их электронную почту, но его бросание

Ошибка "Недопустимое значение"

для строки Drive.Files.list я не уверен, что это правильный способ использования DRIVE API в скрипте google, есть ли другой способ использовать этот API в скрипте google?


person merilstack    schedule 23.06.2018    source источник
comment
Drive API -> Files -> list -> "'email' in owners" ? Если учетная запись, под которой вы работаете, не имеет правильных разрешений, я полагаю, что это может работать не на 100% правильно.   -  person tehhowch    schedule 23.06.2018
comment
У меня есть разрешения, но как будет работать Drive API -> Files -> list -> "'email' in owners"?   -  person merilstack    schedule 24.06.2018
comment
Точно так, как предлагает документация API... вы пишете поиск q для электронной почты пользователя, для которого вы хотите найти файлы. Он покажет те файлы, к которым у вас есть доступ.   -  person tehhowch    schedule 24.06.2018
comment
@tehhowch не могли бы вы указать поисковый запрос, пожалуйста? Потому что я нашел только эти методы: getFileById(id), getFiles(), getFilesByName(name) и getFilesByType(mimeType) ни один из которых не принимает email .   -  person merilstack    schedule 24.06.2018
comment
пожалуйста, перечитайте мой комментарий - я не ссылаюсь на DriveApp. Создание поисковых запросов для метода Files.list Drive API подробно описано в документации по Drive API.   -  person tehhowch    schedule 25.06.2018
comment
Спасибо за повторную ссылку, но не могли бы вы помочь мне, как использовать это здесь, в скрипте приложений Google? Поскольку я не смог найти, как сделать запрос с помощью только Drive API в скрипте приложений Google, единственный метод, который я сформулировал самостоятельно, это: function fetchFiles(email){ var pageToken; var filesList = Drive.Files.list({ domain: 'xyz.com', orderBy: 'email', q: "'email' in owners", maxResults: 500, pageToken: pageToken }); } Я не уверен, что он работает.   -  person merilstack    schedule 25.06.2018
comment
Обратите внимание, что у вас есть множество электронных писем, которые относятся к заблокированным пользователям... попробуйте использовать эти электронные письма вместо буквального 'email'   -  person tehhowch    schedule 25.06.2018
comment
Да, я передаю это множество писем в качестве параметра 'email' в запросе.   -  person merilstack    schedule 25.06.2018
comment
Спасибо за повторную ссылку, но не могли бы вы помочь мне, как использовать это здесь, в скрипте приложений Google? Поскольку я не смог найти, как сделать запрос только с Drive API в скрипте приложений Google, единственный метод, который я сформулировал самостоятельно, это: function fetchFiles(email){ var pageToken; var filesList = Drive.Files.list({ domain: 'xyz.com', orderBy: 'email', q: "'email' in owners", maxResults: 500, pageToken: pageToken }); } Но он не работает и выдает ошибку Invalid Value (line 86, file "Code").   -  person merilstack    schedule 25.06.2018
comment
у нас нет возможности узнать, что такое строка 86. Пожалуйста, измените свой вопрос, чтобы он был более конкретным и подробным   -  person tehhowch    schedule 25.06.2018
comment
Он выдает ошибку для строки Drive.Files.list, я думаю, это в первую очередь потому, что в скрипте Google нет API с именем Drive.   -  person merilstack    schedule 25.06.2018
comment
Код в исходном вопросе использует расширенный сервис AdminDirectory. Drive REST API также является расширенным сервисом. Вы до сих пор не отредактировали свой вопрос, чтобы включить фактический код, который вы используете, чтобы попытаться составить список файлов. Включите свой MCVE! stackoverflow.com/help/how-to-ask   -  person tehhowch    schedule 25.06.2018
comment
@tehhowch Прошу прощения за то, что не дал четкой ясности, я обновил вопрос для получения дополнительной информации.   -  person merilstack    schedule 26.06.2018
comment
Я повторно отредактировал его и разместил вопрос здесь для получения дополнительной информации: stackoverflow.com/q/51032383/4877962   -  person merilstack    schedule 26.06.2018


Ответы (1)


В вашей функции fetchFiles вы никогда не используете входной аргумент email. Вместо этого вы запрашиваете у Drive REST API буквальный текст 'email' in owners. Поскольку текстовая строка 'email' не является действительным адресом электронной почты, вы правильно получаете сообщение об ошибке «Недопустимое значение».

Вместо этого кода:

/**
 * Fetches the files of the suspended users based on their email.
 */
function fetchFiles(email){
  var pageToken;
    var filesList = Drive.Files.list({
      domain: 'jerseystem.org',
      orderBy: 'email',
      q: "'email' in owners",
      maxResults: 500,
      pageToken: pageToken
    });  
  Logger.log('filesList:' +filesList);
}

Сначала вы должны выполнить замену, чтобы настроить все постоянные параметры (как я уже упоминал и продемонстрировал в вашем другом вопросе), а затем повторно запрашивать у Drive API файлы, принадлежащие пользователю с этим адресом электронной почты:

function fetchAllFilesOwnedByEmail(email) {
  const searchParams = {
    corpora: 'some corpora',
    orderBy: 'some ordering criteria',
    q: "'" + email + "' in owners",
    fields: 'nextPageToken,items(id,title,mimeType,userPermission)'
  };

  const results = [];
  do {
    var search = Drive.Files.list(searchParams);
    if (search.items)
      Array.prototype.push.apply(results, search.items);
    searchParams.pageToken = search.nextPageToken;
  } while (searchParams.pageToken);
  return results;
}

Вам необходимо ознакомиться с документацией Drive REST API, см. Drive.Files.list. и как минимум Поиск файлов. Не забудьте включить Driveрасширенный сервис, если вы еще не т.

Также обратите внимание, что хотя приведенный выше код устранит полученную вами ошибку "Invalid Value", он не обязательно приведет к отображению файлов пользователя, даже если вы выполняете код от имени администратора G-Suite. Ваше исследование должно было выявить как минимум два связанных вопроса:

  1. Как администратор может получить доступ к содержимому Google Диска всех пользователей в определенном домене?
  2. Самый эффективный процесс передачи права собственности всех файлов пользователя с помощью Google Диска API
person tehhowch    schedule 25.06.2018
comment
несмотря на то, что Drive в расширенной службе включен, он все равно выдает < b>Недопустимое значение для строки Drive.Files.list(searchParams) - person merilstack; 26.06.2018
comment
@JijoJohny А? Если вы зарегистрируете текущее значение searchParams при возникновении ошибки, что вы обнаружите? Когда вы ссылаетесь на разрешенные параметры q в ссылке Search for Files, которую я дал выше, используете ли вы допустимые значения? Когда вы ссылаетесь на разрешенные параметры для Files.list (по справочной ссылке API выше), используете ли вы только допустимые параметры? - person tehhowch; 26.06.2018
comment
Он просто возвращает [object Object] - person merilstack; 26.06.2018
comment
@JijoJohny Прекратите использовать Logger.log для сложных объектов — используйте ведение журнала Stackdriver. Вы также можете запустить в режиме отладки, и сценарий будет приостанавливаться при возникновении ошибки, что позволит вам проверить стек вызовов и активные объекты в каждом пространстве имен. Отладка — это фундаментальный инструмент программирования, который вы ДОЛЖНЫ изучить. - person tehhowch; 26.06.2018
comment
Я сделаю это обязательно. В журналах Stackdriver выдает ошибку Invalid Value at fetchAllFilesOwnedByEmail(Code:99) at fetchUser(Code:73) at test(Code:13) для Drive.Files.list(searchParams) - person merilstack; 26.06.2018
comment
После отладки searchParams возвращает ({corpora:"xyz", orderBy:"createdDate", q:"'[email protected]' in owners", fields:"nextPageToken,items(id,title,mimeType,userPermission)"}), тогда как search возвращает undefined, а results возвращает пустой массив [] - person merilstack; 26.06.2018
comment
@JijoJohny обратите внимание, что corpora принимает очень специфический набор значений, из которых xyz не является допустимым значением. - person tehhowch; 26.06.2018
comment
большое спасибо, ошибка была из-за значения corpora, когда я дал ему domain в качестве значения, хотя он удаляет ошибку, он возвращает пустой массив [] для results и search - person merilstack; 26.06.2018
comment
@JijoJohny, за кого ты выступаешь? Если вы не можете найти эти файлы на веб-сайте Диска, войдя в систему как пользователь, от имени которого вы работаете, вы не сможете найти их с помощью API. Я упомянул об этом 2 дня назад: приостановленных пользователей">stackoverflow.com/questions/50997602/ - person tehhowch; 26.06.2018
comment
Я работаю как администратор G-Suite, нужны ли мне права суперадминистратора? - person merilstack; 26.06.2018
comment
@JijoJohny, ты действительно должен быть пользователем. stackoverflow.com/questions/37602929/ stackoverflow.com/questions/32344681 / Эти ссылки было очень легко найти! Пожалуйста, исследуйте! - person tehhowch; 26.06.2018
comment
Большое спасибо за ваше терпение и извините меня за отсутствие исследований. - person merilstack; 26.06.2018