首页 > 解决方案 > 如何为我的谷歌工作区域中的所有用户执行脚本?(我是管理员,已创建服务帐户)

问题描述

我创建了一个为所有用户运行的脚本。我是管理员。

(脚本更新用户的联系人)。

我创建了一个具有联系人和 gmail 权限的服务帐户。

如何为每个用户运行脚本?

我不希望用户做任何事情。

标签: google-apps-scriptgoogle-workspace

解决方案


要在 Apps 脚本中使用服务帐户,您需要使用apps-script-oauth2 库

  • 此外,要代表其他用户执行操作,您需要启用和使用域范围委派

  • 这允许服务帐户模拟任何域用户。创建模拟服务对象的代码如下所示:

function getService(user) {
  return OAuth2.createService(SOME NAME)
  .setTokenUrl('https://accounts.google.com/o/oauth2/token')
  .setPrivateKey(YOUR PRIVATE_KEY)
  .setIssuer(YOUR CLIENT_EMAIL)
  .setSubject(user) // the user you want to impersonate - you can call the function from a loop to perform calls for multiple users
  .setPropertyStore(PropertiesService.getScriptProperties())
  .setParam('access_type', 'offline')
  .setScope(YOUR SCOPES);
}
  • 然后在主函数中使用服务对象,您可以在其中使用 Urlfetch 请求和服务帐户令牌调用所需的 API:
var service = getService(user);
    
    if (service.hasAccess()) {
      Logger.log("service has access");
      var url = "the endpoint you are interested in";
      var headers ={
        "Authorization": 'Bearer ' + service.getAccessToken()
      };       
      var options = {
        'headers': headers,
        'method' : 'get',
        'muteHttpExceptions': true    
      };      
      var response=UrlFetchApp.fetch(url, options).getContentText();
  • 有关更多信息,请参阅此示例,该示例列出了所有域用户并循环遍历这些用户代表每个用户执行操作。

推荐阅读