用于在Google Apps域中获取最大数量许可的Google API

时间:2015-04-30 07:05:54

标签: api google-apps-script google-api google-apps

我有一个Google Apps脚本功能,用于为我们的Google Apps域中的新员工设置帐户。

它首先做的是调用Google Admin Settings API并检索 currentNumberOfUsers maximumNumberOfUsers ,以便查看是否有可用席位(否则使用Admin SDK Directory API创建用户的后续步骤将失败。

直到最近,当我们的域名必须从Postini迁移到Google Vault进行电子邮件归档时,它才能正常运行。

之前 迁移,在使用Admin SDK Directory API创建Google Apps用户时,会将 currentNumberOfUsers 增加1并且新用户帐户用户可自动访问所有Google Apps服务。

现在, 迁移后,在创建Google Apps用户时,他们不会自动分配一个"许可证,"所以我修改了我的脚本以使用Enterprise License Manager API,现在它分配了"Google-Apps-For-Business"许可证。这很好。

但是, currentNumberOfUsers 现在与分配的许可数不同,而"Google-Apps-For-Business"仅为{{3} }。

我可以通过以下方式获取 分配的 "Google-Apps-For-Business"许可证的当前数量:



var currentXml = AdminLicenseManager.LicenseAssignments.listForProductAndSku('Google-Apps', 'Google-Apps-For-Business', 'domain.com', {maxResults: 1000});
    
var current = currentXml.items.toString().match(/\/sku\/Google-Apps-For-Business\/user\//g).length;




但产生的数字与 currentNumberOfUsers 不同。

我现在真正需要做的就是获取 最大 拥有的"Google-Apps-For-Business"许可证数量,以便新员工设置脚本可以确定是否有任何可用。

我检查了以下API的API参考文档,但是......

one of several different types of licenses available→没有获取最大或可用许可数量的方法。

Enterprise License Manager API→不会处理许可证,只会处理#34;用户。"

Google Admin Settings API→不会处理许可证。

Admin SDK Directory API User resource→此API似乎符合我的要求,但Google Apps Reseller API

我知道我可以将我的新员工设置脚本编程为只有一个try / catch查看它是否能够创建用户并分配许可证,并且如果它不能正常结束脚本执行,但是这看起来并不高效。

此外,旧脚本的一部分是,如果可用的席位少于X个席位,它会通过电子邮件向我发送预订,以便订购更多。我知道我可以编写一个循环,尝试重复创建虚拟用户并为其分配许可证并计算它在失败之前可以执行该操作的次数,然后删除所有虚拟用户,但是,再一次,这不是有效率。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

使用CustomerUsageReports

jay0lee足以在Python中提供GAM源代码。我粗略地将doGetCustomerInfo()函数修改为Apps脚本:

function getNumberOfLicenses() {
  var tryDate = new Date();
  var dateString = tryDate.getFullYear().toString() + "-" + (tryDate.getMonth() + 1).toString() + "-" + tryDate.getDate().toString();
  while (true) {
    try {
      var response = AdminReports.CustomerUsageReports.get(dateString,{parameters : "accounts:gsuite_basic_total_licenses,accounts:gsuite_basic_used_licenses"});
      break;
    } catch(e) {
      //Logger.log(e.warnings.toString());
      tryDate.setDate(tryDate.getDate()-1);
      dateString = tryDate.getFullYear().toString() + "-" + (tryDate.getMonth() + 1).toString() + "-" + tryDate.getDate().toString();
      continue;
    }
  };
  var availLicenseCount = response.usageReports[0].parameters[0].intValue;
  var usedLicenseCount = response.usageReports[0].parameters[1].intValue;
  Logger.log("Available licenses:" + availLicenseCount.toString());
  Logger.log("Used licenses:" + usedLicenseCount.toString());
  return availLicenseCount;
}

答案 1 :(得分:0)

我建议您浏览GAM这是一个工具,可以让命令行访问您域名的管理功能。