|
|
|
Как узнать у кого "висит" Авторизация доступа? Ø |
☑ | ||
|---|---|---|---|---|
|
0
Kif
08.12.05
✎
23:29
|
В "Мониторе", естественно нет Юзера который не зарегистрировался, но базу "держит"! Конфу не обновишь, приходится бегать по кабинетам (если они открыты) и искать: кто не набрал пароль и ушел на обед!
Как можно это отследить? |
|||
|
1
Young
08.12.05
✎
23:36
|
Рубить все процессы 1cv77s.exe по сетке.
|
|||
|
2
Мишка Олимпийский
08.12.05
✎
23:39
|
я для рубки юзеров определенной базы использую Admin1C от MMF. И сообщения рассылаю. Еще ДД можно посмотреть ;)
|
|||
|
3
VZ
08.12.05
✎
23:39
|
Как обычно, автор shaharbA (Abraham$)
... const ForReading=1 set fso=CreateObject("Scripting.FileSystemObject") Set WSHShell = CreateObject("WScript.Shell") res=WSHShell.run("cmd.exe /c net file>lockfile.txt",,true) set f=fso.OpenTextFile("lockfile.txt", ForReading, False) do while Not f.AtEndOfStream x=f.readline() if instr(lcase(x),"users.usr") then res=WSHShell.run("cmd.exe /c net send " & trim(mid(x,52,21)) & " ""Ах ты сволоч, чего незакрыл окно логина 1Сэ...?!""",,true) res=WSHShell.run("cmd.exe /c net file " & trim(mid(x,1,11)) & " /close",,true) Wscript.echo res end if loop dim arr strComputerName="1cserver" '"const ForReading=1" & vbCrLf _ a= "set fso=CreateObject(""Scripting.FileSystemObject"")" & vbCrLf _ & "Set WSHShell = CreateObject(""WScript.Shell"")" & vbCrLf _ & "res=WSHShell.run(""cmd.exe /c net file>lockfile.txt"",,true)" & vbCrLf _ & "set f=fso.OpenTextFile(""lockfile.txt"", 1, False)" & vbCrLf _ & "do while Not f.AtEndOfStream" & vbCrLf _ & "x=f.readline()" & vbCrLf _ & "if instr(lcase(x),""users.usr"") then" & vbCrLf _ & "res=WSHShell.run(""cmd.exe /c net file "" + trim(mid(x,1,11)) + "" /close"",,true)" & vbCrLf _ & "res=WSHShell.run(""cmd.exe /c net send "" + trim(mid(x,52,21)) + """" Ax ty svoloch, chego ne zakryl okno logina 1C...?! """",,true)" & vbCrLf _ & "end if" & vbCrLf _ & "loop" arr=split(a,vbCrLf) for i=lbound(arr) to ubound(arr) arr(i)=replace(arr(i),chr(34) & chr(34),chr(34)) next 'WScript.Echo a Set objClass = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputerName & "\root\CIMV2:Win32_Process") Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputerName & "\root\CIMV2") Set objStartup = objService.Get("Win32_ProcessStartup") Set objConfig = objStartup.SpawnInstance_ Res = objClass.Create("cmd.exe /c echo " & chr(39) & "...>FileUserLockRemove.vbs", Null, objConfig, PID) 'WScript.Echo res Wscript.sleep 100 for each c in arr Res = objClass.Create("cmd.exe /c echo " & c & ">>FileUserLockRemove.vbs", Null, objConfig, PID) Wscript.sleep 100 next Res = objClass.Create("WScript.exe FileUserLockRemove.vbs //b", Null, objConfig, PID) Wscript.sleep 1000 Res = objClass.Create("cmd.exe /c del FileUserLockRemove.vbs", Null, objConfig, PID) If Res <> 0 Then WScript.Echo "Код ошибки: " & Res End If WScript.sleep 1000 Set colProcessList = objService.ExecQuery("Select * from Win32_Process Where Name = 'WScript.exe'") For Each objProcessT in colProcessList if objProcessT.ProcessID=PID then WScript.echo objProcessT.Terminate() end if |
|||
|
4
Чучундер
08.12.05
✎
23:41
|
Вжик, а как этот скрипт запускать? т.е. куда его записать/как его выполнить - буквально в двух словах...
А? |
|||
|
5
Дурочка 1С
08.12.05
✎
23:43
|
Посмотреть кто держит файл user.def ...
|
|||
|
6
Чучундер
08.12.05
✎
23:44
|
Там next по-моему забыт в конце...
|
|||
|
7
Kif
08.12.05
✎
23:44
|
Пасиба! Попробую...
|
|||
|
8
VZ
08.12.05
✎
23:45
|
(4) Вестимо, с сервера :)) Не с РС же... тебе ее отыскать надо. А уж потом... отыметь :)))
|
|||
|
9
Чучундер
08.12.05
✎
23:47
|
(5) не, наверное user.dat?
|
|||
|
10
smaharbA
08.12.05
✎
23:47
|
Блин неужто это все я накабузял, там помоему скрещщено (в тоже время ктото задавал вопрос как запустить скрипт удаленно с доступом к сети, этт не такто просто кстати)...
|
|||
|
11
smaharbA
08.12.05
✎
23:49
|
Аааа, точно, это два скрипта, один на сервере, а другой с любого места...
|
|||
|
12
VZ
08.12.05
✎
23:49
|
(6) Ты прав, забыт :(
(10) Ты, ты, не сомневаяся ;) А после сообщения можно удаленный шутдаун жахнуть... |
|||
|
13
Чучундер
08.12.05
✎
23:49
|
(10) Вот-вот, хочется со своей рабочей машины заранить такой скрипт и поиметь нарушителя....
|
|||
|
14
smaharbA
08.12.05
✎
23:52
|
(13) Можно батником, если нада то завтро в "нормальном" изложении...
|
|||
|
16
smaharbA
08.12.05
✎
23:55
|
(15) ага, адрес записал, иду уже спать...
|
|||
|
17
smaharbA
08.12.05
✎
23:57
|
+ Кстати, это не страшно что окно открыто, это можно обходить, но надо чтоб скрипт на машине с базой работал, в нем думаю строк 10 будет...
Завтра... |
|||
|
18
VZ
08.12.05
✎
23:59
|
(17) Ежели здесь выложишь, учти: я запишу! ;)
|
|||
|
20
smaharbA
09.12.05
✎
16:58
|
strComputer = "1cserver" 'Сервер баз, проверяемый...
strComputerRegBase="1cserver" 'Компьютер с которого берется список баз... Set WSHShell = CreateObject("Wscript.Shell") Set Locator= CreateObject("WBemScripting.SWbemLocator") Set Service=Locator.ConnectServer() Set oExec=WSHShell.Exec("rundll32 kernel32,Sleep") PID=Service.Get("Win32_Process.Handle=" & oExec.ProcessID).ParentProcessID oExec.Terminate For each c in Service.ExecQuery("select commandline,name from Win32_Process where (name='wscript.exe' or name='cscript.exe') and ProcessID<>" & PID) if instr(ucase(c.commandline),Ucase(WScript.ScriptName)) then Button=WSHShell.Popup("Скрипт " & WScript.ScriptName & " уже запущен!!!" & vbCr & "Перезапустить???",10,,4) If Button=6 then c.Terminate WSHShell.Popup "Скрипт " & WScript.ScriptName & " перезапущен...",5 Else WSHShell.Popup "Уже запущенный скрипт " & WScript.ScriptName & " оставлен.",5 WScript.Quit End If end if Next Set fso = CreateObject("Scripting.FileSystemObject") set Dict=CreateObject("Scripting.Dictionary") do set GB=GetBase(strComputerRegBase) for each c in GB f_name=mid(GB.item(c).item("Path"),len(fso.GetDriveName(GB.item(c).item("Path")))+2) drives=split(fso.GetDriveName(GB.item(c).item("Path")),"\") if ubound(drives)=3 then on error resume next Set Service = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & drives(2) & "\root\cimv2") set oShare=Service.ExecQuery("Select * from Win32_Share where Type=0 and Name='" & drives(3) & "'") for each v in oShare set oFile=Service.ExecQuery("Select * from CIM_DataFile where Name='" & replace(v.path,"\","\\") & "\\" & replace(f_name,"\","\\") & "usrdef\\users.usr' and accessmask IS Null") for each ff in oFile set oExec=wshshell.ехес("%comspec% /c openfiles.exe /s " & strComputer & " /query /fo csv /nh") do while not oExec.StdOut.AtEndOfStream arr=split(replace(oExec.StdOut.ReadLine,"""",""),",") if ucase(arr(3))=ucase(ff.name) then set oExec=wshshell.ехес("%comspec% /c openfiles.exe /s " & strComputer & " /disconnect /ID " & arr(0)) do while oExec.Status=0 wscript.sleep 100 loop Users=Users & "Пользователь " & arr(1) & ", База """ & GB.item(c).item("Caption") & """, Путь """ & GB.item(c).item("Path") & """" & vbCr end if loop next Next err.clear on error goto 0 elseif ubound(drives)=0 then set oFile=Service.ExecQuery("Select * from CIM_DataFile where Name='" & replace(drives(0),"\","\\") & "\\" & replace(f_name,"\","\\") & "usrdef\\users.usr' and accessmask IS NULL") for each ff in oFile set oExec=wshshell.ехес("%comspec% /c openfiles.exe /s " & strComputer & " /query /fo csv /nh") do while not oExec.StdOut.AtEndOfStream arr=split(replace(oExec.StdOut.ReadLine,"""",""),",") if ucase(arr(3))=ucase(ff.name) then set oExec=wshshell.ехес("%comspec% /c openfiles.exe /s " & strComputer & " /disconnect /ID " & arr(0)) do while oExec.Status=0 wscript.sleep 100 loop Users=Users & "Пользователь " & arr(1) & ", База """ & GB.item(c).item("Caption") & """, Путь """ & GB.item(c).item("Path") & """" & vbCr end if loop next end if next If trim(Users)<>"" then WScript.Echo Users Users="" End If wscript.sleep 300 loop function GetBase(strComputerRegBase) set DictB=CreateObject("Scripting.Dictionary") const HKEY_CURRENT_USER = &H80000001 Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputerRegBase & "\root\default:StdRegProv") strKeyPath = "Software\1C\1Cv7\7.7\Titles" oReg.EnumValues HKEY_CURRENT_USER, strKeyPath, arrValues strInfo=vbNullString For i = LBound(arrValues) To UBound(arrValues) call oReg.GetStringValue(HKEY_CURRENT_USER,strKeyPath,arrValues(i),Value) Execute "set dictKey" & i & "=CreateObject(""Scripting.Dictionary"")" Execute "dictKey" & i & ".add ""Path"",arrValues(" & i & ")" Execute "dictKey" & i & ".add ""Caption"",Value" DictB.Add "db" & i,eval("dictKey" & i) Next set GetBase=DictB end function function GetUser(param) set DictU=CreateObject("Scripting.Dictionary") if fso.FileExists(param&"usrdef\users.usr") then set Txt=FSO.OpenTextFile(param&"usrdef\users.usr") LineUser="" ChI=0 do while Not Txt.AtEndOfStream Chi=Chi+1 Buf=Txt.Read(1) if asc(Buf)>31 then LineUser=LineUser+Buf end if loop LineBof="{"&chr(34)&"Container.Contents"&chr(34)&"," LineUser=Mid(LineUser,InStr(LineUser,LineBof)+23) LineUser=Mid(LineUser,1,InStr(LineUser,"}}")) Arr=split(LineUser,"},{") for iArr=lbound(Arr) to Ubound(arr) Arr(iArr)=Replace(Arr(iArr),chr(34),"") Arr(iArr)=Replace(Arr(iArr),"}","") Arr(iArr)=mid(Arr(iArr),19) Arr(iArr)=mid(Arr(iArr),InStr(Arr(iArr),",")+1) Arr(iArr)=mid(Arr(iArr),1,InStr(Arr(iArr),",")-1) next for each sArr In Arr DictU.add sArr,sArr next else end if set GetUser=DictU end function /// Это должно запускаться на ХР или 2003 (можно не на сервере а любой рабочей станции) работает с серверами баз под управлением 2000/ХР/2003 |
|||
|
21
Чучундер
09.12.05
✎
17:27
|
Запустил локально на дом.машине W2K
поправил ашипки дает строка 9 символ 1 ошибка 0х80041017 код 80041017 источник (null) и что дальше? |
|||
|
22
Дурочка 1С
09.12.05
✎
21:00
|
Ник "Тяп Ляп" в базе не найден. Зарегистрируйте ник!
|
|||
|
23
Чучундер
09.12.05
✎
21:07
|
А, е!
|
|||
|
24
Чучундер
09.12.05
✎
21:13
|
Все равно не получается...
А что значит ...and ProcessID<>" & PID ? перед кавычкой ничего не надо...? |
|||
|
25
Мишка Олимпийский
09.12.05
✎
23:02
|
он домой уехал, будет в понедельник только.
|
|||
|
26
smaharbA
12.12.05
✎
07:13
|
For each c in Service.ExecQuery("select commandline,name,processid from Win32_Process where (name='wscript.exe' or name='cscript.exe') and ProcessID<>" & PID)
Но и без этой коррекции все должно работать На 2000 не будет отслеживать, надо перестраивать net files использовать, и, чтобы отслеживать в терминале (если пути локальные) нужно включить глобальный флаг Maintain a list of objects for each type («Вести список объектов каждого типа») с помощью команды gflags.exe (из Support Tools) ...Ник Тя Ляп в базе небыл зарегистрирован... |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |