Приветствую! Постараюсь на корявом языке объяснить что я хочу реализовать. Если с самого начала... Решил я сделать напоминалку по аптайму win серверов и сделал таки, на powershell. Вроде все довольно красиво и то что мне нужно, но это статические данные и я не могу понять, как мне сделать, чтобы страница на том же IIS обновлялась и не падала... В итоге, подумал о PHP, но поскольку я в нем почти 0, то прошу помощи в реализации. Схема такая: Есть MSSQL сервер, в который записываются данные о серверах. Есть скрипт (на powershell), который собирает данные и формирует HTML код. В итоге, я подумал о такой реализации. По идее, должна быть некая статическая страница, внутри которой была бы форма для отображения динамических данных, которые бы обновлялись каждые 5 минут, например. Т.е. есть страница, назовем ее "Аптайм серверов" а внутри есть код, который запрашивает данные из MSSQL и формирует табличку, которая обновляется каждые 5 минут. Надеюсь понятно написал ) Для примера код на powershell: Код (Text): function sqlQuery ($srvr = 'localhost', $database = 'Services', $userName = 'service', $pass = 'service', $query){ Invoke-Sqlcmd -ServerInstance $srvr -Database $database -Username $userName -Password $pass -Query $query } if (!($session)){ $session = New-PSSession -ComputerName nprdc.radiofid.local Import-Module -PSsession $session -Name ActiveDirectory } $Computers = (Get-ADComputer -Properties * -Filter * | ? { $_.LastLogonDate -gt (Get-Date).AddDays(-35) -and $_.OperatingSystem -match 'server' }) foreach ($srv in $Computers){ $server = $srv.Name $server $uptime, $OfflineTime, $qlQuery = $null, $null, $null if (!(Test-Connection $server -Count 2 -Quiet)){ $OfflineTime = (Get-Date).ToString('dd.MM.yyyy HH:mm:ss') if ((sqlQuery -query "Select Server From Uptimes Where Server = '$server'").Server -eq $null){ sqlQuery -query "Insert into Uptimes (Server, Status, OfflineTime, Uptime) values ('$server', 'Offline', '$OfflineTime', $null)" } if ((sqlQuery -query "Select Status From Uptimes Where Server = '$server'").Status -ne 'Offline'){ $qlQuery = "Update Uptimes Set Status = 'Offline', OfflineTime = '$OfflineTime', Uptime = 'NULL' Where Server = '$server'" sqlQuery -query $qlQuery } } else { $Upttm = (Get-WmiObject -ComputerName $server Win32_OperatingSystem LastBootUpTime).LastBootUpTime $uptime = $Upttm.Substring(0,4) + '.' + $Upttm.Substring(4,2) + '.' + $Upttm.Substring(6,2) + ' ' + $Upttm.Substring(8,2) + ':' + $Upttm.Substring(10,2) + ':' + $Upttm.Substring(12,2) if ((sqlQuery -query "Select Server From Uptimes Where Server = '$server'").Server -eq $null){ sqlQuery -query "Insert into Uptimes (Server, Status, OfflineTime, Uptime) values ('$server', 'Online', 'NULL', '$uptime')" } if ((sqlQuery -query "Select Status From Uptimes Where Server = '$server'").Status -eq 'Offline'){ $qlQuery = "Update Uptimes Set Status = 'Online', OfflineTime = 'NULL', Uptime = '$uptime' Where Server = '$server'" sqlQuery -query $qlQuery } } } (sqlQuery -query "Select Server From Uptimes").Server | % { if(!(Get-ADComputer -Identity $_ -Properties LastLogonDate).LastLogonDate){ sqlQuery -query "Delete From Uptimes Where Server = '$_'" } elseif ((Get-ADComputer -Identity $_ -Properties Enabled).Enabled -like 'False'){ sqlQuery -query "Delete From Uptimes Where Server = '$_'" } }
Средствами JavaScript обновляй страницу, если powershell-ом html-ку генеришь: HTML: <!DOCTYPE html> <html lang="en"> <head> <script> document.write((new Date()).toLocaleString()); setTimeout(function () { document.location.reload(); }, 1000); // 1 second </script> </head> </html>
Вкорячил в свой HTML код: HTML: <script> document.write((new Date()).toLocaleString()); setTimeout(function () { document.location.reload(); }, 1000); // 1 second </script> Вроде норм! --- Добавлено --- если интересно, могу выложить весь код