Forum Discussion

JagannathaSutaDas's avatar
JagannathaSutaDas
Copper Contributor
Jun 28, 2022

Getting error when trying to format date

Hi Everyone,

I have sourced a script to report on remote Windows servers for when they were last updated, but I seem to be getting an error for two servers only, all the others produce the desired results.

 

New-TimeSpan : Cannot bind parameter 'Start'. Cannot convert value "05/16/2022 08:42:38" to type "System.DateTime". Error: "String was not recognized as a valid DateTime."
At :182 char:40
+ $DaySpan = New-TimeSpan -Start $InstalledOn -End $System
+ ~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [New-TimeSpan], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.NewTimeSpanCommand

 

Code that is indicated as failing

 

$System = (Get-Date -Format d)
$DaySpan = New-TimeSpan -Start $InstalledOn -End $System
$DaySpanDays = $DaySpan.Days

 

I have checked the region for all the servers, these two are no different to the others.

 

Thanks in advance.

  • LainRobertson's avatar
    LainRobertson
    Silver Contributor

    JagannathaSutaDas 

     

    The error is pretty specific: it's saying it cannot automatically parse your value for $InstalledOn - which is a [string] - into a [datetime] object (which is what the -Start parameter expects to receive.)

     

    You don't show how you're populating $InstalledOn but I suppose that doesn't really matter.

     

    You might find this error is due to a different in regional settings. For example, the date you're retrieving is in US format (month, day, year) but perhaps the script is running on a system configured  for something a different region that uses the "day, month, year" format.

     

    You can try that yourself. If this generates the same error:

     

     

    [datetime]::Parse("05/16/2022 08:42:38")

     

     

    But the following works, then it's a difference in region.

     

     

    [datetime]::Parse("16/05/2022 08:42:38")

     

     

    Example output from both the above commands.

     

    Still, once you've resolved this issue with $InstalledOn (there's multiple ways to resolve this), you're just going to run into another error since the assignment to $System on line one makes no sense when you look at how it's being used on line 2.

     

    Here's one possible workaround for your issues. As I said above, I don't know how $InstalledOn is being populated so I'm simply assigning the text value from your error to it.

     

     

    $InstalledOn = [datetime]::ParseExact("05/16/2022 08:42:38", "MM/dd/yyyy h:mm:ss", $null);
    $System = Get-Date;
    $DaySpan = New-TimeSpan -Start $InstalledOn -End $System;
    $DaySpanDays = $DaySpan.Days;
    $DaySpanDays;

     

     

    Which produces the following output.

     

     

    Cheers,

    Lain

     

    Edited to correct a typo.

Resources