Скрипт для мониторинга включения/выключения компьютеров

По мотивам темы на форуме. Скриптик для мониторинга когда какой комп включился, когда выключился, и записи в лог. На основе пингов.

Для использования надо подправить параметры под себя (список компьютеров, файлы логов и состояния), и запихать в планировщик, для запуска с интервалом например в 10 минут. При старте скрипт будет проверять наличие файла состояния, и если он существует — подгружать, и писать в логфайл все изменения состояния.

# Функция для проверки доступности хоста. В данном случае используется ping.exe
# Как вариант можно взять версию на .Net у меня из блога:
# https://xaegr.wordpress.com/2008/09/16/test-host_where-online/
Function Test-Host ($HostName)
{
    [bool]((ping.exe $HostName -n 1) -match "получено = 1")
}

# Файл в котором будем сохранять состояние компьютеров между запусками скрипта
$StateFile = "c:\temp\pinger.xml"

# Файл в который будут писаться изменения состояния компьютеров
$LogFile = "c:\temp\pinger.log"

# Если файл сохраненного состояния уже существует...
If ( Test-Path $StateFile )
{
    # Загружаем таблицу состояния компов из файла
    $Table = Import-Clixml $StateFile
}
else # Иначе - создаем новую.
{
    Write-Warning "Выполняется инициализация таблицы состояний"
    $Computers = Get-Content c:\computers.txt
    # $Computers = Get-QADComputer | foreach {$_.DnsName}
    
    #Создаем пустую хэш-таблицу. Ключем будут имена компьютеров, значением - состояние.
    $Table = @{}
    #Заполняем её именами компьютеров, и состоянием $False.
    $Computers | Foreach {$Table[$_] = $False}
}

#Проверяем состояние каждого хоста...
Foreach ($Key in @($Table.Keys))
{
    # Получаем состояние хоста в переменную $State
    $State = Test-Host $Key
    
    #Если состояние не равно предыдущему состоянию...
    if ($State -ne $Table[$Key])
    {
        #Обновляем состояние
        $Table[$Key] = $State
        #Записываем в лог
        if ($State) {$Message = "$(Get-Date) Компьютер $Key был включен."}
        else {$Message = "$(Get-Date) Компьютер $Key был выключен."}
        Add-Content -Path $LogFile -Value $Message
        Write-Host $Message
    }
}

# Записываем состояние хостов в файл
$Table | Export-Clixml $StateFile

В планировщике выполнять например следующую команду:

powershell -noprofile -command c:\scripts\MonitorHost.ps1

Ну и разумеется не забыть разрешить выполнение скриптов в системе и наличие у учетной записи под которой будет выполнятся скрипт необходимых прав для записи файлов.

комментариев 6 to “Скрипт для мониторинга включения/выключения компьютеров”

  1. roach Says:

    А можно пинг заменить на чтонибудь другое? Необходимо мониторить включение выключение Xbox , но пинги на етой коробке закрыты

  2. Xaegr Says:

    roach, конечно можно, например можно детектить открытый порт с помощью test-port (https://xaegr.wordpress.com/2007/11/15/%d0%9f%d1%80%d0%be%d1%81%d1%82%d0%b5%d0%bd%d1%8c%d0%ba%d0%b8%d0%b9-%d0%bf%d0%be%d1%80%d1%82-%d1%81%d0%ba%d0%b0%d0%bd%d0%bd%d0%b5%d1%80/).
    Только я пока не нашел какие порты открыты у ящика, но какие то наверняка открыты🙂

  3. roach Says:

    тогда подскажите команды как

    «разрешить выполнение скриптов в системе и наличие у учетной записи под которой будет выполнятся скрипт необходимых прав для записи файлов»

    и литературу))

    я powershell ничего не знаю

  4. Xaegr Says:

    >разрешить выполнение скриптов в системе
    get-help about_Execution_Policies

    >наличие у учетной записи под которой будет выполнятся скрипт необходимых прав для записи файлов
    Имеются ввиду обычные разрешения ntfs.

    >и литературу))
    https://xaegr.wordpress.com/poshlinks/🙂

  5. roach Says:

    вот такую ошибку выдает:

    PS C:\scripts> .\MonitorHost.ps1

    Cannot index into a null array.
    At C:\scripts\MonitorHost.ps1:40 char:27
    + if ($State -ne $Table[ <<<< $Key])

  6. roach Says:

    Xaegr помогите написать мониторинг игровой приставки xbox в локальной сети! За деньги! Оплату гарантирую


Обсуждение закрыто.

%d такие блоггеры, как: