Function Get-Uptime { [CmdletBinding()] Param ( [Parameter( ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0)] [string[]] $ComputerName = $env:COMPUTERNAME ) BEGIN {} PROCESS { Foreach ($Computer in $ComputerName) { $Computer = $Computer.ToUpper() Try { $OS = Get-WmiObject Win32_OperatingSystem -ComputerName $Computer -ErrorAction Stop $Uptime = (Get-Date) - $OS.ConvertToDateTime($OS.LastBootUpTime) [PSCustomObject]@{ ComputerName = $Computer LastBoot = $OS.ConvertToDateTime($OS.LastBootUpTime) Uptime = ([String]$Uptime.Days + " Days " + $Uptime.Hours + " Hours " + $Uptime.Minutes + " Minutes") } } catch { [PSCustomObject]@{ ComputerName = $Computer LastBoot = "Unable to Connect" Uptime = $_.Exception.Message.Split('.')[0] } } finally { $null = $OS $null = $Uptime } } } END {} } $allComputers=Get-Content -Path C:\temp\pc.txt foreach($computer in $allComputers) { $Reboots = Get-Uptime -ComputerName $computer #Sorting by Lastboot time. $Reboots | Sort-Object LastBoot }