Большой Воронежский Форум
» Программирование>wsh,wmi определение ip <=> имя компа
itester 00:50 20.11.2010
как сделать, не извращаясь с ping? [Ответ]
itester 16:19 21.11.2010
нашел ответ на свой вопрос, используется тот же пинг только из wmi , но зато не извратного вызова ping.exe

вот пример
Код:
<?xml version="1.0" encoding="Windows-1251" standalone="yes" ?>
 
<job id=" Win32_PingStatus ">
<?job debug="true"?>
 
	<description>
Example using  Win32 _ PingStatus . Only for Windows XP, 2003 and above (may be :-)
	</description>
 
<script language="VBScript"> <![CDATA[
 
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
 
arrComputers = Array("pc","127.0.0.1","yandex.ru","mail.ru")
 
For Each strComputer In arrComputers
 
'Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
 
 
	'Здесь в запросе после where можно указать необходимые параметры (это то, что ниже в списке Properties отмечено "Qualifiers: Key")
	'Список параметров комментарии к ним:
strPingRequest = "Address ='" & strComputer & "'"
	'Address - имя или адрес пингуемого узла, сам параметр надо кавычить одинарными кавычками
 
'strPingRequest = strPingRequest & " AND BufferSize = 64"
	'BufferSize - размер пакета, аналог ping -l, default = 32
 
'strPingRequest = strPingRequest & " AND NoFragmentation = TRUE"
	'NoFragmentation - запрет фрагментации, аналог ping -f, default = FALSE
 
'strPingRequest = strPingRequest & " AND RecordRoute = 4"
	'RecordRoute - запись штампов маршрута, аналог ping -r, default = 0, веорятно не более 4 по аналогии с ping
 
strPingRequest = strPingRequest & " AND  ResolveAddressNames  = TRUE"
	' ResolveAddressNames  - определять имена узлов, вероятно аналог ping -a, default = FALSE
 
'strPingRequest = strPingRequest & " AND SourceRoute = ????"
	'SourceRoute - вероятно аналог ping -j, -k (совместно с SourceRouteType), default = ""
 
'strPingRequest = strPingRequest & " AND SourceRouteType = ???"
	'SourceRouteType - вероятно аналог ping -j, -k (совместно с SourceRoute), default = 0
 
'strPingRequest = strPingRequest & " AND Timeout = 1000"
	'Timeout - таймаут ожидания ответа, аналог ping -w, default = 1000
 
'strPingRequest = strPingRequest & " AND TimeStampRoute = 2"
	'TimeStampRoute - Штамп времени для указанного числа переходов, аналог ping -s, default = 0
 
'strPingRequest = strPingRequest & " AND TimeToLive = 3"
	'TimeToLive - TTL пакета запроса, аналог ping -i, default = 80
 
'strPingRequest = strPingRequest & " AND TypeofService = 16"
	'TypeofService - TOS пакета запроса, аналог ping -v, default = 0
 
 
Set colItems = objWMIService.ExecQuery("SELECT * FROM  Win32_PingStatus  where " & strPingRequest, "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
 
'WScript.Echo
'WScript.Echo "=========================================="
WScript.Echo "Host: " & strComputer
 
For Each objItem In colItems 
do
WScript.Echo "Address: " & objItem.Address
if objItem.PrimaryAddressResolutionStatus <> 0 Then 
WScript.Echo "PrimaryAddressResolutionStatus: " & objItem.PrimaryAddressResolutionStatus & " (Host to address not resolved)"
exit do
else
WScript.Echo "PrimaryAddressResolutionStatus: " & objItem.PrimaryAddressResolutionStatus & " (Host to address resolved ok)"
end if
 
if objItem.StatusCode <> 0 Then 
WScript.Echo "StatusCode: " & objItem.StatusCode & " (Ping error: " & NetworkStatusCodeToString(objItem.StatusCode) &")"
	else
WScript.Echo "StatusCode: " & objItem.StatusCode & " (Ping ok)"
	end if
 
WScript.Echo "ProtocolAddress: " & objItem.ProtocolAddress
WScript.Echo "ProtocolAddressResolved: " & objItem.ProtocolAddressResolved
WScript.Echo " ResolveAddressNames : " & objItem.ResolveAddressNames 
'WScript.Echo ""
'WScript.Echo "BufferSize: " & objItem.BufferSize
'WScript.Echo "NoFragmentation: " & objItem.NoFragmentation
'WScript.Echo "Timeout: " & objItem.Timeout 
'WScript.Echo "TimeToLive: " & objItem.TimeToLive
'WScript.Echo "TypeofService: " & objItem.TypeofService
'WScript.Echo ""
'WScript.Echo "ResponseTime: " & objItem.ResponseTime
'WScript.Echo "ResponseTimeToLive: " & objItem.ResponseTimeToLive
'WScript.Echo "ReplySize: " & objItem.ReplySize
'WScript.Echo "ReplyInconsistency: " & objItem.ReplyInconsistency
'WScript.Echo ""
'WScript.Echo "SourceRoute: " & objItem.SourceRoute
'WScript.Echo "SourceRouteType: " & objItem.SourceRouteType
'WScript.Echo "RecordRoute: " & objItem.RecordRoute
'WScript.Echo "RouteRecord: " & Join_if_Array(objItem.RouteRecord)
'WScript.Echo "RouteRecordResolved: " & Join_if_Array(objItem.RouteRecordResolved)
'WScript.Echo "TimestampRoute: " & objItem.TimestampRoute
'WScript.Echo "TimeStampRecord: " & Join_if_Array(objItem.TimeStampRecord)
'WScript.Echo "TimeStampRecordAddress: " & Join_if_Array(objItem.TimeStampRecordAddress)
'WScript.Echo "TimeStampRecordAddressResolved: " & Join_if_Array(objItem.TimeStampRecordAddressResolved)
'WScript.Echo
	exit do
	loop
Next
Next
 
 
Function Join_if_Array ( a )
	if isArray (a) Then Join_if_Array = join(a, ", ")
End Function
 
 
Function NetworkStatusCodeToString ( i )
	Select Case i
		Case 0	NetworkStatusCodeToString="Success"
		Case 11001 NetworkStatusCodeToString="Buffer Too Small"
		Case 11002 NetworkStatusCodeToString="Destination Net Unreachable"
		Case 11003 NetworkStatusCodeToString="Destination Host Unreachable"
		Case 11004 NetworkStatusCodeToString="Destination Protocol Unreachable"
		Case 11005 NetworkStatusCodeToString="Destination Port Unreachable"
		Case 11006 NetworkStatusCodeToString="No Resources"
		Case 11007 NetworkStatusCodeToString="Bad Option"
		Case 11008 NetworkStatusCodeToString="Hardware Error"
		Case 11009 NetworkStatusCodeToString="Packet Too Big"
		Case 11010 NetworkStatusCodeToString="Request Timed Out"
		Case 11011 NetworkStatusCodeToString="Bad Request"
		Case 11012 NetworkStatusCodeToString="Bad Route"
		Case 11013 NetworkStatusCodeToString="TimeToLive Expired Transit"
		Case 11014 NetworkStatusCodeToString="TimeToLive Expired Reassembly"
		Case 11015 NetworkStatusCodeToString="Parameter Problem"
		Case 11016 NetworkStatusCodeToString="Source Quench"
		Case 11017 NetworkStatusCodeToString="Option Too Big"
		Case 11018 NetworkStatusCodeToString="Bad Destination"
		Case 11032 NetworkStatusCodeToString="Negotiating IPSEC"
		Case 11050 NetworkStatusCodeToString="General Failure"
		Case Else  NetworkStatusCodeToString="?Unkhown Error Code?"
	End Select
End Function
 
]]> </script>
 
</job>
[Ответ]
Вверх