Last active
December 9, 2024 14:38
-
-
Save woehrl01/5f50cb311f3ec711f6c776b2cb09c34e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# based on https://gallery.technet.microsoft.com/scriptcenter/Get-FileMetaData-3a7ddea7 | |
function Get-FileMetaData | |
{ | |
<# | |
.SYNOPSIS | |
Get-FileMetaData returns metadata information about a single file. | |
.DESCRIPTION | |
This function will return all metadata information about a specific file. It can be used to access the information stored in the filesystem. | |
.EXAMPLE | |
Get-FileMetaData -File "c:\temp\image.jpg" | |
Get information about an image file. | |
.EXAMPLE | |
Get-FileMetaData -File "c:\temp\image.jpg" | Select Dimensions | |
Show the dimensions of the image. | |
.EXAMPLE | |
Get-ChildItem -Path .\ -Filter *.exe | foreach {Get-FileMetaData -File $_.Name | Select Name,"File version"} | |
Show the file version of all binary files in the current folder. | |
#> | |
param([Parameter(Mandatory=$True)][string]$File = $(throw "Parameter -File is required.")) | |
if(!(Test-Path -Path $File)) | |
{ | |
throw "File does not exist: $File" | |
Exit 1 | |
} | |
$tmp = Get-ChildItem $File | |
$pathname = $tmp.DirectoryName | |
$filename = $tmp.Name | |
$hash = @{} | |
try{ | |
$shellobj = New-Object -ComObject Shell.Application | |
$folderobj = $shellobj.namespace($pathname) | |
$fileobj = $folderobj.parsename($filename) | |
for($i=0; $i -le 294; $i++) | |
{ | |
$name = $folderobj.getDetailsOf($null, $i); | |
if($name){ | |
$value = $folderobj.getDetailsOf($fileobj, $i); | |
if($value){ | |
$hash[$($name)] = $($value) | |
} | |
} | |
} | |
}finally{ | |
if($shellobj){ | |
[System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$shellobj) | out-null | |
} | |
} | |
return New-Object PSObject -Property $hash | |
} | |
Export-ModuleMember -Function Get-FileMetadata |
Another approach to fixing the malformed DateTime's returned ie "Content created". Replace all non digits and use DateTime.ParseExact Method:
Get-FileMetaData -File 'C:\MyExcelFile.xlsx' | Select-Object -Property Name, @{Name="Content created";Expression={[DateTime]::ParseExact(($_.'Content created' -replace "\D"), "ddMMyyyyHHmm", $null)}}
Is there a way to modifiy the metadata of file?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I had a bit of a nightmare with the date parsing for the "Date Taken" due to hidden Unicode values.
Can see the Unicode in VS Code:
So, I wrote a complimentary Parse-Date function :