Como formatar um campo de data no powershell?

0

Neste script, posso obter a data dos atalhos, mas está no formato AAAAMMDD (e hora). Eu estou indo para MM / dd / aaaa. Eu tentei várias sugestões da web, mas tudo resultou em erros, talvez por causa do tipo de campos. Verifique a criação, a última modificação e a data de instalação. Se você remover minhas tentativas de formatação de data, o script será executado corretamente. Qualquer ideia será apreciada.

$strComputer = "." 

$colItems = get-wmiobject -class "Win32_ShortcutFile" -namespace "root\CIMV2" ' 
-computername $strComputer 

foreach ($objItem in $colItems) { 
#      write-host "Access Mask: " $objItem.AccessMask 
#      write-host "Archive: " $objItem.Archive 
#      write-host "Caption: " $objItem.Caption 
#      write-host "Compressed: " $objItem.Compressed 
#      write-host "Compression Method: " $objItem.CompressionMethod 
#      write-host "Creation Class Name: " $objItem.CreationClassName 

#      write-host "CS Creation Class Name: " $objItem.CSCreationClassName 
#      write-host "CS Name: " $objItem.CSName 

#      write-host "Drive: " $objItem.Drive 
#      write-host "8.3 File Name: " $objItem.EightDotThreeFileName 
#      write-host "Encrypted: " $objItem.Encrypted 
#      write-host "Encryption Method: " $objItem.EncryptionMethod 
#      write-host "Extension: " $objItem.Extension 
      write-host "File Name: " $objItem.FileName 
      write-host "Description: " $objItem.Description 
      write-host "Creation Date: " $objItem.CreationDate -Format 'MM/dd/yyyy'
      write-host "File Size: " $objItem.FileSize 
      write-host "File Type: " $objItem.FileType 
#      write-host "FS Creation Class Name: " $objItem.FSCreationClassName 
#      write-host "FS Name: " $objItem.FSName 
#      write-host "Hidden: " $objItem.Hidden 
      write-host "Installation Date: " $objItem.InstallDate -Format 'dd/MM/yyyy'
#      write-host "In Use Count: " $objItem.InUseCount 
      write-host "Last Accessed:  $objItem.LastAccessed.ToString("MM/dd/yyyy")
      write-host "Last Modified:  $objItem.LastModified.ToString("MM/dd/yyyy")
#      write-host "Manufacturer: " $objItem.Manufacturer 
      write-host "Name: " $objItem.Name 
      write-host "Path: " $objItem.Path 
#      write-host "Readable: " $objItem.Readable 
      write-host "Status: " $objItem.Status 
      write-host "System: " $objItem.System 
      write-host "Target: " $objItem.Target 
#      write-host "Version: " $objItem.Version 
#      write-host "Writeable: " $objItem.Writeable 
      write-host 
} 
echo "Done"
    
por JCauble 03.06.2016 / 21:16

1 resposta

1

O que está acontecendo é que os carimbos de data / hora retornados do WMI são retornados como Strings;

$objItem.CreationDate.GetType().FullName retorna System.String como seu tipo.

É por isso que .ToString() e outras variações de formatação de data estão falhando quando você tenta formatá-las como se fossem uma data.

Então, você precisa convertê-lo de um tipo String para o tipo DateTime, que pode ser convertido de volta em uma String (formatada) ...

Com cuidado, o próprio objeto WMI ( $objItem em seu loop ForEach) fornece um método para converter os carimbos de data / hora da cadeia WMI em real e System.DateTime:

$objItem.ConvertToDateTime($objItem.CreationDate)

Você pode converter isso (voltar) para uma string formatada usando ToString. Por exemplo:

Write-host "Creation Date: " $objItem.ConvertToDateTime($objItem.CreationDate).ToString('MM\/dd\/yyyy')

Garanta que você escape de barras normais na string de formato de data ou do Windows não os incluirá na string retornada.

    
por 03.06.2016 / 21:51