无法从 32 位进程访问 Win32_WinSAT

2024-03-14

当从 x64 进程请求 Win32_WinSAT 时,我得到正确的结果 (WinSATAssessmentState = 1),但当从 x86 执行时,我得到“结果不可用”(WinSATAssessmentState = 3)

x64 Powershell:

PS C:\Users\alive> gwmi Win32_WinSAT


__GENUS               : 2
__CLASS               : Win32_WinSAT
__SUPERCLASS          :
__DYNASTY             : Win32_WinSAT
__RELPATH             : Win32_WinSAT.TimeTaken="MostRecentAssessment"
__PROPERTY_COUNT      : 8
__DERIVATION          : {}
__SERVER              : COMPNAME
__NAMESPACE           : root\cimv2
__PATH                : \\COMPNAME\root\cimv2:Win32_WinSAT.TimeTaken="MostRecentAssessment"
CPUScore              : 7,2
D3DScore              : 6,3
DiskScore             : 7,65
GraphicsScore         : 4,6
MemoryScore           : 5,9
TimeTaken             : MostRecentAssessment
WinSATAssessmentState : 1
WinSPRLevel           : 4,6
PSComputerName        : COMPNAME

x86 Powershell

PS C:\Users\alive> gwmi Win32_WinSAT


__GENUS               : 2
__CLASS               : Win32_WinSAT
__SUPERCLASS          :
__DYNASTY             : Win32_WinSAT
__RELPATH             : Win32_WinSAT.TimeTaken="MostRecentAssessment"
__PROPERTY_COUNT      : 8
__DERIVATION          : {}
__SERVER              : COMPNAME
__NAMESPACE           : root\cimv2
__PATH                : \\COMPNAME\root\cimv2:Win32_WinSAT.TimeTaken="MostRecentAssessment"
CPUScore              : 0
D3DScore              : 0
DiskScore             : 0
GraphicsScore         : 0
MemoryScore           : 0
TimeTaken             : MostRecentAssessment
WinSATAssessmentState : 3
WinSPRLevel           : 0
PSComputerName        : COMPNAME

是否有任何标志或特殊方法能够从 x86 进程访问此信息?

Thanks.


你的问题属于在 64 位平台上请求 WMI 数据 http://msdn.microsoft.com/en-us/library/aa393067%28v=vs.85%29.aspx.

默认情况下,当存在两个版本的提供程序时,应用程序或脚本从相应的提供程序接收数据。 32 位提供程序将数据返回到 32 位应用程序,包括所有脚本,64 位提供程序将数据返回到 64 位编译的应用程序。但是,应用程序或脚本可以通过方法调用上的标志通知 WMI,从非默认提供程序(如果存在)请求数据。这__ProviderArchitecture and __所需架构字符串标志具有一组由 WMI 处理的值,但未在 SDK 标头或类型库文件中定义。这些值被放置在上下文参数中,以向 WMI 发出信号,表明它应该从非默认提供程序请求数据。

我不知道如何使用 PowerShell CmdLets 来做到这一点,但您可以使用 .NET Framework 中的“System.Management”类(COM 对象封装)。

# Setup the context information
$mContext = New-Object System.Management.ManagementNamedValueCollection
$mContext.Add( "__ProviderArchitecture", 64)
$mContext.Add( "__RequiredArchitecture", $true)

# Setup the Authrntification object
$ConOptions = New-Object System.Management.ConnectionOptions
#$ConOptions.Username = "computername\administrateur" # Should be used for remote access
#$ConOptions.Password = "toto"
$ConOptions.EnablePrivileges = $true
$ConOptions.Impersonation = "Impersonate"
$ConOptions.Authentication = "Default"
$ConOptions.Context = $mContext

# Setup the management scope (change with the computer name for remote access)
$mScope = New-Object System.Management.ManagementScope("\\localhost\root\cimV2", $ConOptions)

$mScope.Connect()

# Query
$queryString = "SELECT * From Win32_WinSAT"
$oQuery = New-Object System.Management.ObjectQuery ($queryString)
$oSearcher = New-Object System.Management.ManagementObjectSearcher ($mScope, $oQuery)
$oSearcher.Get();

我在 Windows 8 中从 32 位和 64 位 PowerShell 执行此脚本,两者都有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法从 32 位进程访问 Win32_WinSAT 的相关文章

