Изменить скрипт SendGoogleForm v2 - PullRequest
1 голос
/ 04 ноября 2019

Я пытаюсь заставить работать мой скрипт SendGoogleForm. Проблема, с которой я столкнулся на данный момент, заключается в том, что сообщение, которое я отправляю с формой, включает скрипт powershell, проблема, с которой я сталкиваюсь, заключается в том, что служба отправки разбивает строки в коде, что означает, что мне нужно вручную удалить все лишние пробелы(см. пример внизу).

Поэтому я подумал, что должен быть способ напечатать код powershell в файл и прикрепить его к электронному письму, которое было отправлено, или исправить проблему пробелов другим способом. Было бы хорошо, если бы ответы по-прежнему отображались в виде обычного электронного письма, как они есть сегодня, но с каким-то образом прикрепленным кодом powershell.

/* Send Google Form by Email v2.1 */
/* For customization, contact the developer at amit@labnol.org */
/* Tutorial: http://www.labnol.org/?p=20884 */

function Initialize() {

  var triggers = ScriptApp.getProjectTriggers();

  for(var i in triggers) {
    ScriptApp.deleteTrigger(triggers[i]);
  }

  ScriptApp.newTrigger("SendGoogleForm")
  .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
  .onFormSubmit()
  .create();

}

function SendGoogleForm(e) 
{  
  try 
  {      
    //Här fyller du i mailadresserna för resp avdelning.
    var it = "test@test.se";

    //Ärende på mailet
    var subject = "testt Ny/redigerad anställning";  

    //Slår ihop alla mailadresser till en.
    var email = hr +","+ security +","+ it;

    //andra variabler
    var bukowskis = "test";
    var temporarypass = "Provide a Temporary Password for this user";
    var semicolon = ";";

    // You may replace this with another email address
    //var email = Session.getActiveUser().getEmail();

    var s = SpreadsheetApp.getActiveSheet();
    var columns = s.getRange(1,1,1,s.getLastColumn()).getValues()[0];    
    var message = "";    

    // Only include form fields that are not blank
    for ( var keys in columns ) {
      var key = columns[keys];
      if ( e.namedValues[key] && (e.namedValues[key] != "") ) {
        message += key + ' :: '+ e.namedValues[key] + "\n\n"; 
      }
      if (key == "Förnamn")
            var fornamn = e.namedValues[key];
        else if (key == "Efternamn")
            var efternamn = e.namedValues[key];
        else if (key == "Placering")
            var placering = e.namedValues[key];
        else if (key == "Titel")
            var titel = e.namedValues[key];
        else if (key == "Avdelning")
            var avdelning = e.namedValues[key];
    }

    //Lägger till eventuellt namn i ämnesraden.
 if(typeof fornamn !== 'undefined'&&typeof efternamn !== 'undefined'){
    subject += ", " + fornamn + " " + efternamn ;
    message +="New-ADUser -SamAccountName '"+fornamn+"."+efternamn+"' -Name '"+fornamn+" "+efternamn+"' -GivenName '"+fornamn+"' -Surname '"+efternamn+"' -Description '"+test+", "+avdelning+", "+titel+"' -OfficePhone ' ' -EmailAddress '"+fornamn+"."+efternamn+"@test.com' -Path 'OU=Users,OU=test,DC=intern,DC=test,DC=se' -Company 'test' -Department '"+avdelning+"' -Title '"+titel+"' "+semicolon+"$NewPassword = (Read-Host -Prompt '"+temporarypass+"' -AsSecureString) "+semicolon+"Set-ADAccountPassword -Identity '"+fornamn+"."+efternamn+"' -NewPassword $NewPassword -Reset "+semicolon+"Set-ADAccountControl -Identity '"+fornamn+"."+efternamn+"' -Enabled $true";
    MailApp.sendEmail(email, subject, message);     
    }

      } catch (e) {
        Logger.log(e.toString());
      }

}

Пример того, как выглядит вывод сегодня, а не возможность просто скопировать в PowershellISE и запусти его, к сожалению.

