PowerShell: determinare i metadati di un file

Nel caso sia necessario accedere ai metadati di un file, ovvero a quelle informazioni visualizzate nella scheda Dettagli delle proprietà di un file è possibile utilizzare il metodo GetDetailsOf di un oggetto Shell.Application.

Il metodo GetDetailsOf ha i seguenti due parametri come indicato in Folder.GetDetailsOf method (Shlobj\_core.h) – Win32 apps | Microsoft Learn:

vItem

Type: Variant

The item for which to retrieve the information. This must be a FolderItem object.

iColumn

Type: Integer

An Integer value that specifies the information to be retrieved. The information available for an item depends on the folder in which it is displayed. This value corresponds to the zero-based column number that is displayed in a Shell view.

Il parametro iColumn ha come valore minimo -1 (che permette di recuperare le informazioni sul suggerimento per l’elemento). Per quanto riguarda il valore massimo di iColumn, non esiste un valore massimo definito. Il numero di informazioni disponibili dipende dal tipo di cartella e dalle estensioni della shell installate.

Di seguito un esempio di codice PowerShell per visualizzare i metadati che hanno valori non nulli iterando i valori di  iColumn da -1 a 0xFFFF:

$filePath = “C:\Sample\test.exe”

$shellApp = New-Object -ComObject Shell.Application
$folderObject = $shellApp.NameSpace((Get-Item $filePath).DirectoryName)
$fileObject = $folderObject.Items().Item((Get-Item $filePath).Name)

for ($i = -1; $i -lt 0xFFFF; $i++) {

  $propertyName = $folderObject.GetDetailsOf($null, $i)
  $propertyValue = $folderObject.GetDetailsOf($fileObject, $i)

  if ($propertyValue) {
    Write-Host “[$i] $propertyName = $propertyValue”
  }
}

Di seguito un esempio di output

Come si può vedere i metadati ottenuti all’incirca quelli disponibili nella scheda Dettagli delle proprietà dei file, ad esempio mancano le proprietà Tag e Numero revisione e ve ne sono alcune che nella scheda Dettagli non compaiono, ma il linea di massima è possibile ritrovare quelle di uso generale.

A riguardo si vedano anche: