server UP time in % in a month


hi 

i have below script server time details in percentage in 1 month.

this sript running fine single server. need bulk servers data in csv inputfile below

servername

server1
server2
server3

please me script output in csv file querying input file:

#################script############3

param($numberofdays = 30, [switch]$debug)

if($debug) { $debugpreference = " continue" }

[timespan]$uptime = new-timespan -start 0 -end 0
$currenttime = get-date
$startupid = 6005
$shutdownid = 6006
$minutesinperiod = (24*60)*$numberofdays
$startingdate = (get-date -hour 00 -minute 00 -second 00).adddays(-$numberofdays)

write-debug "'$uptime $uptime" ; start-sleep -s 1
write-debug "'$currenttime $currenttime" ; start-sleep -s 1
write-debug "'$startingdate $startingdate" ; start-sleep -s 1

$events = get-eventlog -logname system | 
where-object { $_.eventid -eq  $startupid -or $_.eventid -eq $shutdownid `
  -and $_.timegenerated -ge $startingdate } 

write-debug "'$events $($events)" ; start-sleep -s 1

$sortedlist = new-object system.collections.sortedlist

foreach($event in $events)
{
 $sortedlist.add( $event.timegenerated, $event.eventid )
} #end foreach event
$uptime = $currenttime - $sortedlist.keys[$($sortedlist.keys.count-1)]
write-debug "current uptime $uptime"

for($item = $sortedlist.count-2 ; $item -ge 0 ; $item -- )

 write-debug "$item `t `t $($sortedlist.getbyindex($item)) `t `
   $($sortedlist.keys[$item])" 
 if($sortedlist.getbyindex($item) -eq $startupid)
 {
  $uptime += ($sortedlist.keys[$item+1] - $sortedlist.keys[$item])
  write-debug "adding uptime. `t uptime now: $uptime"
 } #end if  
} #end item 

"total time on $env:computername since $startingdate " + "{0:n2}" -f `
  $uptime.totalminutes + " minutes."
$uptimeminutes = $uptime.totalminutes
$percentdowntime = "{0:n2}" -f (100 - ($uptimeminutes/$minutesinperiod)*100)
$percentuptime = 100 - $percentdowntime

"$percentdowntime% downtime , $percentuptime% uptime."

###################

mr raj not technician. posts here script has found people rewrite them him.

mr. raj.  when going learn how edit simple script.

mike shoed how enumerate file of names need learn how use call script.  cannot shoehorn example script , say it doesn't work.  error message clear. "param" statement see how used.

import-csv .\serverlist.csv | foreach {

   
 .\serveruptime.ps1 -computername $_.servername
}

now fix script has parameter computername.

param(
    $computername,
    $numberofdays = 30,
    [switch]$debug
)

the rest have muddle through.  time figure out have learned how write script.

i don't think mike wants rewrite you.




¯\_(ツ)_/¯





Windows Server  >  Windows PowerShell



Comments

Popular posts from this blog

Edit Group Policy

Hyper-V VM not reaching OS 'Logon' screen

DNS question...