GetUptime.psm1
Function Get-Uptime { <# Created by: Brian Bilz Date: 11/17/2015 #> [CmdletBinding()] Param([parameter(ValueFromPipeline=$True)][alias("cn")] [string[]]$ComputerName='localhost') Begin { $Objects = @() } Process { ForEach ( $Name in $ComputerName ) { Try { $Wmi = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $name -ea stop $Uptime = $Wmi.ConvertToDateTime($Wmi.LocalDateTime) – $Wmi.ConvertToDateTime($Wmi.LastBootUpTime) $Object = New-Object psobject $object.PSObject.TypeNames.Insert(0,'System.Uptime') $Object | Add-Member -Name ComputerName -MemberType NoteProperty -Value $Name $Object | Add-Member -Name Days -MemberType NoteProperty -Value $Uptime.Days $Object | Add-Member -Name Hours -MemberType NoteProperty -Value $Uptime.Hours $Object | Add-Member -Name Minutes -MemberType NoteProperty -Value $Uptime.Minutes $Object | Add-Member -Name Seconds -MemberType NoteProperty -Value $Uptime.Seconds $defaultDisplaySet = 'ComputerName','Days','Hours','Minutes','Seconds' $defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet(‘DefaultDisplayPropertySet’,[string[]]$defaultDisplaySet) $PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet) $object | Add-Member MemberSet PSStandardMembers $PSStandardMembers $Object } Catch { $Object = New-Object psobject $object.PSObject.TypeNames.Insert(0,'System.Uptime') $Object | Add-Member -Name ComputerName -MemberType NoteProperty -Value $Name $Object | Add-Member -Name Days -MemberType NoteProperty -Value 'ERROR' $Object | Add-Member -Name Hours -MemberType NoteProperty -Value 'ERROR' $Object | Add-Member -Name Minutes -MemberType NoteProperty -Value 'ERROR' $Object | Add-Member -Name Seconds -MemberType NoteProperty -Value 'ERROR' $defaultDisplaySet = 'ComputerName','Days','Hours','Minutes','Seconds' $defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet(‘DefaultDisplayPropertySet’,[string[]]$defaultDisplaySet) $PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet) $object | Add-Member MemberSet PSStandardMembers $PSStandardMembers $Object } } } } Function Get-LastStartTime { [CmdletBinding()] Param([parameter(ValueFromPipeline=$True)][alias("cn")] [string[]]$ComputerName='localhost') Process { ForEach ( $Name in $Computername ) { Try { $uptime = Get-Uptime $Name $Object = New-Object psobject $Object.PSObject.TypeNames.Insert(0,'System.StartTime') $Object | Add-Member -Name ComputerName -MemberType NoteProperty -Value $Name $Object | Add-Member -Name Starttime -MemberType NoteProperty -Value (get-date).AddDays(-$uptime.Days).AddHours(-$uptime.Hours).AddMinutes(-$uptime.minutes).AddSeconds(-$uptime.Seconds) $Object } Catch { Write-Output "Start time not available for $Name." } } } } New-Alias gup Get-Uptime New-Alias gst Get-LastStartTime Export-ModuleMember -Function Get-Uptime, Get-LastStartTime -Alias gup, gst |