92 lines
2.8 KiB
PowerShell
92 lines
2.8 KiB
PowerShell
|
|
$ip = "192.168.3.102"
|
|||
|
|
$url = "http://$ip/zabbix/api_jsonrpc.php"
|
|||
|
|
$token = "914ee100f4e8c4b68a70eab2a0a1fb153cfcd4905421d0ffacb82c20a57aa50e"
|
|||
|
|
|
|||
|
|
function ConvertFrom-UnixTime {
|
|||
|
|
param (
|
|||
|
|
$intime
|
|||
|
|
)
|
|||
|
|
$EpochTime = [DateTime]"1/1/1970"
|
|||
|
|
$TimeZone = Get-TimeZone
|
|||
|
|
$UTCTime = $EpochTime.AddSeconds($intime)
|
|||
|
|
$UTCTime.AddMinutes($TimeZone.BaseUtcOffset.TotalMinutes)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function ConvertTo-TimeSpan {
|
|||
|
|
param (
|
|||
|
|
$insec
|
|||
|
|
)
|
|||
|
|
$TimeSpan = [TimeSpan]::fromseconds($insec)
|
|||
|
|
"{0:dd' day 'hh\:mm\:ss}" -f $TimeSpan
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
### Получить список всех хостов (имя и id)
|
|||
|
|
$data = @{
|
|||
|
|
"jsonrpc"="2.0";
|
|||
|
|
"method"="host.get";
|
|||
|
|
"params"=@{
|
|||
|
|
"output"=@(
|
|||
|
|
"hostid";
|
|||
|
|
"host";
|
|||
|
|
);
|
|||
|
|
};
|
|||
|
|
"id"=2;
|
|||
|
|
"auth"=$token;
|
|||
|
|
}
|
|||
|
|
$hosts = (Invoke-RestMethod -Method POST -Uri $url -Body ($data | ConvertTo-Json) -ContentType "application/json").Result
|
|||
|
|
|
|||
|
|
### Получить id элемента данных по наименованию ключа для каждого хоста
|
|||
|
|
$Collections = New-Object System.Collections.Generic.List[System.Object]
|
|||
|
|
foreach ($h in $hosts) {
|
|||
|
|
$data = @{
|
|||
|
|
"jsonrpc"="2.0";
|
|||
|
|
"method"="item.get";
|
|||
|
|
"params"=@{
|
|||
|
|
"hostids"=@($h.hostid);
|
|||
|
|
};
|
|||
|
|
"auth"=$token;
|
|||
|
|
"id"=1;
|
|||
|
|
}
|
|||
|
|
$items = (Invoke-RestMethod -Method POST -Uri $url -Body ($data | ConvertTo-Json) -ContentType "application/json").Result
|
|||
|
|
$items_id = ($items | Where-Object key_ -match system.uptime).itemid
|
|||
|
|
if ($items_id -ne $null) {
|
|||
|
|
$Collections.Add([PSCustomObject]@{
|
|||
|
|
host = $h.host;
|
|||
|
|
hostid = $h.hostid;
|
|||
|
|
item_id_uptime = $items_id
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
### Получить всю историю элемента данных по его id для каждого хоста
|
|||
|
|
$Collections_output = New-Object System.Collections.Generic.List[System.Object]
|
|||
|
|
foreach ($c in $Collections) {
|
|||
|
|
$data = @{
|
|||
|
|
"jsonrpc"="2.0";
|
|||
|
|
"method"="history.get";
|
|||
|
|
"params"=@{
|
|||
|
|
"hostids"=$c.hostid;
|
|||
|
|
"itemids"=$c.item_id_uptime;
|
|||
|
|
};
|
|||
|
|
"auth"=$token;
|
|||
|
|
"id"=1;
|
|||
|
|
}
|
|||
|
|
$items_data_uptime = (Invoke-RestMethod -Method POST -Uri $url -Body ($data | ConvertTo-Json) -ContentType "application/json").Result
|
|||
|
|
|
|||
|
|
### Convert Secconds To TimeSpan and DateTime
|
|||
|
|
$sec = $items_data_uptime.value
|
|||
|
|
$UpTime = ConvertTo-TimeSpan $sec[-1]
|
|||
|
|
|
|||
|
|
### Convert From Unix Time
|
|||
|
|
$time = $items_data_uptime.clock
|
|||
|
|
$GetDataTime = ConvertFrom-UnixTime $time[-1]
|
|||
|
|
|
|||
|
|
$Collections_output.Add([PSCustomObject]@{
|
|||
|
|
host = $c.host;
|
|||
|
|
hostid = $c.hostid;
|
|||
|
|
item_id_uptime = $c.item_id_uptime;
|
|||
|
|
GetDataTime = $GetDataTime
|
|||
|
|
UpTime = $UpTime
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
$Collections_output | Format-Table
|