Перечисление свойств файлов в PowerShell
Я видел биты этого в других вопросах, но я ищу общий способ написать функцию, которая возьмет файл и перечислит его свойства таким образом, чтобы их можно было использовать. Я знаю о функции под названием Get-ItemProperty
, но она не перечисляет свойства, которые я ищу (например, задано a .avi файл, он не скажет мне длину, ширину кадра и т. д.).
Я использую функцию неправильно (все, что я делаю, это: Get-ItemProperty file
) или я должен сделать это по-другому?
I хотите иметь возможность сказать что-то вроде $a += $file.Длина или что-то в этом роде для произвольных свойств.
1 ответ:
Похоже, вы ищете расширенные атрибуты файла. Они не хранятся в
System.IO.FileInfo
.Один способ заключается в использовании
Shell.Application
COM-объекта. Вот пример кода:Допустим, у вас был видеофайл: 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)