iNNOKENTIY21
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Кодировка файла: UTF-8 with BOM Код: <# .SYNOPSIS Получение свойств файлов .DESCRIPTION Получение свойств файлов, shell windows .PARAMETER Path Полное имя файла/папки для которых необходимо получить свойства (по умолчанию текущая директория $PWD) .PARAMETER Id Идентификатор свойства .PARAMETER Force Переключатель. Выводить скрытые/системные… .PARAMETER List Вывести только список расширенных свойств .EXAMPLE C:\PS> .\Get-FileInfo.ps1 -Id 10 | Format-Table Name, Length, Владелец Получить дополнительное свойство "Владелец" у всех файлов в текущей папке и отобразить свойства (Name, Length, Владелец) в виде таблицы. .EXAMPLE C:\PS> .\Get-FileInfo.ps1 | Format-List * Получить доступные свойства у всех файлов в текущей папке и вывести их в виде списка. .EXAMPLE C:\PS> ..\Get-FileInfo.ps1 -List Получить только список свойств (Идентификатор свойства, Название свойства) .NOTES Автор: iNNOKENTIY21 #> param ( # Полный путь к папке [ValidateNotNullOrEmpty()] [ValidateScript( { Test-Path -Path $_ } )] [string] $Path = $PWD, # Идентификатор свойства [int[]] $Id = @(0..([int16]::MaxValue)), # Включить скрытые/системные файлы/папки [switch] $Force, # Вывести только список расширенных свойств [switch] $List ) function Get-List { if (Test-Path -LiteralPath $Path -PathType Container) { $Folder = $ShellApp.Namespace($Path) } else { $Folder = $ShellApp.Namespace((Split-Path -LiteralPath $Path)) } foreach ($Item in $Id) { $Name = $Folder.GetDetailsOf($null, $Item) if (!$Name) { break } [PSCustomObject] @{ Id = $Item Name = $Name } } } function Get-Info { if (Test-Path -LiteralPath $Path -PathType Container) { $Params = @{ LiteralPath = $Path File = $true Force = $Force } $Folder = $ShellApp.Namespace($Path) $Files = Get-ChildItem @Params # Спрашивать, если много файлов? } else { $Files = Get-Item -LiteralPath $Path $Folder = $ShellApp.Namespace((Split-Path -LiteralPath $Path)) } foreach ($File in $Files) { $FileName = $Folder.ParseName($File.Name) foreach ($Item in $Id) { $Name = ($Folder.GetDetailsOf($null, $Item)) $Value = ($Folder.GetDetailsOf($FileName, $Item)) if ($Name -and $Value) { $File | Add-Member -MemberType NoteProperty -Name $Name -Value $Value } } $File } } $ShellApp = New-Object -ComObject Shell.Application if ($List) { Get-List Exit } Get-Info |
|