未分類」カテゴリーアーカイブ

【コードサンプル】IFTTT経由でLINE通知するScript例

IFTTTへMAKERイベント発火するScript例

hh99_IFTTT_trig.ps1

  • hhxx_xxxなので、heartbeat.ps1が直接起動することはない
  • この例では、IFTTTへイベント発火するのみ。IFTTTの設定にて、発火イベントを受けるとLINE通知に通知するような仕掛けにしている。それにより、スマホにLINE通知が届く
    • PCからIFTTTへイベントを発火する
    • IFTTTからLINE通知へ通知する
    • LINE通知からスマホに通知が来る
#
Add-Type -AssemblyName System.Web
#************************************************************************************
# 定数定義
#************************************************************************************
Set-Variable -Name 'hFile' -Value history\hh99_IFTTT_trig_history.txt
Set-Variable -Name 'TOKEN_IFTTT' -Value <IFTTTのトークン>
echo ("※IFTTTへMAKERイベント発火 at " + $Now)

$oXmlHttp = New-Object -Com Msxml2.XMLHTTP.3.0
$URL = "https://maker.ifttt.com/trigger/$($Args[0])/with/key/$TOKEN_IFTTT"

#コマンドライン引数(パラメータ)の取得
If ($Args.Length -eq 2){
    $a1 = [SYstem.Web.HttpUtility]::UrlEncode($Args[1])
    $URL = $URL + "?value1=" + $a1
}else{
    echo "Error:引数が多すぎます"
    exit
}

$oXmlHttp.Open("GET", $URL, $false)
$oXmlHttp.Send()
If ($oXmlHttp.Status -eq 200){
    Get-Date -Format G | Out-File -FilePath $hFile -Append
    echo [SYstem.Web.HttpUtility]::UrlDecode($URL) | Out-File -FilePath $hFile -Append
}Else{
    echo "Error returnCode:" + $oXmlHttp.Status
}

関連する記事・ページ

自宅PCをスマホでリモート管理(タスク管理編)
PCをリモート管理する1手法
【コードサンプル】Windowsタスクへの登録例
【コードサンプル】heartbeat.ps1 – 心音確認 PowerShell Script
【コードサンプル】1時間タスクのScript例
【コードサンプル】24時間タスクのScript例
【コードサンプル】hbJob.bat – Windows Bat Script
【コードサンプル】プロセスモニタのScript例
【コードサンプル】IFTTT経由でLINE通知するScript例
【コードサンプル】ネット転送量モニタ

【コードサンプル】hbJob.bat – Windows Bat Script

WindwsバッチプログラムもPowershellから呼び出して実行することができる。

@echo off

echo "HeartBeatでBatジョブを起動しています"

REM ---- マシンの強制再起動 ------------------------------------------------------
REM echo "マシンを強制的に再起動します"
REM shutdown /r /f /t 0

REM ---- VPS接続プロセスの起動 ------------------------------------------------------
ssh gConohaVPS
  • この例はsshクライアントを起動する例
  • REMで始まる行はコメント

Powershellからは下記のようにして起動する

    echo "リモート接続用プロセスを起動する" | Out-File -FilePath $SchedTaskHist -Append
    Start-Process -filepath hbJob.bat -WindowStyle hidden

実際にこのコードは親Script(下記にある「heartbeat.ps1」)にもある
https://krasavkana.com/archives/4293

関連する記事・ページ

自宅PCをスマホでリモート管理(タスク管理編)
PCをリモート管理する1手法
【コードサンプル】Windowsタスクへの登録例
【コードサンプル】heartbeat.ps1 – 心音確認 PowerShell Script
【コードサンプル】1時間タスクのScript例
【コードサンプル】24時間タスクのScript例
【コードサンプル】hbJob.bat – Windows Bat Script
【コードサンプル】プロセスモニタのScript例
【コードサンプル】IFTTT経由でLINE通知するScript例
【コードサンプル】ネット転送量モニタ

【コードサンプル】24時間タスクのScript例

サービス起動チェックのScript例

dd0440_check_service.ps1

  • dd0440_xxxなので、heartbeat.ps1が直接起動する
  • 毎日04:40に実行する。夜11時に実行したければ、 dd2300_check_service.ps1 とすればいい。
  • 実際の処理を記述したScriptは hh99_check_service.ps1 にある。ファイル名がhh99_xxxとなっているが、dd9999_xxxとかでもいい
