2015年8月31日月曜日

Googleドライブの不要なファイルを自動で削除してみる 【自動削除編】

こんにちは、井下です。

前回からかなり間が空きましたが、引き続きGoogleドライブから不要なファイルを自動で削除してみます。

参考:前回→Googleドライブの不要なファイルを自動で削除してみる 【リストアップ編】

方法としては、以下の手順になります。
  1. "最終更新日から一定の日にちが経過しているファイル"を削除対象候補として、スプレッドシートにリストアップする
  2. 削除対象を確定する(手動で行います)
  3. 確定させたリストを基に、削除対象のファイルを全て削除する
手順1については前回実装・説明したので、今回は手順2について実装・説明します。
ただ、今回は手順1で実装した内容についてパフォーマンスの改善と、手順2で利用するカラムの追加を行っているのでご注意ください。
NAME_COLUMN = 0;
OWNER_COLUMN = 1;
MAIL_COLUMN = 2
LAST_UPDATED_COLUMN = 3;
ID_COLUMN = 4;

START_ROW = 1
START_COLUMN = 1

// 手順1
// 不要と思われるファイル(最終更新日から一定の日にちが経過したファイル)をリストアップする
function listup() {
  var DATE_OFFSET = 10;
  var sheet = SpreadsheetApp.getActiveSheet();

  var nowDate = new Date();
  var baseDate = dateFormat(new Date(nowDate.getFullYear(), nowDate.getMonth(), nowDate.getDate() - DATE_OFFSET));

  var files = DriveApp.searchFiles('modifiedDate <= "' + baseDate + '"');

  var values = [['ファイル名', 'オーナー', 'オーナー(メールアドレス)', '最終更新日', 'ファイルID']];

  var row = 1;

  while(files.hasNext()){
    var file = files.next();
    var owner = file.getOwner();
    values[row] = [];
    values[row][NAME_COLUMN] = "=HYPERLINK(\"" + file.getUrl() + "\",\"" + file.getName() + "\")";
    values[row][OWNER_COLUMN] = owner.getName();
    values[row][MAIL_COLUMN] = owner.getEmail();
    values[row][LAST_UPDATED_COLUMN] = file.getLastUpdated();
    values[row][ID_COLUMN] = file.getId();
    row++;
  }

  sheet.getRange(START_ROW, START_COLUMN, values.length, values[0].length).setValues(values);
}

// 手順3
// 手順1でリストアップしたファイルを削除する(自分がオーナーでないファイルは、マイドライブから表示しなくするだけ)
function trash() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var values = sheet.getRange(START_ROW, START_COLUMN, lastRow, ID_COLUMN + 1).getValues();

  for(var index = 1; index < lastRow; index++){
    if(values[index].join('') == ""){
      continue;
    }
 
    var owner = values[index][MAIL_COLUMN];
    var file = DriveApp.getFileById(values[index][ID_COLUMN]);
 
    // マイドライブから表示されないようにする
    DriveApp.removeFile(file);

    if(owner == Session.getActiveUser().getEmail()){
      // 自分がオーナーのファイルはゴミ箱に移動する
      file.setTrashed(true);
    }
  }
}

function dateFormat(date) {
  return date.getFullYear() + '-' + ('0' + (date.getMonth() + 1) ).slice(-2) + '-' + ('0' + date.getDate()).slice(-2);
}

前回から不要なファイルを削除するために、trashメソッドを追加しています。

trachメソッドはシートに書き込まれたファイルを参照し、自分がオーナーのファイルはゴミ箱へ移動します。
また、オーナーに関係なく、シートに書き込まれているファイルは全てマイドライブから表示されないようにします。
※ あくまでマイドライブから表示されなくなるだけで、ファイル自体は削除されません。

