如何使用 Powershell 检查操作系统架构(32 或 64 位)?

ver*_*tti 4 windows powershell

我正在编写一个 Powershell 脚本,它将集成到为 32 位 Windows 计算机设计的产品中。因此,在调用时,它默认会在 x86 Powershell 上运行,甚至在 64 位计算机上也是如此。我尝试使用[System.IntPtr]::Size,但输出与同一台计算机上的 Powershell 版本不同。

Powershell(32 位)-

PS D:\powershellScripts>  [System.IntPtr]::Size    
4
Run Code Online (Sandbox Code Playgroud)

在同一台机器上的 Powershell(64 位)-

PS D:\powershellScripts> [System.IntPtr]::Size
8
Run Code Online (Sandbox Code Playgroud)

我需要一个独立的解决方案来帮助我区分底层机器的地址大小。

mkl*_*nt0 8

感谢BACON链接到与此答案密切相关的问题,可以使用以下简洁的解决方案,该解决方案适用于32位和 64 位 PowerShell 会话:

$pointerSizeInBytes = (4, 8)[[Environment]::Is64BitOperatingSystem]
Run Code Online (Sandbox Code Playgroud)

[bool]解释为数组索引( ) 的值[int]映射到0( $false) 或1( $true),此处用于从数组中选择适当的值4, 8


这是答案的原始形式,其中可能有一些感兴趣的相关信息:


一个简单的测试,假设您始终从 32 位 PowerShell 实例运行:

$is64Bit = Test-Path C:\Windows\SysNative
Run Code Online (Sandbox Code Playgroud)

64 位系统上的 32 位进程(仅)将 64 位 SYSTEM32 (原文如此)目录视为C:\Windows\SysNative

但是,以下操作适用于32位和 64 位会话

$is64Bit = Test-Path 'Env:ProgramFiles(x86)'
Run Code Online (Sandbox Code Playgroud)

仅在 64 位系统上,自动定义的ProgramFiles(x86)环境变量才会与变量一起存在ProgramFiles

获取操作系统本机指针大小(以字节为单位)

$pointerSizeInBytes = (4, 8)[[bool] ${env:ProgramFiles(x86)}]
Run Code Online (Sandbox Code Playgroud)

${env:ProgramFiles(x86)}使用命名空间变量表示法返回 env 的值。变种 ProgramFiles(x86)直接地; 将字符串值转换为仅[bool]返回非空字符串;a解释为数组索引( ) 映射到( ) 或( ),此处用于从数组中选择适当的值。$true[bool][int]0$false1$true4, 8