Перечисление свойств файлов в PowerShell


Я видел биты этого в других вопросах, но я ищу общий способ написать функцию, которая возьмет файл и перечислит его свойства таким образом, чтобы их можно было использовать. Я знаю о функции под названием Get-ItemProperty, но она не перечисляет свойства, которые я ищу (например, задано a .avi файл, он не скажет мне длину, ширину кадра и т. д.).

Я использую функцию неправильно (все, что я делаю, это: Get-ItemProperty file) или я должен сделать это по-другому?

I хотите иметь возможность сказать что-то вроде $a += $file.Длина или что-то в этом роде для произвольных свойств.

1 5

1 ответ:

Похоже, вы ищете расширенные атрибуты файла. Они не хранятся в System.IO.FileInfo.

Один способ заключается в использовании Shell.Application COM-объекта. Вот пример кода:

Http://web.archive.org/web/20160201231836/http://powershell.com/cs/blogs/tobias/archive/2011/01/07/organizing-videos-and-music.aspx

Допустим, у вас был видеофайл: C:\video.wmv

$path = 'C:\video.wmv'
$shell = New-Object -COMObject Shell.Application
$folder = Split-Path $path
$file = Split-Path $path -Leaf
$shellfolder = $shell.Namespace($folder)
$shellfile = $shellfolder.ParseName($file)

Вам необходимо знать, каков идентификатор расширенного атрибута. Это покажет вам все ID:

0..287 | Foreach-Object { '{0} = {1}' -f $_, $shellfolder.GetDetailsOf($null, $_) }

Как только вы найдете тот, который вам нужен, вы можете получить к нему доступ следующим образом:

$shellfolder.GetDetailsOf($shellfile, 216)