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