【備忘録】ちょっとしたメモ書き【備忘録】

自分でやったこと調べてみた事とのメモ書きブログです
主に周辺機器の翻訳した取り説や故障修理の手順を記録しています。

logとり楽したい。

2023年07月02日 | Windows PowerShell

#動作の概要:
#実行時に ips.txt ファイルからサーバーのリストと各サーバーに対応するマクロのパスを取得します。
#各サーバーに対してpingを実行し、応答速度に基づいてマクロの実行を判断します。
#マクロを実行した場合は、ログファイルに実行したことと実行日時を記録します。実行しなかった場合やping応答がなかった場合もログに記録されます。
#動作環境:
#
#PowerShell 5.0 以降が必要です。
#Windows オペレーティングシステム上で動作します。
#ルールの設定:
#
#サーバーの一覧と各サーバーに対応するマクロのパスは、ips.txt ファイルに記述します。
#ips.txt ファイルの各行は、IPアドレス、サーバー名、マクロのパスをスペースで区切って記述します。
#例: 192.168.0.1 ServerA C:\Path\to\MacroA.exe
#マクロは指定の条件を満たす場合に実行されます。
#マクロの実行条件: サーバーのping応答速度が200ms以下の場合に実行されます。
#マクロの実行結果やping応答の有無により、ログファイルに実行結果が記録されます。
#ログファイルは log.txt として指定のパスに作成されます。
#各ログエントリーには、実行日時と実行したサーバーの情報が含まれます。
#使用方法:
#
#ips.txt ファイルにサーバーの一覧と各サーバーに対応するマクロのパスを記述します。
#PowerShell 5.0 以上の環境で、スクリプトを実行します。
#スクリプトがサーバーにpingを実行し、条件を満たす場合は指定のマクロが実行され、ログファイルに実行結果が記録されます。
#注意:
#
#スクリプトを実行する前に ips.txt ファイルを正しく設定してください。
#マクロの実行に関連するセキュリティ上のリスクに十分注意してください。
#

$ipListFilePath = "C:\Path\to\ips.txt"  # IPアドレスとサーバー名、マクロパスが記述されたファイルのパス

# IPリストファイルの存在を検証
if (-not (Test-Path -Path $ipListFilePath)) {
    Write-Host "Error: IP list file not found at '$ipListFilePath'"
    exit 1
}

# IPリストファイルの読み込み
$ipList = Get-Content -Path $ipListFilePath

$logFilePath = "C:\Path\to\log.txt"               # ログファイルのパス

Clear-Content -Path $logFilePath

$serverMap = @{}
$macroMap = @{}
foreach ($line in $ipList) {
    $ip, $server, $macroPath = $line -split '\s+', 3
    $serverMap[$ip] = $server
    $macroMap[$ip] = $macroPath
}

foreach ($ip in $serverMap.Keys) {
    $pingResult = Test-Connection -ComputerName $ip -Count 1 -ErrorAction SilentlyContinue
    if ($pingResult) {
        $responseTime = $pingResult.ResponseTime

        if ($responseTime -le 200) {
            $macroPath = $macroMap[$ip]
            if (-not (Test-Path -Path $macroPath)) {
                Write-Host "Error: Macro file not found at '$macroPath' for $ip"
                continue
            }

            # マクロを実行
            Write-Host "Executing macro on $ip ($($serverMap[$ip]))"
            Start-Process -FilePath $macroPath -ArgumentList $ip -NoNewWindow -Wait

            # 実行日時を取得
            $executionTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss"

            # ログに実行したことと実行日時を記録
            $logEntry = "[$executionTime] Executed macro on $ip ($($serverMap[$ip]))"
            Add-Content -Path $logFilePath -Value $logEntry
        } else {
            # ログに実行しなかったことを記録
            $logEntry = "[$executionTime] Skipped macro execution on $ip ($($serverMap[$ip]))"
            Add-Content -Path $logFilePath -Value $logEntry
        }
    } else {
        # ログにping応答がなかったことを記録
        $logEntry = "[$executionTime] No ping response from $ip ($($serverMap[$ip]))"
        Add-Content -Path $logFilePath -Value $logEntry
    }
}

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする