1 (изменено: alexii, 2009-05-04 15:35:35)

Тема: VBS: Преобразование даты lastlogon в нормальный вид

Помогите плиз, написал скрипт проверки даты регистрации компов в домене, на моей машине работает, на другой нет, в написании скриптов не специалист, вот код:

Dim fso, dcmp, acmp 
Set fso = CreateObject("Scripting.FileSystemObject") 
Set dcmp = fso.OpenTextFile ("dead_cmp_list.txt", 2, True) 
Set acmp = fso.OpenTextFile ("act_cmp_list.txt", 2, True) 
Set objShell = CreateObject("WScript.Shell") 
 
 
Const wbemFlagReturnImmediately = &h10 
Const wbemFlagForwardOnly = &h20 
 
arrComputers = Array(".") 
For Each strComputer In arrComputers 
    
   Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\directory\LDAP") 
   Set colItems = objWMIService.ExecQuery("SELECT * FROM ds_computer", "WQL", _ 
                                          wbemFlagReturnImmediately + wbemFlagForwardOnly) 
 
   For Each objItem In colItems 
    if (objItem.DS_lastLogon(Value) = 0)  Then 
    dcmp.WriteLine "Компьютер: " & objItem.DS_cn & vbTab & "нет данных о регистрации " 
    else 
    acmp.WriteLine "Компьютер: " & objItem.DS_cn & vbTab & "регистрировался: " & WMIDateStringToDate(objItem.DS_lastLogon) 
    end if 
    Next 
Next 
        
 
Function WMIDateStringToDate(dtmDate) 
N = objItem.DS_lastLogon(Value) 
WMIDateStringToDate = CDate(DateSerial(1601, 1, 1) + N/1e7/86400) 
End Function 
 
WScript.Echo "Сбор данных закончен"

Используйте BBCode для оформления кода.

2

Re: VBS: Преобразование даты lastlogon в нормальный вид

Попробуй так :

Dim fso, dcmp, acmp
Set fso = CreateObject("Scripting.FileSystemObject")
Set dcmp = fso.OpenTextFile ("dead_cmp_list.txt", 2, True)
Set acmp = fso.OpenTextFile ("act_cmp_list.txt", 2, True)
Set objShell = CreateObject("WScript.Shell")


Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20

'arrComputers = Array(".")

'For Each strComputer In arrComputers
   
   'Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\directory\LDAP")
   'Set colItems = objWMIService.ExecQuery("SELECT * FROM ds_computer", "WQL", _
                                          'wbemFlagReturnImmediately + wbemFlagForwardOnly)

   'For Each objItem In colItems
    'if (objItem.DS_lastLogon(Value) = 0)  Then
    'dcmp.WriteLine "Компьютер: " & objItem.DS_cn & vbTab & "нет данных о регистрации "
   ' else
   ' acmp.WriteLine "Компьютер: " & objItem.DS_cn & vbTab & "регистрировался: " & WMIDateStringToDate(objItem.DS_lastLogon)
   ' end if
   ' Next
'Next
       
'---------------------
set objcomp=GetObject("LDAP://cn=ds_computer,dc=name_domen ,dc=name_domen")
    objcomp.filter=Array("Computer")
for each comp in objcomp

    if (comp.dc_lastLogon(Value) = 0)  Then    
        dcmp.WriteLine "Компьютер: " & comp.dc_name & vbTab & "нет данных о регистрации "
    else
        acmp.WriteLine "Компьютер: " &  comp.dc_name & vbTab & "регистрировался: " & WMIDateStringToDate(comp.DS_lastLogon)
    end if

next 
'---------------------



Function WMIDateStringToDate(dtmDate)
N = objItem.DS_lastLogon(Value)
WMIDateStringToDate = CDate(DateSerial(1601, 1, 1) + N/1e7/86400)
End Function

WScript.Echo "Сбор данных закончен"

Только меня смутило приписка везде Ds  например DS_lastLogon, но это не важно , вроде рабоет нормально.

3

Re: VBS: Преобразование даты lastlogon в нормальный вид

Ошибка:
c:\tmp\temp_script.sm(33, 5) Ошибка выполнения Microsoft VBScript: Объект не под
держивает это свойство или метод: 'comp.dc_lastLogon'

4

Re: VBS: Преобразование даты lastlogon в нормальный вид

Значит замени dc_lastLogon на lastLogon. Похимич короче.

5

Re: VBS: Преобразование даты lastlogon в нормальный вид

Я наверно не правильно сформулировал вопрос, суть в том что на моей машине скрипт отрабатыват без ошибок а на другой выдает ошибку
Блин пока проверял, скрипт заработал на другой машине, я имею в виду изначальный. Ничего не понимаю, такая же картина была вначале на моей машине.
Суть ошибки: недопустимое использование Null для CDate.

6

Re: VBS: Преобразование даты lastlogon в нормальный вид

krikerer пишет:

Значит замени dc_lastLogon на lastLogon. Похимич короче.

В последнем письме уже ответил, спасибо за помощь, все равно ничего не понял, как заработало

7

Re: VBS: Преобразование даты lastlogon в нормальный вид

И все-таки не работает, решил перегрузить комп, так и есть, ошибка:
temp_script.sm(30, 1) Ошибка выполнения Microsoft VBScript: Недопустимое использование Null: 'CDate'

8 (изменено: vladkor, 2009-05-06 09:39:17)

Re: VBS: Преобразование даты lastlogon в нормальный вид

Решено, сам спросил, сам ответил.


Dim fso, dcmp, acmp, objShell 
Set fso = CreateObject("Scripting.FileSystemObject")
Set dcmp = fso.OpenTextFile ("dead_cmp_list.txt", 2, True)
Set acmp = fso.OpenTextFile ("act_cmp_list.txt", 2, True)
Set objShell = CreateObject("WScript.Shell")


Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20

arrComputers = Array(".")
For Each strComputer In arrComputers
   
   Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\directory\LDAP")
   Set colItems = objWMIService.ExecQuery("SELECT * FROM ds_computer", "WQL", _
                                          wbemFlagReturnImmediately + wbemFlagForwardOnly)

   For Each objItem In colItems
    if (objItem.DS_lastLogon(Value) <> 0)  Then
    acmp.WriteLine "Компьютер: " & objItem.DS_cn & vbTab & "регистрировался: " & WMIDateStringToDate(objItem.DS_lastLogon)
    else
    dcmp.WriteLine "Компьютер: " & objItem.DS_cn & vbTab & "нет данных о регистрации "
    end if
    Next
Next
WScript.Echo "Сбор данных закончен"       

Function WMIDateStringToDate(dtmDate)
Dim N
N = objItem.DS_lastLogon(Value)
WMIDateStringToDate = DateSerial(1601, 1, 1) + N/1e7/86400
End Function