如何在PowerShell中检查要安装的可执行文件是32位还是64位?

时间:2016-09-14 11:53:03

标签: powershell

如何在PowerShell中检查要安装的可执行文件是32位还是64位?

PowerShell中是否有任何预定义的功能来执行此操作?

1 个答案:

答案 0 :(得分:2)

PowerShell有许多高级PE header解析器。

这是一个简单的函数,只读取Machine Type字段:

function Is64bit([string]$path) {
    try {
        $stream = [IO.File]::OpenRead($path)
    } catch {
        throw "Cannot open file $path"
    }
    $reader = [IO.BinaryReader]$stream

    if ($reader.ReadChars(2) -join '' -ne 'MZ') { throw 'Not an executable' }

    $stream.position = 0x3C
    $stream.position = $reader.ReadUInt32() # go to COFF
    if ($reader.ReadUInt32() -ne 0x00004550) { throw 'Not a PE executable' }

    return $reader.ReadUInt16() -eq 0x8664 # machine type
}

用法:

Is64bit C:\Windows\explorer.exe