ExeTools.psm1
#requires -Version 7.0 function Get-ExeHeader() { [CmdletBinding()] param ( [Parameter(ValueFromPipeline = $true)] [System.IO.FileInfo]$Path = "*.exe" ) process { Get-ChildItem -ErrorAction SilentlyContinue $Path | ForEach-Object { $stream = $_.OpenRead() $reader = New-Object System.Reflection.PortableExecutable.PEHeaders $stream $header = $reader.CoffHeader $stream.Dispose() [PSCustomObject]@{ Path = $_.FullName Machine = $header.Machine NumberOfSections = $header.NumberOfSections NumberOfSymbols = $header.NumberOfSymbols TimeDateStamp = $header.TimeDateStamp PointerToSymbolTable = $header.PointerToSymbolTable SizeOfOptionalHeader = $header.SizeOfOptionalHeader Characteristics = $header.Characteristics } } } } function Get-ExeArchitecture { [CmdletBinding()] param ( [Parameter(ValueFromPipeline = $true)] [System.IO.FileInfo]$Path = "*.exe" ) process { Get-ExeHeader $Path | Select-Object @{n = "Architecture"; e = { $_.Machine } }, Path } } Export-ModuleMember -Function Get-ExeArchitecture, Get-ExeHeader |