Windows “我能做些什么?”;WMIC已被弃用;?

Windows “我能做些什么?”;WMIC已被弃用;?,windows,command-line-interface,wmic,Windows,Command Line Interface,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”,看看是否

我一直依赖这两个命令:

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.

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

如评论中所述,WMIC是一种实用工具,充当与WMI通信的接口。不推荐使用的不是WMI本身,而是“只是”接口。由于微软正在推动PowerShell,我相信正式的继任者wmic将是PowerShell commandlet
获取WmiObject
。如何使用此功能,请参见Microsoft文档:

[更新]正如评论中正确指出的,commandlet
获取WmiObject
有一天会日落,不鼓励使用。唯一合适的方法是
getcimpinstance
,它的语法与
getwmioobject
非常相似。请参阅Microsoft文档:

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

wmic内存芯片获取容量

wmic diskdrive获取状态,型号

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

wmic
相比,
PowerShell
无可争议的优势在于输出是一个对象,您可以轻松地继续使用输出,虽然wmic只返回最终需要解析的字符串(例如,如果在脚本中使用),这带来了另一个好处(例如输出格式),但您可以轻松地将任何输出重新格式化为JSON,只需将命令通过另一个管道传递到commandlet
converttojson
中,就可以得到预期的输出

示例:

Get-CimInstance -ClassName Win32_diskdrive | select status, model | ConvertTo-JSON
{
    "status":  "OK",
    "model":  "SAMSUNG MZNTY256HDHP-000L7"
}
输出:

Get-CimInstance -ClassName Win32_diskdrive | select status, model | ConvertTo-JSON
{
    "status":  "OK",
    "model":  "SAMSUNG MZNTY256HDHP-000L7"
}

希望这有帮助

除非powershell可以像dos运行时一样用于完成Java程序的命令等,否则它不符合要求,因为它正在删除其他程序所依赖的工具,而无需替换。

我要求使用WMIC的替代品--而不是cmd.exe…WMIC是访问WMI的命令行工具。WMIC已被弃用。请继续使用PowerShell访问WMI。我没有答案,但在批脚本脚本编写中使用了“@PeterMortensen,wmic.exe,因为CMD没有内置的功能来使用WMI检查和管理系统。Microsoft旧命令行工具的一个问题是文本编码混乱。有些程序使用OEM代码页输出,有些使用ANSI代码页,有些使用当前控制台输入或输出代码页,有些程序可以执行UTF-16,但通常只输出到磁盘文件(例如wmic.exe)。我很高兴看到这些特别的工具被弃用。PowerShell及其cmdlet和.NET是一个更好的命令行环境。(也就是说,它对经典标准I/O的支持糟糕得令人无法接受。它将自己作为中间人注入到管道中,并重定向到文件,以便将字节转换为文本。)请重新措辞,以便更清楚地说明它应该如何回答本页顶部的问题。理想情况下,不要认为这只是一种发泄的咆哮。我并不是说PowerShell是完美的,作为一种语言,它离完美还很远,但如果你需要做些什么,那些commandlet只会起作用。如果您对PowerShell有任何疑问,那么好消息是您在正确的网站上,坏消息是,您应该提出一个问题,而不是在回答随机的PowerShell相关问题时发泄,尤其是不要共享任何感觉像是OP问题答案的内容。CIM是一个行业标准协议和接口。如果您的Java应用程序需要查询CIM接口,您应该查找CIM库。请注意,您可以通过
wmic.exe alias list brief
获得别名和实际WMI类名的交叉。