#$scriptName = $myInvocation.MyCommand.name
#************************************************************************************
# 定数定義
#************************************************************************************
Set-Variable -Name 'trigCommand' -Value <IFTTTのEventName>
#************************************************************************************
# メイン処理
#************************************************************************************
.\hh99_check_service.ps1 "EpgTImer Service" PC_A

hh99_check_service.ps1

  • 実際の処理を記述したScript
  • 上と同じフォルダに置くことを想定している
  • 実行履歴を history\hh99_check_service_history.txt に出力している
  • hh99_xxxなので、heartbeat.ps1が直接起動することはない
#************************************************************************************
# 変数定義
#************************************************************************************
if ((Get-Variable  -ErrorAction silentlyContinue -Name 'trigCommand' | Measure-Object).count -eq 0){
Set-Variable -Name 'trigCommand' -Value <IFTTTのEventName>
}
Set-Variable -Name 'OutputLog' -Value history\hh99_check_service_history.txt

# 現在時刻の取得
$now = Get-Date -Format G

# 引数の型定義
$sName = [string]
$mName = [string]

#コマンドライン引数(パラメータ)の取得
If ($Args.Length -lt 2){
    echo "Error:引数が足りません"
    exit
}
#コマンドライン引数(パラメータ)の検証
$sName = $Args[0]
echo ("Arg[1]:" + $sName)
$mName = $Args[1]
echo ("Arg[2]:" + $mName)

If ($sName -eq ""){
    echo "Error:サービス名がありません" | Out-FIle $OutputLog -Append
    exit
}
If ($mName -eq ""){
    echo "Error:マシン名がありません" | Out-FIle $OutputLog -Append
    exit
}

$cnt = (Get-Service -ErrorAction SilentlyContinue -Name $sName | Measure-Object).count

if($cnt -eq 0){
# サービスが見つからない
    echo "$now サービスが登録されていません" | Out-FIle $OutputLog -Append
    exit
}

$s = Get-Service -ErrorAction SilentlyContinue -Name $sName

if($s.status -eq "Running" ){
# サービスが実行中です
    echo "$now サービスが実行中です($sName)" | Out-FIle $OutputLog -Append
    exit
}
echo "$now サービスが停止しています($sName)" | Out-FIle $OutputLog -Append
#Start-Service -inputObject $s -Verb runas
#
# IFFFへMAKERイベント発火
.\hh99_IFTTT_trig.ps1 $trigCommand "サービス停止 at $mName$sName)"

echo "$now IFFFへMAKERイベント発火しました" | Out-FIle $OutputLog -Append

関連する記事・ページ

自宅PCをスマホでリモート管理(タスク管理編)
PCをリモート管理する1手法
【コードサンプル】Windowsタスクへの登録例
【コードサンプル】heartbeat.ps1 – 心音確認 PowerShell Script
【コードサンプル】1時間タスクのScript例
【コードサンプル】24時間タスクのScript例
【コードサンプル】hbJob.bat – Windows Bat Script
【コードサンプル】プロセスモニタのScript例
【コードサンプル】IFTTT経由でLINE通知するScript例
【コードサンプル】ネット転送量モニタ

【コードサンプル】1時間タスクのScript例

STORAGEの容量チェックのScript例

hh25_check_service.ps1

  • hh25_xxxなので、heartbeat.ps1が直接起動する
  • 毎時25分になると実行する。hh30にすると毎時30分になるし、hh70 にすると実行されることはなくなる。
  • 毎時15分、毎時45分に同じタスクを追加したければ、このScriptファイルをCOPYしてファイル名を hh15_check_service.ps1 、hh45_check_service.ps1 に変更すればいい
#$scriptName = $myInvocation.MyCommand.name
#************************************************************************************
# 定数定義
#************************************************************************************
Set-Variable -Name 'trigCommand' -Value <IFTTTのEventName>
#************************************************************************************
# メイン処理
#************************************************************************************
.\hh99_check_service.ps1 "EpgTimer Service" PC_A

hh99_checkdrive.ps1

  • hhxx_xxxなので、heartbeat.ps1が直接起動することはない
  • 上から呼ばれるScript。実行コードの詳細はここに書く
  • trigCommand は呼び出し側で設定されることを考慮している。そうでないと上書いてしまうので。
  • この例では、さらに、 hh99_IFTTT_trig.ps1 というScriptを呼び出してIFTTTに発火イベントを送付しており、IFTTTが発火イベントを受けるとLINE通知に通知するような仕掛けにしている。
