首页 > 解决方案 > 对于“WMIC 已弃用”,我该怎么办?

问题描述

我一直依赖这两个命令:

wmic memorychip get capacity        // Outputs how much RAM there is (in a convoluted manner).
wmic diskdrive get Status,Model     // Checks whether the HDDs/SSDs on the system are (supposedly) still "OK" and working.

今天随便敲了下“wmic”,看看能不能得到上面命令的JSON输出。它以红色文本打印的第一件事是:

WMIC is deprecated.

我对此感到非常震惊。已弃用?好吧......那我绝对不应该依赖它。那么,这两个命令的“现代替代方案”是什么?它们甚至存在吗?为什么他们只是告诉我们它已被“弃用”,更多信息为零?

标签: windowscommand-line-interfacewmic

解决方案


正如评论中提到的,WMIC 是用作与 WMI 通信的接口的实用程序。被弃用的不是 WMI 本身,而是“只是”接口。由于微软正在推动 PowerShell,我相信官方的继任者 wmic 将是 PowerShell commandlet Get-WmiObject。如何使用它可以在 Microsoft 文档中找到:LINK

[更新]正如评论中正确指出的那样,commandletGet-WmiObject最终也可能有一天会失效,因此可能不鼓励使用它来让脚本在未来得到证明。坚持使用的最佳方法是Get-CimInstance,它的语法与Get-WmiObject. 请参阅 Microsoft 文档:链接

对于您的特定情况,PowerShell 替代方案如下:

wmic memorychip 获取容量

Get-CimInstance -ClassName Win32_PhysicalMemory | Select-Object capacity

wmic diskdrive 获取状态,型号

Get-CimInstance -ClassName Win32_diskdrive | Select-Object status, model

中的命令wmic通常派生自 WMI 类名,但这并不是真正的经验法则。使用 PowerShell,您将通过 WMI 的真实类名访问 WMI,因此如果需要,您可能需要寻找其他类。

正如培根位在评论中提到的那样。可以通过以下命令获得真正 WMI 类的 WMIC 别名:

wmic.exe alias list brief

PowerShell无可争辩的优势wmic是输出是一个对象,您可以轻松地继续使用输出,而 wmic 仅返回一个您最终需要解析的字符串,例如,如果在脚本中使用它并带来例如输出格式的另一个好处 - 您可以轻松地重新格式化任何输出,例如您提到的 JSON,只需将您的命令通过另一个管道传递到命令行开关ConvertTo-Json,您将获得预期的输出。

例子:

Get-CimInstance -ClassName Win32_diskdrive | select status, model | ConvertTo-JSON

输出:

{
    "status":  "OK",
    "model":  "SAMSUNG MZNTY256HDHP-000L7"
}

希望这可以帮助

[更新 2.2.2022] 由于这是 Google 上针对该主题弹出的第一个链接,因此这里有一个小的更新:

微软在其WMIC 文档中正式通知 wmic 将被弃用

微软页面引用:

从 Windows 10 版本 21H1 和 Windows Server 的 21H1 半年频道版本开始,不推荐使用 WMI 命令行 (WMIC) 实用程序。此实用程序已被用于 WMI 的 Windows PowerShell 取代。此弃用仅适用于 WMI 命令行 (WMIC) 实用程序;Windows Management Instrumentation (WMI) 本身不受影响。

为了将来的证明脚本,我仍然会坚持使用 PowerShell 的工业 CIM 标准


推荐阅读