需要将简单的Powershell输出附加到Google表格

时间:2016-03-14 14:11:01

标签: c# .net powershell visual-studio-2013 google-api

我对自己感觉非常困难应该是一项简单的任务。每周,我们的团队都会向VMware vCenter查询三项输出:三个不同位置的VM计数。这是它的样子:

Name                           Value                           
----                           -----                        
locationA                       1433                              
locationB                       278                            
locationC                       23

这些信息通过电子邮件发送给我们的团队,以及一些喜欢查看数据的高层人士。这是通过在服务器上运行的Powershell脚本和Windows任务计划程序自动完成的,没有任何问题。

该数据也放在Google表格中。我们只是在日期附加一个新行,然后将数据复制并粘贴到三个现有列中。它需要30秒,每周一次。考虑到将其复制到Google表格所花费的时间很少,但我真的想要使用Google表格API自动执行最后一个流程,这似乎很愚蠢。

我似乎一直在寻找并坚持在谷歌脚本中访问和编辑Google表格的感觉。我已下载并安装了Sheets API库,Drive API库,Google .net库,设置了Google开发者网站,并运行了Google Sheet API文档和OAuth身份验证。我正在使用Visual Studio 2013,因为我认为使用Powershell并调用.net命令会发挥最佳效果。

我在Powershell之外几乎没有编码经验(如果你可以称之为编码)。我甚至无法弄清楚如何拉动Google表格,更不用说做任何事了。我到目前为止没有尝试过任何工作,而且每周手动复制这些信息的时间很短,我已经花了很多时间而不是可能值得。我觉得如果我能掌握这一点,那将来会为我们进一步的Google自动化打开大门,因为我们使用的是Google域名。无论如何,非常感谢帮助。

以下是我在Visual Studio中的最新脚本尝试:

using System;
using Google.GData.Client;
using Google.GData.Spreadsheets;

namespace MySpreadsheetIntegration
{
  class Program {
    static void Main(string[] args)
    {
        string CLIENT_ID = "abunchofcharacters.apps.googleusercontent.com";
        string CLIENT_SECRET = "secretnumber";
        string REDIRECT_URI = "https://code.google.com/apis/console";

        OAuth2Parameters parameters = new OAuth2Parameters();
        parameters.ClientId = CLIENT_ID;
        parameters.ClientSecret = CLIENT_SECRET;
        parameters.RedirectUri = REDIRECT_URI;
        parameters.Scope = SCOPE;

        string authorizationUrl = OAuthUtil.CreateOAuth2AuthorizationUrl(parameters);
        Console.WriteLine(https://code.google.com/apis/console);
        Console.WriteLine("Please visit the URL above to authorize your OAuth "
          + "request token.  Once that is complete, type in your access code to "
          + "continue..."));
      parameters.AccessCode = Console.ReadLine();

        OAuthUtil.GetAccessToken(parameters);
      string accessToken = parameters.AccessToken;
      Console.WriteLine("OAuth Access Token: " + accessToken);

        GOAuth2RequestFactory requestFactory =
          new GOAuth2RequestFactory(null, "MySpreadsheetIntegration-v1", parameters);
      SpreadsheetsService service = new SpreadsheetsService("MySpreadsheetIntegration-v1");
      service.RequestFactory = requestFactory;

      var driveService = new DriveService(auth);

      var file = new File();
      file.Title = "VSI - VM Totals by Service TEST";
      file.Description = string.Format("Created via {0} at {1}", ApplicationName, DateTime.Now.ToString());
      file.MimeType = "application/vnd.google-apps.spreadsheet";

      var request = driveService.Files.Insert(file);
      var result = request.Fetch();
      var spreadsheetLink = "https://docs.google.com/spreadsheets/d/GoogleDoc_ID";

      Console.WriteLine("Created at " + spreadsheetLink);


    End Class;
    End Namespace;
    }
  } 
} 

1 个答案:

答案 0 :(得分:0)

对于仍然关注此事的人,我找到了解决方案。我完全以错误的方式处理这个问题(或者至少是我能理解的方式)。我的问题的一个解决方案是创建一个新的Google脚本,该脚本每周只访问一次我的电子邮件(在我们收到报告之后)并且除了我要查找的数据之外的所有内容并将其发送到Google电子表格。

这是脚本:

function SendtoSheet(){
  var threads = GmailApp.search("from:THESENDER in:anywhere subject:THESUBJECTOFTHEEMAILWHICHNEVERCHANGES")[0];
  var message = threads.getMessages().pop()
  var bodytext = message.getBody();
  counts = []
bodytext = bodytext.split('<br>');
  for (var i=0 ; i < bodytext.length; i++){
  line = bodytext[i].split(':');
  if (line.length > 0){
    if (!isNaN(line[1])){counts.push(line[1]);}}}
  var now = new Date()
  counts.unshift(Utilities.formatDate(now, 'EST', 'MM/dd/yyyy'))
  var sheet = SpreadsheetApp.openById("GoogleDocID")
  sheet = sheet.setActiveSheet(sheet.getSheetByName("Data by Week"))
  sheet.appendRow(counts)
}

Counts数组包含通过换行符分解和提取数字数据的魔力。完美的工作。它不涉及如何使用Visual Studio,.net Google库或编辑正在运行的PowerShell脚本。干净又简单。

希望这有助于某人。