Hi,
based on this stackoverflow post I’ve written a powershell function to determine the image type of an Windows executable. The Powershells System.IO.FileSystemInfo type does not provide such an info.
function fGetImageArchitecture([string]$sFilePath)
{
# dos header is 64 bytes, last element, long (4 bytes) is the address of the PE header
[int32]$MACHINE_ARCH_LENGTH = 4
[int32]$PE_POINTER_OFFSET = 60
[byte[]]$aData = New-Object System.Byte[] 4096
$oFileStream = New-Object -TypeName System.IO.FileStream($sFilePath, [System.IO.FileMode]::Open,[System.IO.FileAccess]::Read)
$oFileStream.Read($aData, 0, 4096) | Out-Null
[int32]$PE_HEADER_ADDR = [System.BitConverter]::ToInt32($aData, $PE_POINTER_OFFSET)
[int32]$uiArch = [System.BitConverter]::ToUInt16($aData, $PE_HEADER_ADDR + $MACHINE_ARCH_LENGTH)
switch ($uiArch) {
0 { return "Native" }
0x014c { return "x86" }
0x0200 { return "Itanium" }
0x8664 { return "x64" }
default {return "unknown"}
}
}
The function needs the input file as parameter and return the image type as string
PS D:\fGetImageArchitecture $ENV:SYSTEMROOT\regedit.exe x64
Michael