# encoding: ascii
# api: csharp
# title: Test-64BitOS
# description: This function will determine whether the local operating system architecture is 64-bit. This has been converted to PowerShell from the original C# code produced by Stefan Schultze
# version: 0.1
# type: class
# author: George Howarth
# license: CC0
# function: Test-64BitOS
# x-poshcode-id: 2018
# x-archived: 2016-03-06T06:27:42
# x-published: 2011-07-23T04:29:00
#
# Thanks Stefan!
#
Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;
public static class Win32Api
{
[DllImport("Kernel32.dll", EntryPoint = "IsWow64Process")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool IsWow64Process(
[In] IntPtr hProcess,
[Out, MarshalAs(UnmanagedType.Bool)] out bool wow64Process
);
}
"@
<#
.SYNOPSIS
Determines whether the architecture of the local operating system is 64-bit.
.DESCRIPTION
The Test-64BitOS function uses the IsWow64Process function to determine whether the process is running under WOW64. It also checks whether the process is 64-bit in this test.
.INPUTS
None
This function does not accept any input.
.OUTPUTS
None
This function does not return any output.
.NOTES
Using this function is more reliable than other methods as the function uses a method provided by the operating system to determine whether the process is running under WOW64.
.EXAMPLE
C:\PS> Test-64BitOS
This example shows how to use the Test-64BitOS function.
.LINK
#>
function Test-64BitOS
{
return (Test-64BitProcess) -or (Test-Wow64)
}
function Test-64BitProcess
{
return [IntPtr]::Size -eq 8
}
function Test-Wow64
{
if ([Environment]::OSVersion.Version.Major -eq 5 -and
[Environment]::OSVersion.Version.Major -ge 1 -or
[Environment]::OSVersion.Version.Major -ge 6)
{
$process = [System.Diagnostics.Process]::GetCurrentProcess()
$wow64Process = $false
if (![Win32Api]::IsWow64Process($process.Handle, [ref]$wow64Process))
{
return $false
}
return $wow64Process
}
else
{
return $false
}
}
Test-64BitOS