New-ADUser -SamAccountName 'gadfgdafg.sdfgsdfg' -Name 'gadfgdafg sdfgsdfg'  
-GivenName 'gadfgdafg' -Surname 'sdfgsdfg' -Description 'Test, Utlämningen, Alternativ 5' -OfficePhone ' '  
-EmailAddress 'gadfgdafg.sdfgsdfg@test.com'  
-Path 'OU=Users,OU=test,DC=intern,DC=test,DC=se'  
-Company 'test' -Department 'Utlämningen' -Title 'Alternativ 5' ;$NewPassword = (Read-Host -Prompt 'Provide a Temporary Password for this user' -AsSecureString) ;Set-ADAccountPassword -Identity 'gadfgdafg.sdfgsdfg' -NewPassword $NewPassword -Reset ;Set-ADAccountControl -Identity 'gadfgdafg.sdfgsdfg' -Enabled $true

Заранее спасибо, я перепробовал все, что только могу придумать.

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Йохан. Вы не помещаете символы новой строки в строку, поэтому все будет выводиться в одной строке. Для google-apps-script (js) вы можете использовать '/ n'. См. Примеры здесь.

В качестве альтернативы, чтобы создать файл powershell отдельно и отправить его в виде вложения, вы можете добавить аргумент вложения в функцию MailApp. Вам придется перенести вывод в файл, который все равно будет нуждаться в '/ n', чтобы разбить строки. Вам также нужно будет хранить файл где-нибудь, к которому у формы есть доступ. И вы должны быть уверены, что электронная почта получателя не пометит штраф .ps1 как потенциально вредоносный. (Что и следует делать. Никогда не запускайте сценарии из вложений электронной почты!) Пример вложения здесь.

Веселитесь!

0 голосов
/ 04 ноября 2019

При отправке электронной почты GMail автоматически переносит текстовые сообщения в строку (около 78 символов в строке). Чтобы избежать этого, вы можете:

  1. Использовать другой клиент, кроме Gmail. Конечно, вероятно, не ваш предпочтительный вариант, но кое-что стоит рассмотреть.
  2. Получите данные через API. Полученные данные не будут переноситься в строку.
  3. Отправьте сообщение в виде HTML сообщения. Вы можете сделать это с небольшой модификацией вашего кода:

    • До

    message += key + ' :: '+ e.namedValues[key] + "\n\n";
    ...
    subject += ", " + fornamn + " " + efternamn ;
    message +="New-ADUser -SamAccountName '"+fornamn+"."+efternamn+"' -Name '"+fornamn+" "+efternamn+"' -GivenName '"+fornamn+"' -Surname '"+efternamn+"' -Description '"+test+", "+avdelning+", "+titel+"' -OfficePhone ' ' -EmailAddress '"+fornamn+"."+efternamn+"@test.com' -Path 'OU=Users,OU=test,DC=intern,DC=test,DC=se' -Company 'test' -Department '"+avdelning+"' -Title '"+titel+"' "+semicolon+"$NewPassword = (Read-Host -Prompt '"+temporarypass+"' -AsSecureString) "+semicolon+"Set-ADAccountPassword -Identity '"+fornamn+"."+efternamn+"' -NewPassword $NewPassword -Reset "+semicolon+"Set-ADAccountControl -Identity '"+fornamn+"."+efternamn+"' -Enabled $true";
    MailApp.sendEmail(email, subject, message);
    
    • После

    message += key + ' :: '+ e.namedValues[key] + "<br><br>";
    ...
    subject += ", " + fornamn + " " + efternamn ;
    message +="New-ADUser -SamAccountName '"+fornamn+"."+efternamn+"' -Name '"+fornamn+" "+efternamn+"' -GivenName '"+fornamn+"' -Surname '"+efternamn+"' -Description '"+test+", "+avdelning+", "+titel+"' -OfficePhone ' ' -EmailAddress '"+fornamn+"."+efternamn+"@test.com' -Path 'OU=Users,OU=test,DC=intern,DC=test,DC=se' -Company 'test' -Department '"+avdelning+"' -Title '"+titel+"' "+semicolon+"$NewPassword = (Read-Host -Prompt '"+temporarypass+"' -AsSecureString) "+semicolon+"Set-ADAccountPassword -Identity '"+fornamn+"."+efternamn+"' -NewPassword $NewPassword -Reset "+semicolon+"Set-ADAccountControl -Identity '"+fornamn+"."+efternamn+"' -Enabled $true";
    var htmlBody = "<html><p>" + message + "</p></html>";
    MailApp.sendEmail(email, subject, message, {'htmlBody': htmlBody});
    

    Основные изменения:

    • Перенос текста в код HTML с использованием тега абзаца.
    • Замена новых строк внутри вашего "сообщения" для тегов <br>.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...