Благодаря ссылке BACON на тесно связанный вопрос с этим ответом возможно следующее краткое решение, которое работает от обоих 32-битных и 64-разрядные сеансы PowerShell:
$pointerSizeInBytes = (4, 8)[[Environment]::Is64BitOperatingSystem]
A [bool]
значение, интерпретируемое как индекс массива ([int]
), сопоставляется либо с 0
($false
) ) или 1
($true
), который используется здесь для выбора подходящего значения из массива 4, 8
.
Вот исходная форма ответа, которая может иметь некоторые Интересующая информация:
Простой тест, предполагая, что вы всегда работаете с 32-разрядным экземпляром PowerShell:
$is64Bit = Test-Path C:\Windows\SysNative
32-битные процессы (только) в 64-битных системах видят каталог 64-битной SYSTEM32 (si c) как C:\Windows\SysNative
Однако, следующий работает с и 32-разрядные и 64-разрядные сеансы :
$is64Bit = Test-Path 'Env:ProgramFiles(x86)'
Только в 64-разрядных системах автоматически определенная ProgramFiles(x86)
переменная среда может изменяться Он существует вместе с переменной ProgramFiles
.
К получить собственный размер указателя ОС в байтах :
$pointerSizeInBytes = (4, 8)[[bool] ${env:ProgramFiles(x86)}]
${env:ProgramFiles(x86)}
использует обозначение переменной пространства имен для возврата значения env. вар. ProgramFiles(x86)
напрямую; приведение строкового значения к [bool]
возвращает $true
только для непустых строк; [bool]
интерпретируется как индекс массива ([int]
) сопоставляется либо с 0
($false
), либо с 1
($true
), который используется здесь для выбора подходящего значения из массива 4, 8
.