powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Error: Microsoft VBScript runtime error '800a000d'...Type Mismatch
6 сообщений из 6, страница 1 из 1
Error: Microsoft VBScript runtime error '800a000d'...Type Mismatch
    #36985563
VBS Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
' Author: Dmitry Vayntrub (dvayntrub@yahoo.com)
' Loosely based off the check_ad_time.vbs by Mattias Ryrlйn (mr@op5.com) 
' Version: 1.01 17/01/2010
' Description: Check time offset of a Windows server against NTPD server(s).


Set Args = WScript.Arguments
If WScript.Arguments.Count <  3  Then
Err =  3 
WScript.Echo "check_time.vbs V1.01"
WScript.Echo "Usage: cscript /NoLogo check_time.vbs serverlist warn crit [biggest]"
Wscript.Echo ""
Wscript.Echo "Options:"
Wscript.Echo " serverlist (required): one or more server names, coma-separated"
Wscript.Echo " warn  (required): warning offset in seconds, can be partial"
Wscript.Echo " crit  (required): critical offset in seconds, can be partial"
Wscript.Echo " biggest (optional): if multiple servers, else use default least offset" 
Wscript.Echo ""
Wscript.Echo "Example:"
Wscript.Echo "cscript /NoLogo check_time.vbs myserver1,myserver2 0.4 5 biggest"
Wscript.Quit(Err)
End If

serverlist = Args.Item( 0 )
warn = Args.Item( 1 )
crit = Args.Item( 2 )
If WScript.Arguments.Count >  3  Then
	criteria = Args.Item( 3 )
  Else
	criteria = least
End If

Set objShell = CreateObject("Wscript.Shell")
strCommand = "%SystemRoot%\System32\w32tm.exe /monitor /computers:" & serverlist
set objProc = objShell.Exec(strCommand)

input = ""
strOutput = ""
Do While Not objProc.StdOut.AtEndOfStream
	input = objProc.StdOut.ReadLine
	If InStr(input, "NTP") Then
		strOutput = strOutput & input
	End If
Loop

Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = " NTP: ([+-][0-9]+\.[0-9]+)s"
Set myMatches = myRegExp.Execute(strOutput)

result = ""
If myMatches( 0 ).SubMatches( 0 ) <> "" Then
	result = myMatches( 0 ).SubMatches( 0 )
End If
Wscript.Echo "-------------------"
Wscript.Echo result
Wscript.Echo warn
Wscript.Echo crit
Wscript.Echo "-------------------"
Wscript.Echo "1 " & result+warn+crit
Wscript.Echo "-------------------"
Wscript.Echo warn+crit
warn=CDbl(warn)
crit=CDbl(crit)
Wscript.Echo warn+crit

Wscript.Echo result

For Each myMatch in myMatches
	If myMatch.SubMatches( 0 ) <> "" Then
		If criteria = "biggest" Then
			If abs(result) < Abs(myMatch.SubMatches( 0 )) Then
				result = myMatch.SubMatches( 0 )
			End If
		Else
			Wscript.Echo result+"777"
			If Abs(result) > Abs(myMatch.SubMatches( 0 )) Then
				result = myMatch.SubMatches( 0 )
			End If
		End If
	End If
	Wscript.Echo myMatch.SubMatches( 0 ) & " -debug"
Next
Wscript.Echo result
warn=CDbl(warn)
crit=CDbl(crit)
result=CDbl(result)
result=Abs(result)


If result = "" Then
	Err =  3 
	Status = "UNKNOWN"
  ElseIf result > crit Then
	Err =  2 
	status = "CRITICAL"
  ElseIf result > warn Then
	Err =  1 
	status = "WARNING"
  Else
	Err =  0 
	status = "OK"
End If

Wscript.Echo "NTP " & status & ": Offset " & result & " secs|'offset'=" & result & "s;" & warn & ";" & crit & ";"
Wscript.Quit(Err)

Скрипт в Windows 2003 отрабатывает нормально, а в XP выдает ошибку Несоответствие типа 'result' (78, 4)
78-я строчка: If Abs(result) > Abs(myMatch.SubMatches(0)) Then

Вызов скрипта: time.vbs 127.0.0.1 15 60
Вывод скрипта:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
-------------------
-0.9285995 //определяет сдвиг времени (переменная result)
15 //отклонение для значения warning (переменная warn)
60 //отклонение для значения critical (переменная crit)
-------------------
1 -0.92859951560 //складываю 3 значения этих, судя по результату это были string переменные
-------------------
75 // преобразовал warning и critical значения через CDbl() и сложил их - всё работаёт

так же пытался и result преобразовать, но ошибка вываливается. А в Windows 2003 If Abs(result) > Abs(myMatch.SubMatches(0)) Then отрабатывает и без преобразований всяких.

Подскажите, как result из текста в число преобразовать?
...
Рейтинг: 0 / 0
Error: Microsoft VBScript runtime error '800a000d'...Type Mismatch
    #36985614
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все дело в разделителе дробной части. Сравните региональные настройки на 2003 и XP.
...
Рейтинг: 0 / 0
Error: Microsoft VBScript runtime error '800a000d'...Type Mismatch
    #36985648
VBS Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyВсе дело в разделителе дробной части. Сравните региональные настройки на 2003 и XP.Спасибо. Действительно, Windows английский везде, а вот региональные настройки разные.
...
Рейтинг: 0 / 0
Error: Microsoft VBScript runtime error '800a000d'...Type Mismatch
    #36985662
VBS Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как-нибудь бороться с этим можно? Не меняя региональных настроек. Компьютеров много, настройки везде разные(
...
Рейтинг: 0 / 0
Error: Microsoft VBScript runtime error '800a000d'...Type Mismatch
    #36985715
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
' Get the locally used decimal delimiter
strDecimal  = Replace( FormatNumber(  0 ,  1 , True ), "0", "" )
...
Рейтинг: 0 / 0
Error: Microsoft VBScript runtime error '800a000d'...Type Mismatch
    #36986260
VBS Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy
Код: plaintext
1.
' Get the locally used decimal delimiter
strDecimal  = Replace( FormatNumber(  0 ,  1 , True ), "0", "" )

Спасибо. Сделал.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Error: Microsoft VBScript runtime error '800a000d'...Type Mismatch
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]