随机推荐

  • Git/Eclipse 工作流程

    我使用 Eclipse 来编辑 Java 并使用 Git 作为我的 VCS 我应该将本地存储库放在工作区中还是工作区之外 并在每次要提交时复制文件 我知道我可以通过各种方式做到这一点 但我是 Git 新手 想知道哪种方式更好 目前最好的做法
  • 带默认子级的 Vue.js 嵌套路由

    我对 Vue js 2 中的默认子路由有疑问 当我最初访问 localhost listings 时 它会正确加载 index vue 和 map vue 作为子项 当我使用 router link 导航到 localhost listin
  • 如何在加载网页之前运行内容脚本?

    我想更改一些 dom 内容 使所有输入字段值都是 在用户可以看到网页之前先对其进行显示 我该怎么做 有什么办法可以做到这一点吗 谢谢 您需要一个运行于文档开始 https developer chrome com extensions co
  • 如何查找具有相同字段的mongo文档

    我有一个 mongo 集合 我需要在该集合中查找文档 其中字段名称和地址相等 我找了很多 只能找到MongoDb 比较 2 个字段的查询条件 https stackoverflow com questions 4442453 mongodb
  • dig (DNS Lookup) 指定 Windows 上的 DNS 服务器

    在Linux中 我会使用dig使用以下命令指定 DNS 服务器 127 0 0 1 dig google com 127 0 0 1 我安装了 Windows 的绑定工具 choco install bind toolsonly 我怎样才能
  • 带 Spring Boot 项目的 Modbus 脉冲线圈

    必须实施呼叫数字IO with Modbus协议 on 春季启动项目构建者Maven 它应该是在身体上有一定持续时间的脉冲呼叫 例如 5 秒等 以下是规范中的一个片段 关于响应和错误的更多信息 看来这个呼叫应用程序应该表现得像一个大师 在这
  • Linux:在有限空间上使用分割

    我的 Linux 机器上有一个巨大的文件 该文件约为 20GB 我的盒子上的空间约为 25GB 我想将文件分成约 100mb 的部分 我知道有一个 分割 命令 但它保留了原始文件 我没有足够的空间来保存原件 关于如何实现这一点有什么想法吗
  • 如何在 Node.js Express 中检查会话?

    我尝试检查 Express 4 中的会话是否存在 if req session user undefined 它给了我错误 Cannot read property user of undefined 如何检查会话中是否存在值 来自sour
  • Python 类中的属性是否共享? [复制]

    这个问题在这里已经有答案了 下面的代码让我很困扰 class mytest name test1 tricks list def init self name self name name self tricks name self tri
  • P_SHA1算法在PHP中的实现

    我们正在尝试实现一个函数 P SHA1 意味着 PHP 用 Python 编写的函数的模式 但不幸的是 有些东西无法正常工作 JAVA中的实现函数如下 http ws apache org wss4j xref org apache ws
  • .wav 从 AVAssetWritter ios 转换为任何压缩形式

    那么我现在面临的问题是尺寸问题 我允许用户从他们的库中选择一首歌曲 然后将其切成碎片 然后能够在启用文件共享的情况下在计算机上使用 wav 或 mp3 文件 基本上我正在使用以下 AVAssetWritter 选项 并且我不断收到一个巨大的
  • ggplot2:仅显示一组中的文本标签

    我的设置 我有一些篮球运动员和他们的统计数据 library tidyverse df lt tibble season c 2010 2011 2012 2013 2014 2010 2011 2012 2013 2014 player
  • 使用 XmlSerializer 的多个命名空间

    这是场景 我有嵌套类 需要在 xml 文档中序列化 XmlRoot Namespace http www foo bar myschema public class root XmlAttribute public string versi
  • `文件中的错误(con,“r”):无法通过运行 BRugsFit() 打开连接

    我有一个错误关于Error in file con r cannot open the connection从运行 BRugsFit 开始 我假设所有输入参数都很好 调用代码是 gt output BRugsFit model txt da
  • Visual C++ 无法推导模板模板参数

    以下 C 17 代码片段在 GCC 和 CLang 中进行编译 但在 Visual C 中会出现以下错误
  • R 中的正则表达式:匹配节点词的搭配

    我想在文本字符串中找到单词的搭配 单词的搭配是指在该单词之前或之后与其同时出现的单词 这是一个虚构的例子 GO lt c This little sentence went on and on It was going on for qui
  • 如何使用 google geochart 启用文本悬停事件

    是否可以将悬停效果与谷歌地理图表一起使用 以便地图上的选定区域也触发区域列表中该区域文本颜色的变化 如果在地图地理图表上选择了蒙大拿州 我希望列表中的 蒙大拿州 一词具有不同的颜色 我希望你明白我想要实现的目标 function drawM
  • 目标 C:应用程序获得 2 级内存警告并不久后退出

    我的应用程序从服务器获取照片图像并将它们存储在一个数组中 该数组最终将显示在 UITableView 控制器中 我在一个单元格中显示 2 个图像 768 x 768 像素和 100 X 100 像素 启动时 该应用程序将加载 10 个带有图
  • “typeRoots”无法在项目中找到 d.ts 声明文件

    tsconfig json inside compilerOptions typeRoots types node modules types projectRoot types express index d ts declare glo
  • 无法从 32 位进程访问 Win32_WinSAT

    当从 x64 进程请求 Win32 WinSAT 时 我得到正确的结果 WinSATAssessmentState 1 但当从 x86 执行时 我得到 结果不可用 WinSATAssessmentState 3 x64 Powershell