投稿者「admin」のアーカイブ

【コードサンプル】ネット転送量モニタ

ネットワーク転送量モニタのScript例

hh55_network_transfer.ps1

  • hh55_xxxなので、heartbeat.ps1が直接起動する
  • 毎時55分になると実行する。hh30にすると毎時30分になるし、hh70 にすると実行されることはなくなる。
  • 毎時15分、毎時45分に同じタスクを追加したければ、このScriptファイルをCOPYしてファイル名を hh15_network_transfer.ps1 、hh45_network_transfer.ps1 に変更すればいい
  • ネットワークアダプタが複数ある場合、下記サンプルのように、モニタするネットワークアダプタを絞りこむこともできる
  • 履歴ファイルをCSVファイル形式にしているので、Excel等他のアプリで容易に読み込み可能。
# 定数定義
Set-Variable -Name 'NetTransHist' -Value history\dd9999_network_transfer_history.txt
Set-Variable -Name 'NetAdapterName' -Value "イーサネット"
# ネットの容量を確認する
$now = Get-Date -Format G
$rcv = (get-netadapterStatistics -Name $NetAdapterName).ReceivedBytes
$snd = (get-netadapterStatistics -Name $NetAdapterName).SentBytes
echo "$now,$rcv,$snd" | Out-File -FilePath $NetTransHist -Append

関連する記事・ページ

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

【コードサンプル】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例
【コードサンプル】ネット転送量モニタ

【コードサンプル】プロセスモニタのScript例

プロセスモニタのScript例

hh30_monitor_process_ME.ps1

  • モニタの場合比較的短い周期(5分や10分)でScriptタスクを起動する必要があるので、メインの処理は hh99_xxxに置いて、修正時のインパクトが少なくなるようにしている
#$scriptName = $myInvocation.MyCommand.name
#************************************************************************************
# 定数定義
#************************************************************************************
Set-Variable -Name 'trigCommand' -Value <IFTTTのEventName>
#************************************************************************************
# メイン処理
#************************************************************************************
.\hh99_monitor_process.ps1 hh99_monitor_process_ME.ps1 mediaespresso PC_A

hh99_monitor_process.ps1

  • ファイルに保存しておいた前回モニタ時のCPU時間を取得して、現在のCPU時間を比較する。差が2秒以内なら「停止状態」としている
#
# プロセスが起動していてCPUを消費しているか監視(モニタ)する
#
#************************************************************************************
# パラメータ定義
#************************************************************************************
Param(
    [parameter(Mandatory=$True)][string]$ScriptName,
    [parameter(Mandatory=$True)][string]$ProcessName,
    [parameter(Mandatory=$True)][string]$MachineName
)
#************************************************************************************
# 定数定義
#************************************************************************************
if ((Get-Variable  -ErrorAction silentlyContinue -Name 'trigCommand' | Measure-Object).count -eq 0){
Set-Variable -Name 'trigCommand' -Value <IFTTTのEventName>
}
#************************************************************************************
# 関数定義
#************************************************************************************
#************************************************************************************
# メイン処理
#************************************************************************************
$vFile =$ScriptName.Replace(".ps1",".txt")
echo "$vFile at $(Get-Date -Format G)"

$cnt = (get-process -ErrorAction SilentlyContinue $ProcessName | Measure-Object).count

if($cnt -eq 0){
# プロセスが見つからない
    $now = Get-Date
    echo "プロセスが起動していません at $now"
    exit
}
#echo ProcessName &"(" & pID &")"

Get-Content $vFile | Foreach-Object{
   $var = $_.Split('=')
   Set-Variable -Name $var[0] -Value $var[1]
}

echo "CPU:$cpu"

$cpuAfter = 0
((Get-Process -ErrorAction SilentlyContinue $ProcessName).CPU | ForEach-Object { $cpuAfter = $cpuAfter + $_})
$cpuAfter = [int]$cpuAfter

echo "CPUAFTER:$cpuAfter"

# フラグファイルを生成するだけにする(IFFFへMAKERイベント発火)
if ($cpu -gt $cpuAfter){ # 初期化する
    echo "CPU=$cpuAfter" | Out-File -FilePath $vFile
}else{
    if ($cpu -gt ($cpuAfter - 2)){ # 誤差があるので2とした
        .\hh99_IFTTT_trig.ps1 $trigCommand "アイドル状態($MachineName)"
    }else{
        echo "CPU=$cpuAfter" | Out-File -FilePath $vFile
    }
    echo "CPU=$cpuAfter" | Out-File -FilePath $vFile
}

【コードサンプル】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例
【コードサンプル】ネット転送量モニタ