CryptoLocker - 使用Google Apps脚本恢复云端硬盘文件版本

时间:2017-02-22 21:34:31

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

长话短说我被CryptoLocker病毒感染了。我的“普通”本地文件不是问题,因为我备份了这些文件。但我使用的是Google云端硬盘同步客户端,我的所有云端硬盘文件都已加密。我没有支持它们,因为我认为Google Drive是保存的,我的数据存储在世界各地(我知道我的错)。

现在我可以看到Google云端硬盘提供版本控制。这意味着我的旧上传仍在服务器上。我可以按文件恢复以前的版本文件但是有几千个文件,祝你好运。 我联系了Google G Suite支持小组(我正在为我的公司使用Google G Suite)并询问他们是否可以在一次批量操作中恢复最新版本。答案是“你不必按文件归档”。因此,我正在检查互联网上的脚本,工具等。

我在Google云端硬盘帮助论坛“https://productforums.google.com/forum/#!topic/drive/p08UBFYgFs0https://productforums.google.com/forum/#!topic/drive/p08UBFYgFs0”中找到了Google Apps脚本。

1)我将“Google Apps Script”应用添加到了我的驱动器中。

2)我创建了一个新的应用程序并通过了脚本:

function testSmallFolder() {          
  var smallFolder = DriveApp.getFolderById('FOLDER_ID_HERE');            
  var files = smallFolder.getFiles();  
  while (files.hasNext())
  {    
    file = files.next();      
    deleteRevisions(file);  
  }     
  var childFolders = smallFolder.getFolders(); 
  while(childFolders.hasNext()) 
  {
    var childFolder = childFolders.next();   
    Logger.log(childFolder.getName());    
    var files = childFolder.getFiles();  
    while (files.hasNext())
    {    
      file = files.next();         
      deleteRevisions(file);  
    }   
    getSubFoldersAndDelete(childFolder);     
  }   
} 

function deleteRevisions(file) 
{  
  var fileId = file.getId();  
  var revisions = Drive.Revisions.list(fileId);  
  if (revisions.items && revisions.items.length > 1) 
  {    
    for (var i = 0; i < revisions.items.length; i++) 
  {      
    var revision = revisions.items[i];      
    var date = new Date(revision.modifiedDate);      
    var startDate = new Date();      
    var endDate = new Date(revision.modifiedDate);      
    var fileName = Drive.Files.get(fileId);      
    if(revision.modifiedDate > "2017-02-16T10:00:00" && revision.modifiedDate < "2017-02-18T10:00:00" && revision.lastModifyingUserName == "ENTER_MODIFIED_USERNAME_HERE]]" && file.getName() !== "HELP_DECRYPT.URL" && file.getName() !== "HELP_DECRYPT.PNG" && file.getName() !== "HELP_DECRYPT.HTML")
    {      
      Logger.log(' %s, Date: %s, File size (bytes): %s',file.getName(), 
                 date.toLocaleString(),          
                 revision.fileSize);        
      return Drive.Revisions.remove( fileId, revision.id);      
    }    
  }  
  } else 
  {    
    Logger.log('No revisions found.');  
  }
}function getSubFoldersAndDelete(parent) 
{  
  parent = parent.getId();  
  var childFolders = DriveApp.getFolderById(parent).getFolders();  
  while(childFolders.hasNext()) 
{
 var childFolder = childFolders.next();     
 var files = childFolder.getFiles();  
 while (files.hasNext())
 {    
   file = files.next();         
   deleteRevisions(file);  
 }   
 getSubFoldersAndDelete(childFolder);     
}  
  return;
} 

3)该脚本提供3个函数“testSmallFolder”/“deleteRevisions”/“getSubFoldersAndDelete”。看起来功能“festSmallFolder”可以只对某个文件夹起作用。第2行:FOLDER_ID_HERE

4)我创建了一个文件夹并将我的文件移到了这个文件夹中。之后我获得了文件夹ID(URL)并将其添加到脚本中。

5)在第37行,您可以添加修改的开始和结束日期。我还在同一行调整了用户名。

6)我保存了脚本并运行了“testSmallFolder”函数。

7)我收到一条错误消息:“ReferenceError:”Drive“未定义。 (第27行,文件“代码”)“。 第27行看起来像这样:“var revisions = Drive.Revisions.list(fileId);”。

我再次联系了Google G Suite支持,并就此错误向他们寻求帮助。他们的回答是“抱歉,我们不支持脚本。”

现在我在这里,请你帮忙。也许我们可以让这个脚本运行,以便我可以恢复我的文件的最新工作版本。

我非常感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

首先,您必须确保启用高级驱动器服务,如下所示: https://developers.google.com/apps-script/advanced/drive 进入您的脚本页面,点击资源 - &gt;然后单击Google Advances Services,然后启用(必须是GREEN!)Drive API。 也许一个警告打开你的页面,你必须使脚本能够访问你的驱动器和文件夹(我想这是第一次)。 执行此操作后,如果在脚本的第二行放置一个断点并在构造之后运行调试器,则通过27行没有任何问题,并且您可以在变量堆栈中看到第一个文件的所有字符串,然后对于第二个...... 停止然后这次正常运行,一切都会好的。 祝你晚安。