В этом сценарии я могу получить дату для ярлыков, но в формате ГГГГММДД (и время). Я иду за ММ / дд / гггг. Я пробовал несколько предложений из Интернета, но все они приводят к ошибкам, возможно, из-за типа полей. Проверьте создание, последнее изменение и дату установки. Если вы удалите мои попытки форматирования даты, скрипт будет работать нормально. Любые идеи будут оценены.

$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"

1 ответ1

1

Что происходит, так это то, что метки даты / времени, возвращаемые из WMI, возвращаются как строки;

$objItem.CreationDate.GetType().FullName возвращает System.String как это тип.

Вот почему .ToString() и другие варианты форматирования даты не работают, когда вы пытаетесь отформатировать их, как если бы они были датой.

Поэтому вам необходимо преобразовать его из типа String в тип DateTime, который затем можно преобразовать обратно в (отформатированную) строку ...

Удобно, что сам объект WMI ($objItem в цикле ForEach) предоставляет метод для преобразования строковых меток даты / времени WMI в фактические и системные значения.DateTime:

$objItem.ConvertToDateTime($objItem.CreationDate)

Затем вы можете преобразовать это (обратно) в форматированную строку, используя ToString. Например:

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

Убедитесь, что вы избегаете любых косых черт в строке формата даты, иначе Windows не будет включать их в возвращаемую строку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .