【发布时间】:2019-06-15 20:45:56
【问题描述】:
我正在尝试学习使用 WMI 对象和 PowerShell 编写脚本,所以我不确定为什么下面的简单脚本不适用于某些服务器但适用于其他服务器:
$Server = 'PRODDB17-V'
Get-WmiObject -ComputerName $Server -Class Win32_LogicalDisk -Filter "DriveType = 3" | ft -AutoSize
Get-WmiObject -Query "SELECT * FROM Win32_Service WHERE DisplayName LIKE '%SQL%'" -ErrorAction Stop -ComputerName $Server | ft -AutoSize
我收到如下错误:
DeviceID DriveType ProviderName FreeSpace Size VolumeName
-------- --------- ------------ --------- ---- ----------
C: 3 50624507904 104751689728 SYSTEM
D: 3 135013552128 1915396026368 DATA
L: 3 71224967168 167772155904 LOGS
S: 3 131093495808 2198886936576 SQL
P: 3 107122515968 644108775424 PageFile
T: 3 8489771008 42946523136 TEMPDB
Get-WmiObject : Out of memory
At line:5 char:1
+ Get-WmiObject -Query "SELECT * FROM Win32_Service WHERE DisplayName LIKE '%SQL%' ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Get-WmiObject], ManagementException
+ FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
【问题讨论】:
-
如果您使用的是 PowerShell 3+,那么建议您使用 CIM cmdlet 而不是“WMI”。对于您的示例,这意味着使用
Get-CimInstance而不是Get-WmiObject -
现在不能测试,但不应该是
DriveType -eq 3吗? -
@Theo 不。
-Filter <String>指定Where子句用作过滤器。 使用 WMI 查询语言 (WQL) 的语法。
标签: powershell scripting active-directory wmi wmi-query