Aaron
Aaron

Reputation: 3325

Powershell last bootup time of computer showing two different outputs

$OSInfo = get-wmiobject -class win32_operatingsystem -computername c83323

($OSInfo `
    | Format-List `
        @{Name="OS Boot Time";Expression={$_.ConvertToDateTime($_.LastBootUpTime)}} `
    | Out-String).Trim() #Output OS Name, Boot Time, and Install Date

output --> OS Boot Time : 12/6/2016 4:09:20 PM

$osinfo = get-wmiobject -class win32_operatingsystem -computername c83323
    $osinfo.ConvertToDateTime($osinfo.LastBootUpTime)

output --> Tuesday, December 06, 2016 4:09:20 PM

Why is it when I run the first set, I get time in one way, but when I run it the 2nd way, I get it in a completely different format?

Upvotes: 1

Views: 830

Answers (2)

Prageeth Saravanan
Prageeth Saravanan

Reputation: 1063

The output of your second instance will be in DateTime type. This format depends on the datetime format you have Choosen on your system. I modified your code to get the type:

$osinfo = get-wmiobject -class win32_operatingsystem; ($osinfo.ConvertToDateTime($osinfo.LastBootUpTime)).GetType()

But in your first instance, you use something called a calculated property (check this link) , which basically let you "Format" and display attributes in the way you prefer. In your case, thru the expression you have provided your date and time had converted into an array and hence it lost its format.

Get type:

($OSInfo | Format-List @{Name="OS Boot Time";Expression={$_.ConvertToDateTime($_.LastBootUpTime)}}).GetType()

The above type would be an array.

EDIT:

Below snippet should do the trick!

@("Computer1","Computer2") | foreach { 
    $OSInfo = get-wmiobject -class win32_operatingsystem -computername $_;
    "Boot time for Computer: $_ = " + $OSInfo.ConvertToDateTime($OSInfo.LastBootUpTime);    
} | Out-File "C:\thefolderYouPrefer\boottime.txt"

Upvotes: 1

Bill_Stewart
Bill_Stewart

Reputation: 24585

This is because you are using Format-List and/or Out-String in the first case. When using these, PowerShell formats the DateTime object's output, just as if you wrote this:

"$(Get-Date)"

Upvotes: 3

Related Questions