運用方法としては、次のようになると考えています。
  1. listupメソッドによって最新更新日から一定期間以上経過したファイルをリストアップする(手動でlistupを起動 or トリガーによって定期的に自動起動)
  2. リストアップされたファイルを確認し、削除したくないファイル名が記載された行を削除する(ここは手動で行います)
  3. trashメソッドによってリストアップされたファイルを全て削除する(手動でtrashを起動 or トリガーによって定期的に自動起動)
listupメソッドはトリガーで自動起動しても問題ありませんが、trashメソッドは人の目によるリストのチェックが事前にあるものと想定しているので、トリガーによる自動起動はご注意ください。

なお、最悪誤って削除してしまった場合も、ゴミ箱に移動しているだけなので、数日間は元に戻すことができます。

Google Driveの整理にご利用ください。

2015年8月27日木曜日

コストを掛けずにサーバマシンの電源ON/OFFのスケジューリングを自動化する

こんにちは、渡辺です。


皆さんは、定期的なコンピュータの起動停止はどうされていますか?

数台だったらまだよいですが、コンピュータの台数が多くなるとこれらを手動で行う労力はバカになりませんね。
もちろん、数台であっても手動で行うには、深夜や早朝に時間を拘束されることになります。

みなさんも何かしらのツールを利用されている方が多いのではないかと思いますが、そのためだけに高価なツールを利用していたり、完全自動化となっていなかったりしませんか?

そこで、今回は、まだ自動化されていない方も、既に自動化されている方にも Wake On Lanを用いリモートからサーバマシンの電源ON/OFFを自動化する手順について書いていきます。

イメージはこんな感じです。



以下のとおり、大きく2つのパートに分けて書いていきます。

  1. 電源ON/OFFバッチの準備
  2. A-AUTOでの自動化手順


1. 電源ON/OFFバッチの準備

先ずは、電源ON・OFFのバッチファイルの準備です。


電源OFFバッチ
poweroff.batというファイル名で作成しておきます。

@echo off
echo ### Shutdown Start ###

set RC=99

if "%1"=="" (
  goto PARAM_INVALID
)
set NAME=%1
echo ### Shutdown Target = %NAME% ###


shutdown /m %NAME% /s

if not "%ERRORLEVEL%" == "0" (
  goto SHUTDOWN_FAILED
) else (
  set RC=0
  goto END
)

:PARAM_INVALID
echo ### parameter invalid.
set RC=4
goto END

:SHUTDOWN_FAILED
set RC=%ERRORLEVEL%
goto END

:END
echo ### Shutdown End rc=%RC% ###

exit %RC%



電源OFFは、Widnowsのshutdown を利用します。
上記バッチでは、自動化時に汎用性を持たせるため、電源をoffするコンピュータ名(またはIPアドレス)をパラメータで渡すようにしています。



電源ONバッチ
poweron.batというファイル名で作成しておきます。

@echo off
echo ### Power On START ###

set RC=99

if "%1"=="" (
  goto PARAM_INVALID
)
set PORT_NO=%1

if "%2"=="" (
  goto PARAM_INVALID
)
set IP=%2

if "%3"=="" (
  goto PARAM_INVALID
)
set SUBNET=%3

if "%4"=="" (
  goto PARAM_INVALID
)
set MAC_ADDR=%4

echo ### Power On Target: Port=%PORT_NO% Ip=%IP% SubNet=%SUBNET% MAC_Addr=%MAC_ADDR% ###

"C:\BSP\AUW\BIN\poweron.exe" -p=%PORT_NO% %IP% %SUBNET% %MAC_ADDR%


if not "%ERRORLEVEL%" == "0" (
  goto POWERON_FAILED
) else (
  set RC=0
  goto END
)

:PARAM_INVALID
echo ### parameter invalid.
set RC=4
goto END

:POWERON_FAILED
set RC=%ERRORLEVEL%
goto END

:END
echo ### Power On  END rc=%RC% ###
exit %RC%




電源ONは、上記サンプルでは自社作成した poweron.exe というツールを利用しています。

