Powershell:确定进程是 32 位还是 64 位

标签 powershell powershell-3.0

有没有办法确定给定的进程 ID 是用于 32 位进程还是 64 位进程?我正在使用 Powershell v3.0

最佳答案

尝试这个:

Add-Type -MemberDefinition @'
[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool IsWow64Process(
    [In] System.IntPtr hProcess,
    [Out, MarshalAs(UnmanagedType.Bool)] out bool wow64Process);
'@ -Name NativeMethods -Namespace Kernel32

Get-Process -Id $id | Foreach {
    $is32Bit=[int]0 
    if ([Kernel32.NativeMethods]::IsWow64Process($_.Handle, [ref]$is32Bit)) { 
        "$($_.Name) $($_.Id) is $(if ($is32Bit) {'32-bit'} else {'64-bit'})" 
    } 
    else {"IsWow64Process call failed"}
}

应该在此处进行检查以确保操作系统是 64 位,否则所有进程都是 32 位。

关于Powershell:确定进程是 32 位还是 64 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23024659/

相关文章:

windows - 使用 PowerShell 加载文件文件?

powershell - Powershell:检查网络驱动器是否存在,如果不存在,请映射它,然后仔细检查

powershell - 将参数传递给函数

powershell - 用于在Active Directory中提取各种数据字段的Powershell脚本

powershell - 如何在 PowerShell 中通过 FullyQualifiedErrorId 进行捕获?

powershell - Powershell如何将结果同时输出到多个文件中?

wpf - 使用Powershell的Add-type编译WPF Xaml,而不使用PowerBoots

PowerShell:ForEach-Object 的神秘 -RemainingScripts 参数

powershell - Register-EventObject 在监听进程时不更新控制台

powershell - Powershell替换目录路径中所有文件中的特殊字符串