PSCustomObject convert install date

Welcome Forums General PowerShell Q&A PSCustomObject convert install date

This topic contains 8 replies, has 4 voices, and was last updated by

 
Participant
3 years, 8 months ago.

  • Author
    Posts
  • #27939

    Participant
    Points: 0
    Rank: Member

    I've been trying to figure something out now for a day and can't find a solution.

    So the below code is to create customobject of Application name and date of install.

    $application = (Get-WmiObject -Namespace ROOT\cimv2 -class Win32Reg_AddRemovePrograms) | 
    ForEach-Object {[PSCustomObject]@{Applications = $_.Displayname; InstallofApplication = $_.installdate}}
    

    I really want to convert the format of the date from 20150511 to dd/MM/yyyy.
    Ive tried

     [DateTime]::ParseExact($_.installdate,"yyyyMMdd",$NULL) 

    but can't get it to work. Drive me mad !

  • #27940

    Participant
    Points: 41
    Rank: Member

    Try it like this:

    $application = (Get-WmiObject -Namespace ROOT\cimv2 -class Win32Reg_AddRemovePrograms) | 
        ForEach-Object { [PSCustomObject]@{
            Applications = $_.Displayname; 
            InstallofApplication = Get-Date ([datetime]::ParseExact($_.InstallDate,'yyyyMMdd',$null)) -format d}}
    
  • #27941

    Participant
    Points: 0
    Rank: Member

    First off – are you sure you have the correct class? Win32Reg_AddRemoveprograms only exists if you have the SCCM client installed.

    In terms of date conversion. The WMI cmdlets return dates in WMI's format
    £> Get-WmiObject -Class Win32_OperatingSystem | select *date* | fl

    InstallDate : 20131205101649.000000+000
    LocalDateTime : 20150728121320.002000+060

    A method to convert dates is added to all objects returned by Get-WmiObject

    £> Get-WmiObject -Class Win32_OperatingSystem | select @{N='Install'; E={$_.ConvertToDateTime($_.Installdate)}}, @{N='Lo
    calDate'; E={$_.ConvertToDateTime($_.LocalDateTime)}} | fl

    Install : 05/12/2013 10:16:49
    LocalDate : 28/07/2015 12:16:26

    Alternatively (and easier) use the CIM cmdlets as the date comes pre-converted
    £> Get-CimInstance -ClassName Win32_OperatingSystem | select *date* | fl

    InstallDate : 05/12/2013 10:16:49
    LocalDateTime : 28/07/2015 12:17:29
    |

  • #27942

    Participant
    Points: 0
    Rank: Member

    Hi Richard,

    Yes its for an SCCM client.

    I will have a play with both your solutions, Many thanks for your quick replies ! 🙂

  • #27944

    Participant
    Points: 0
    Rank: Member

    Hi Richard,

    Doing Get-CIMInstance -ClassName Win32Reg_AddRemoveprograms doesn't return the date in the correct format.

    Also, don't think i'm doing something write here,

    $application = (Get-WmiObject -Namespace ROOT\cimv2 -class Win32Reg_AddRemovePrograms) | select  @{N='Install'; E={$_.ConvertToDateTime($_.Installdate)}
    
  • #27948

    Participant
    Points: 0
    Rank: Member

    See if this works:

    Get-WmiObject -Namespace ROOT\cimv2 -class Win32Reg_AddRemovePrograms | select displayname, @{l="Installdate";e={([DateTime]::ParseExact($_.InstallDate,'yyyyMMdd',$null).ToString('MM/dd/yyyy'))}}

  • #27976

    Participant
    Points: 0
    Rank: Member

    So by doing this:

    $application = Get-WmiObject -Namespace ROOT\cimv2 -class Win32Reg_AddRemovePrograms | 
    ForEach-Object { [PSCustomObject]@{
    Applications = $_.Displayname;
    InstallofApplication = get-date ([datetime]::ParseExact($_.InstallDate,'yyyyMMdd',$null)) -Format d }} 
    

    It generates a error :

    Exception calling "ParseExact" with "3" argument(s): "String was not recognized as a valid DateTime."
    At line:4 char:24
    + InstallofApplication = get-date ([datetime]::ParseExact($_.InstallDate,'yyyyMMdd ...
    +                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : FormatException
    

    But strangely the results are correct :

    PS C:\WINDOWS\system32> $application
    
    Applications                                                                         InstallofApplication                                                                
    ------------                                                                         --------------------                                                                
    Microsoft Visual C++ 2010  x64 Redistributable - 10.0.40219                          06/07/2015                                                                          
    Configuration Manager Client                                                         20/07/2015                                                                          
    Microsoft Policy Platform                                                            06/07/2015                                                                          
    Microsoft Visual C++ 2013 x64 Additional Runtime - 12.0.21005                        20/07/2015                                                                          
    Microsoft Visual C++ 2013 x64 Minimum Runtime - 12.0.21005                           20/07/2015                                                                          
    Microsoft Visual C++ 2005 Redistributable (x64)                                      06/07/2015 
    

    Whats going on ? Could there be a hidden header or something ?

  • #27979

    Participant
    Points: 41
    Rank: Member

    What you'll find is that not all of the applications have the InstallDate property populated. Trying to convert the empty string to a date returns an error.

    If you compare the results of

    (Get-WmiObject Win32Reg_AddRemovePrograms).count
    

    With

    $application.count
    

    after running your script, you'll find the ones without dates are missing from the output.

    Methinks some error handling is required.

  • #27980

    Participant
    Points: 0
    Rank: Member

    Matt, think you've hit the problem !

    (Get-WmiObject Win32Reg_AddRemovePrograms).count
    = 7
    
    $application.count
    = 6
    

    Checking between the two, the additional object is "Intel(R) Graphics Media Accelerator Driver".

The topic ‘PSCustomObject convert install date’ is closed to new replies.

denizli escort samsun escort muğla escort ataşehir escort kuşadası escort