#************************************************************************************
# 定数定義
#************************************************************************************
$NUM_OF_CHARS_FOR_KB = 3
$NUM_OF_CHARS_FOR_MB = 6
$NUM_OF_CHARS_FOR_GB = 9
$NUM_OF_CHARS_FOR_TB = 12
if ((Get-Variable  -ErrorAction silentlyContinue -Name 'trigCommand' | Measure-Object).count -eq 0){
Set-Variable -Name 'trigCommand' -Value <IFTTTのEventName>
}
#************************************************************************************
# 関数
#************************************************************************************
Function getNumOfGB([string]$iStr){
    $str = $iStr.Replace(",","")
    If ($str.length -gt $NUM_OF_CHARS_FOR_GB){
        $str.Substring(0,$str.length - $NUM_OF_CHARS_FOR_GB)
    }
}
#************************************************************************************
#メイン処理
#************************************************************************************
#コマンドライン引数(パラメータ)の取得
If ($Args.Count -lt 2){
    echo "Error:引数が足りません"
    exit
}

#コマンドライン引数(パラメータ)の検証
$argCompName = $args[0]
$argULimitGB = $args[1]
$str = (Get-PSDrive D).Free
$str = (getNumOfGB $str)

$now = Get-Date -Format G 

If ([int]$str -lt [int]$argULimitGB) {
    $str2 = $str + "GB[" + $argCompName + "] at " + $now + "※IFTTTへMAKERイベント発火"
}else{
    $str2 = $str + "GB[" + $argCompName + "] at " + $now + "※IFTTTへMAKERイベント不要"
    exit
}
.\hh99_IFTTT_trig.ps1 $trigCommand "ディスク逼迫 at $argCompName(残量 $str)"

関連する記事・ページ

自宅PCをスマホでリモート管理(タスク管理編)
PCをリモート管理する1手法
【コードサンプル】Windowsタスクへの登録例
【コードサンプル】heartbeat.ps1 – 心音確認 PowerShell Script
【コードサンプル】1時間タスクのScript例
【コードサンプル】24時間タスクのScript例
【コードサンプル】hbJob.bat – Windows Bat Script
【コードサンプル】プロセスモニタのScript例
【コードサンプル】IFTTT経由でLINE通知するScript例
【コードサンプル】ネット転送量モニタ

自宅PCをスマホでリモート管理(タスク管理編)

はじめに

管理人(Krasavkana)の管理するブログに、下記記事を書いています。

Dropboxのちょっと変わった使い方(基本編)

これを書いたのはもう7年も前のことでした。

DropboxとはWindowsのファイルやフォルダでありながら、他デバイス(PCやタブレット、スマホなど)とリアルタイム同期できる高機能ファイルシステムのこと、です。

この記事ではDropboxのリアルタイム同期に着目して、その利用方法のひとつを提示しました。仕事先PCや私用ノートPC(スマホ)から自宅PCをリモート操作して、外出していても自宅PCを有効活用しようという目的から、Dropboxを利用した便利な方法を考えて運用していたんですね。

現在はというと、このときとは少し前提が変わっています。

  • 仕事先PCは使えない。ましてや仕事先PCから自宅PCに接続できない。そもそもシステム的に外部にアクセスできなくしてある。
  • 自宅PCとは別に親の住む実家にデスクトップPC(ここでは実家PCという)がある。なので、リモート操作したいPCは自宅PCと実家PCの2台になる。

毎日帰宅して直接操作できる自宅PCと、遠く(新幹線で3時間位)にあってリモート操作もしくは家人に操作してもらうしかない実家PCとでは、管理の仕方が違ってきます。ネットワークの管理やPCでやっていることのモニタとかですね。

ぶっちゃけ、自宅PCの管理は簡単です。毎日そばに戻って、ネットワーク転送量等は一切気にせず、とことん向き合えます。

実家PCではそうは行きません。上で「家人に操作してもらう」と書きましたが、PCには疎いので、「電源入れて」「リセットボタンを押して再起動して」「HDD交換して」等、ちょっと気の利く小学生でもできるようなことしか頼めません。

ここでは、自宅PCや上でいう実家PCを管理する方法を紹介していきます。

目次

関連する記事・ページ

自宅PCをスマホでリモート管理(タスク管理編)
PCをリモート管理する1手法
【コードサンプル】Windowsタスクへの登録例
【コードサンプル】heartbeat.ps1 – 心音確認 PowerShell Script
【コードサンプル】1時間タスクのScript例
【コードサンプル】24時間タスクのScript例
【コードサンプル】hbJob.bat – Windows Bat Script
【コードサンプル】プロセスモニタのScript例
【コードサンプル】IFTTT経由でLINE通知するScript例
【コードサンプル】ネット転送量モニタ