我在使这个WMIC查询工作时遇到了一些麻烦。
@echo off
setlocal
Call :wmic nicconfig where IPEnabled=TRUE and DefaultIPgateway is not null get ipaddress,macaddress,defaultipgateway /format:list
exit /b
:wmic
for /f "delims=" %%A in ('"wmic %*"') do for /f "delims=" %%B in ("%%A") do echo %%B
exit /b
我错过了一些简单但我不知道的事情。我一直在"和 - 别名动词无效。"
TIA
马特
答案 0 :(得分:3)
正如Bill_Stewart所指出的,DefaultIPGateway列包含一个数组数据类型,无法使用WQL查询。但这并不意味着wmic
无法处理复合where
条款。您只需将参数括在引号内的where
。
wmic nicconfig where "IPEnabled=TRUE and IPConnectionMetric>0" get ipaddress,macaddress,defaultipgateway /format:list
请参阅?整个IPEnabled=TRUE and IPConnectionMetric>0
事是一个论点。您收到错误是因为AND
正在发生,而wmic需要get
或list
或call
等。
顺便说一下,如果您需要查询字符串,则必须在双引号中使用单引号。与布尔值和整数不同,必须引用字符串。
wmic nicconfig where "Description LIKE '%%NVIDIA%%'" list /format:list
还有一些其他问题需要考虑。在wmic
循环中调用for
时,需要引用等号和逗号以及插入符号。此外,在for /f
循环中,您不需要围绕整个命令的单引号和双引号。按如下方式更改脚本,它应该可以工作:
@echo off
setlocal
call :wmic nicconfig where "IPEnabled=TRUE and IPConnectionMetric>0" get ipaddress^^,macaddress^^,defaultipgateway /format:list
exit /b
:wmic
for /f "delims=" %%A in ('wmic %*') do for /f "delims=" %%B in ("%%A") do echo %%B
exit /b
答案 1 :(得分:2)
WQL不支持查询数组数据类型(请参阅https://msdn.microsoft.com/en-us/library/aa392902.aspx)。在shell脚本(批处理)中完成这将很烦人,但它在PowerShell中非常简单:
get-wmiobject Win32_NetworkAdapterConfiguration -filter "IPEnabled=TRUE" |
where-object { $_.DefaultIPGateway }
答案 2 :(得分:0)
我在工作中遇到了同样的问题。我的尝试是使用VBS并将IpEnabled作为查询的一部分,而DefaultIPGateway是Sub的一部分,部分归功于WMICreator Tool如何格式化示例代码。
这应该只在两者都适用时写出有效值:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=True",,48)
For Each objItem in colItems
DoWork
next
Sub DoWork()
If isNull(objItem.DefaultIPGateway) Then
exit sub
Else
Wscript.Echo "DefaultIPGateway: " & Join(objItem.DefaultIPGateway, ",")
End If
Wscript.Echo "DHCPServer: " & objItem.DHCPServer
Wscript.Echo "DNSDomain: " & objItem.DNSDomain
Wscript.Echo "DNSHostName: " & objItem.DNSHostName
If isNull(objItem.IPAddress) Then
Wscript.Echo "IPAddress: "
Else
Wscript.Echo "IPAddress: " & Join(objItem.IPAddress, ",")
End If
Wscript.Echo "IPConnectionMetric: " & objItem.IPConnectionMetric
Wscript.Echo "IPEnabled: " & objItem.IPEnabled
If isNull(objItem.IPSubnet) Then
Wscript.Echo "IPSubnet: "
Else
Wscript.Echo "IPSubnet: " & Join(objItem.IPSubnet, ",")
End If
end Sub