また、上記バッチでは、自動化時に汎用性を持たせるため、UDPのポート番号、IPアドレス、サブネットマスク、MACアドレスをパラメータで渡すようにしています。

電源ON用のフリーツールはいろいろとあるので、任意のツールをご利用いただければと思います。
ちなみに、フリーツールの使用が禁止されているお客様の場合、こちらからご連絡いただければ、弊社から提供に関してのご連絡をさせていただきますので、お気軽にご相談ください。



  • 上記バッチで電源ONするマシンのMACアドレス、IPアドレスなどを渡す必要がありますが、以下のコマンドで確認可能です。
     ipconfig /all
  • 電源ONするマシンは、有線LANで繋がれている必要があります
  • マジックパケットを送信するために、BIOSやデバイスマネージャにて設定する必要があります
    以下のサイトなどを参考に設定を行ってください
    http://www.atmarkit.co.jp/ait/articles/0602/25/news014.html


2. A-AUTOでの自動化手順

ここからは、準備したバッチファイルをA-AUTOで自動化する手順について記載します。


2015年8月18日火曜日

ランサムウェアの脅威 【データが誘拐される前に・・・】

おはようございます。
鷲尾です。

みなさんは夏休みをいかがお過ごしでしょうか。
もうとった方も、これからの方も、ゆっくり休んでいただければと思います。


さて、今回はランサムウェアについて、書いていきたいと思います。


はじめに、ランサムウェアという言葉は聞いたことがありますか?
ランサムウェアはコンピューターウイルスの一種で、2013年に一度話題になりましたが、ウイルスの詳細や内容も英語ということで、「詳しくはわからないけど危ないらしい」程度の認識で流れてしまっていました。

ところが最近、このランサムウェアの日本語版がついに発見され、よりセキュリティに関する脅威が高まっています。

そこで、今回はランサムウェアに関して、以下の順に説明していきたいと思います。

1.ランサムウェアとは
2.感染するとどうなるのか
3.感染しないためには


1.ランサムウェアとは
ランサムウェアとは、「感染したPC内のファイルを暗号化してユーザが開けない状態にし、ファイルの復号を条件に身代金を要求してくるウイルス」のことです。
ランサム = Ransome(身代金)の名がつく通り、データを"誘拐"し、"身代金"を要求してきます。

身代金の額にはばらつきはありますが、300~500ドル程度(日本円で3万~5万程度)が多いようです。
ランサムウェアに感染すると、ファイルが暗号化されてしまうだけでなく、アクセスすることができなくなってしまいます。ランサムウェアに感染したPCにユーザがアクセスすると、見るからにあやしい画面が表示され、以下のように表示されます(一部省略)。





引用:http://blog.goo.ne.jp/withmac/e/433478046341924e540df8254ef3f341


あなたのコンピュータ上のファイル(写真、動画、ドキュメントなど)は暗号化されました。

~省略~

暗号化は、このコンピュータで生成された固有のRSA2048ビットの公開鍵を用いて行なわれました。ファイルを復号するためには、秘密鍵を取得する必要があります。

秘密鍵は、インターネット上の秘密のサーバに置かれました。サーバはこのウィンドウで指定されている時刻を経過すると自動的に秘密鍵を破棄します。
そうなった場合は、誰であろうと決してファイルを元に戻すことが出来ません・・・

ファイルを元に戻すために、このコンピュータ用の秘密鍵を手に入れるためには、あなたは5万円を支払う必要があります。

~省略~

このソフトウェアを削除、あるいはダメージを与えようとすることは、サーバによる秘密鍵の即時破棄につながります。



上記の文章からもわかるように、内容としては

・お前の大事なデータは誘拐(暗号化)した!
・返して欲しければ身代金を払え!
・期限までに支払わなかったら、ただじゃおかないぞ!(データを復元できなくなる)
・変なこと(ソフトの削除など)をしてみようものなら、データは元に戻せなくなるぞ!

まさに文字通り、「データが誘拐」されてしまうのです。