Перечислить свойства файла в PowerShell - PullRequest
5 голосов
/ 23 февраля 2012

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

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

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

1 Ответ

13 голосов
/ 23 февраля 2012

Похоже, вы ищете расширенные атрибуты файла. Они не хранятся в 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)

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

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

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

$shellfolder.GetDetailsOf($shellfile, 216)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...