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)
我需要一个独立的解决方案来帮助我区分底层机器的地址大小。
感谢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
| 归档时间: |
|
| 查看次数: |
7009 次 |
| 最近记录: |