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 |