Ru-Board.club
← Вернуться в раздел «В помощь системному администратору»

» Автоматизация администрирования. Часть 2

Автор: john60
Дата сообщения: 24.10.2008 05:23
Здравствуйте всем
Помогите кто чем может или пошлите в нужном направлении
Сервер Win2003, батник из двух команд xcopy копирует две папки, запускается шедулером.
В результате отрабатывает только первая команда. В шедулере код завершения 1.
Причем время завершения задания в шедулере в среднем 30 сек, хотя папка копируется 10 мин.
Тот же батник в терминале отрабатывает на ура.
Подскажите пожалуйста где порыться....
Автор: olezi
Дата сообщения: 24.10.2008 19:45
 Как автоматизировать среднесуточную (+6 сек.) погрешность системных часов компьютера?
Автор: Real Root
Дата сообщения: 24.10.2008 22:17
olezi
То ли лыжи не едут, то ли я ....
Что значит "автоматизировать погрешность"? Я даже по-пьяне такое не выдумаю
Если нужно раз в сутки передвигать часы на 6 сек вперед, то с помощью большого скрипта, который так неохота писать самому, это сделать вполне легко. Ну а лучше, воспользоваться синхронизацией часов с интернет, помоему можно даже такой локальный сервак поднять. Или легче выяснить причину отстования/убегания системных часов, например игрухи пошифрованные стариком.
Автор: cluster
Дата сообщения: 25.10.2008 13:02
Не подскажите способов вывода в файл открытых exe-файлов и кем они открыты? Аналог - оснастка "Управление компьютером"
Автор: Vby
Дата сообщения: 25.10.2008 14:28
cluster
net file > c:\1.txt
Автор: Feeer
Дата сообщения: 28.10.2008 16:28
Вопрос..

var objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\default:StdRegProv");
t="";
var n = objReg.GetStringValue(0x80000002, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion", "qqq",t);

WScript.Echo(t);
WScript.Echo(n);

Почему WScript.Echo(t) пустая строка а не значение параметра реестра? где ошибка ?
WScript.Echo(n) - выдает 0, т.е. все выполняется...значение qqq не пустое.
Заранее спасибо !!!
Автор: Refugee
Дата сообщения: 28.10.2008 21:20
У GetStringValue последний параметр передается by reference, так что её в JScript использовать её непросто:

var regprov = GetObject("winmgmts:!\\\\.\\root\\default:StdRegProv");
var method = regprov.Methods_.Item("GetStringValue");
var inparams = method.InParameters.SpawnInstance_();
inparams.hDefKey = 0x80000002;
inparams.sSubKeyName = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion";
inparams.sValueName = "qqq";
var outparams = regprov.ExecMethod_(method.Name, inparams);
if (outparams.ReturnValue == 0)
    WScript.Echo("Value = " + outparams.sValue);
Автор: gbcfkf
Дата сообщения: 29.10.2008 04:07
cluster

Цитата:
а какие аттрибуты тебе ещё нужны? перечисли. завтра попробую на работе. отпишусь.

Спасибо, уже не надо.
Видимо дело было в том, что другие атрибуты были в "плохом" формате
например LastLogonTimeStamp представляет собой 64 битное число... чтоб его вывест надо использовать такую конструкцию:
....
Set objUser = GetObject("LDAP://cn=" Вася Иванов,ou=tmp,ou=123,dc=domen,dc=ru")
Set objLastLogon = objUser.Get("lastLogontimestamp")
intLastLogonTime = objLastLogon.HighPart * (2^32) + objLastLogon.LowPart
...
И вот уже после этого можно выводить переменную на экран


А вот еще насущный вопрос:
как скриптом двигать мышкой?
Нужно написать скрипт, чтобы после запуска он в бесконечном цикле двигал курсором мышки туда-сюда
Это возможно?
Автор: GTHack
Дата сообщения: 30.10.2008 10:05
приветствую коллеги!

подскажите плс как можно с комм.строки заполучить размер свободного места на логическом диске ?

идея в чем :

всем юзерам цепляется диск L: с сервака (на сервере прописаны квоты)
в автологине запускается скрипт который контролирует
когда у юзера остается менее 30 мегабайт - выдает предупреждение

скрипт был и работал, но он был основан на утилитке diskfree.exe которую сожрал вирус
утилиту найти не могу
нужен аналог

заранее всем спасибо !
Автор: zzxx1488
Дата сообщения: 30.10.2008 14:44
день добрый
интересует как можно ср-вами vbs получить дефолт гейт, который на данный момент используется
дело в том что у меня помимо лана еще 3 подключения к впн и все время гейты разные, т.е. route print выдает
0.0.0.0 0.0.0.0 10.16.0.25
0.0.0.0 0.0.0.0 192.168.56.1
0.0.0.0 0.0.0.0 171.16.31.14

также затрудняет ситуацию, что винда в разных местах на разных языках, т.е. англ,рус,нем и я пытался одно время сделать батник ищущий слово default gateway и соотв-но потом копирующий значение, но на нем и рус виндах это не прокатило

соот-но вопрос, как можно получить текущий гейт который исп-ся на данный момент

Добавлено:
впринципе нарыл такой скрипт, но он выдает все существующие гейты на компе, другое дело, меня интересует именно тот который показывает route print в графе default gateway на тот момент когда я запущу скрипт


On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNicConfigs = objWMIService.ExecQuery _
("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
For Each objNicConfig In colNicConfigs
If Not IsNull(objNicConfig.DefaultIPGateway) Then
strDefaultIPGateway = Join(objNicConfig.DefaultIPGateway)
End If
WScript.Echo " Default Gateways(s): " & strDefaultIPGateway
Next

Автор: Smitis
Дата сообщения: 31.10.2008 14:19
GTHack

Цитата:
подскажите плс как можно с комм.строки заполучить размер свободного места на логическом диске ?


Цитата:
скрипт был и работал, но он был основан на утилитке diskfree.exe которую сожрал вирус

DISKUSE.EXE у мелкософта
Автор: Feeer
Дата сообщения: 01.11.2008 10:09
Пытаюсь получить МАС адрес таким вот образом

MACAddress = "";
ServicesSet = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2");
Items = ServicesSet.ExecQuery("Select * From Win32_NetworkAdapter");
var enumItems = new Enumerator(Items);
for (; !enumItems.atEnd(); enumItems.moveNext()) {
var objItem = enumItems.item();
if(objItem.MACAddress){
WScript.Echo(objItem.MACAddress); };
}

MAC он конечно тоже выдает, но вместе с ним еще чего-то... как отсеять?
Заранее спасибо !

Добавлено:
Просьба переписать на JScript

<job id="Example">
<script language="VBScript">

Set Shell = CreateObject("Shell.Application")
'получение папки "Сетевое окружение"
Set objFolder = Shell.NameSpace("::{208D2C60-3AEA-1069-A2D7-08002B30309D}")
'получение папки "Вся сеть"
Set objFolder = objFolder.Items().Item("EntireNetwork").GetFolder
'получение папки "Microsoft Windows Network"
For Each objItem In objFolder.Items()
If objItem.Name = "Microsoft Windows Network" Then
Set objFolderNetwork = objItem.GetFolder
End If
Next
'перебор доменов и рабочих групп
For Each objItem In objFolderNetwork.Items()
If objItem.IsFolder Then
Set objFolder = objItem.GetFolder
'перебор компьютеров
For Each objSubItem In objFolder.Items()
' WScript.Echo objSubItem.Name
Next
End If
Next
</script>

Заранее спасибо !!!
Автор: YNY
Дата сообщения: 07.11.2008 11:56

Цитата:
Feeer
Пытаюсь получить МАС адрес таким вот образом
сначало определись [more=для какова адаптера или типа подключения теюе надо МАС]
MACAddress = "";
ServicesSet = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2");
Items = ServicesSet.ExecQuery("Select * From Win32_NetworkAdapter");
var enumItems = new Enumerator(Items);
var MacList="";
for (; !enumItems.atEnd(); enumItems.moveNext())
{
var objItem = enumItems.item();
    //WScript.Echo(objItem.Name);
    
// if(objItem.MACAddress){
MacList=MacList+objItem.Name+" <=> "+objItem.MACAddress+" | "+"\n";
}
WScript.Echo(MacList);
[/more], а затем подставь проверку в if(objItem.MACAddress and objItem.Name="CorrektConnektName")

Добавлено:
Или используй вот эту конструкцию с "Where NetConnectionID = " &"'Local Area Connection 2'", только учти, что в английской винде будет на англиском, а вот в русской на русском
[more=шлепни по этой ссылке или наведи на вопрос за ней]
strComputer = "."
Set objWMIService = GetObject(_
"winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery ("Select * From Win32_NetworkAdapter " & "Where NetConnectionID = " &"'Local Area Connection 2'")
[/more]
Автор: adSka
Дата сообщения: 09.11.2008 03:51
Дравствуйте!
как на WSH проверить доступность папки на запись? (чтобы скрипт не вываливал ошибок при отсутствии записи)
.
щас делаю theShellObject.exec ("cmd /c echo test > c:\\testdir\\testfile");
потом проверяю наличие theFileSystemObject.FileExists("c:\\testdir\\testfile")
или что-то типа того...
но для вменяемой работы, требуется вводить паузу WScript.sleep (500), что при проверке большого числа папок вызовет тормоза ацкие... по сему возник такой вопрос...
Автор: YNY
Дата сообщения: 10.11.2008 06:42

Цитата:
как на WSH проверить доступность папки на запись?

с помощью скриптов нереально без тормозов проверить большое количество каких-либо параметров!!!
Автор: demon1981
Дата сообщения: 10.11.2008 13:27
подскажите как батником понять что за айпишником комп или принтер? надо просканировать подсеть. Скажем 192.168.10.х и отобрать только принтера в текстовик
Автор: Liveofan
Дата сообщения: 12.11.2008 08:35
Написал небольшой скриптик по отключению автозапуска с любых носителей



Код: '**************************
'*** AutorunDisabled ******
'**************************
Dim WSHShell
Set WSHShell = wscript.CreateObject("wscript.Shell")
'******************************************
'**** Добавляем записи в реестр ***********
'******************************************
WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdrom\AutoRun", "0", "REG_DWORD"

WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\NoDriveTypeAutoRun", "255", "REG_DWORD"

WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\Autorun.inf\", "@SYS:DoesNotExist"

WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\CancelAutoplay\Files\*.*", ""

'*************************************************
'**** Удаление MountPoints2 из реестра ***********
'*************************************************
WSHShell.RegDelete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\"

WSHShell.RegDelete "HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\"

WSHShell.RegDelete "HKEY_USERS\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\"

WSHShell.RegDelete "HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\"

WSHShell.RegDelete "HKEY_USERS\S-1-5-21-2170445449-3629066266-18666223-4272\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\"
Автор: YNY
Дата сообщения: 12.11.2008 10:27

Цитата:
но вот при попытке удаления MountPoints2

ну ты приколист, CURRENT_USER и какой-то из S-1-5-2*-21***** и есть ты в виде админа -- это раз, возмона в профиль SYSTEM нет полного доступа. А ваще накой тебе удалять ключи в реестре? просто добаь в те где политики - нужные значения + с разрешениями помути, а т.к. виры обычно с админскими правами лазят, то .....
Автор: Liveofan
Дата сообщения: 12.11.2008 11:54
YNY

Цитата:
Через ключ MountPoints2 в реестре также существует возможность для системы обходить заданный запрет на автозапуск сьёмных носителей. Как с этим бороться? Полностью удалить ВСЕ ключи MountPoints2 которые вы находите в реестре (там могут уже быть заданы параметры по автозапуску для сьёмных устройств, которые система уже знает).
- форум ВирусИнфо

Если комп новый то без проблем вирусы туда уже не пролезут, если поставлю запрет, а если комп старый, то автозапуск может там уже сидеть, потому надо убить.
Смысл мне добавлять политики и пути, если все это можно убить )
И авторан полностью умрет на всем, если самому его не запустить...
Мне как раз и нужно, чтобы если пользователь 2 раза щелкнет на открытие диска, чтобы он просто открылся, не обращая внимание на авторан.

Автор: NIKZZZZ
Дата сообщения: 12.11.2008 13:29
Liveofan

Liveofan

Цитата:
Мне как раз и нужно, чтобы если пользователь 2 раза щелкнет на открытие диска, чтобы он просто открылся, не обращая внимание на авторан.



Код: Windows Registry Editor Version 5.00

;значения ключа "NoDriveTypeAutoRun"
;0x1 - отключить автозапуск на приводах неизвестных типов
;0x4 - отключить автозапуск сьемных устройств
;0x8 - отключить автозапуск НЕсьемных устройств
;0x10 - отключить автозапуск сетевых дисков
;0x20 - отключить автозапуск CD-приводов
;0x40 - отключить автозапуск RAM-дисков
;0x80 - отключить автозапуск на приводах неизвестных типов
;0xFF - отключить автозапуск вообще всех дисков.

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoDriveTypeAutoRun"=dword:000000ff
Автор: stalker1980
Дата сообщения: 12.11.2008 15:02
Доброго времени суток!! У меня вопрос такого характера, нужно ребутнуть машины по сети, машин в сети около 80-90, но есть машины которые не нужно ребутить их всего штук 5. Есть ли какой нибудь способ перестартовать все машины за исключением этих 5-ти?

Заранее благодарен!
Автор: Liveofan
Дата сообщения: 12.11.2008 15:27
NIKZZZZ
Да плин я на bat(cmd), на reg написал, мне просто интересно почему на wsh не работает (
Но все равно спасибо...
К тому же то что ты предложил я уже написал )


Код: WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer\NoDriveTypeAutoRun", "255", "REG_DWORD"
Автор: adSka
Дата сообщения: 12.11.2008 18:31

Цитата:
как на WSH проверить доступность папки на запись?

вопщем разобрался как сделать побыстрее...
theExecObject = theShellObject.exec ("cmd.exe /c mkdir testdir\tmptestdir");
if (theExecObject.StdErr.ReadAll() != ""){
//!!! net 3anucu!!!
}
Автор: NIKZZZZ
Дата сообщения: 12.11.2008 18:40
Liveofan

Цитата:
меня интересует именно удаление ключа самого MountPoints2, почему он не хочет удаляться

Возможно, проблема с правами доступа к объектам. Для этого есть небольшая утилита SetACL, не раз выручала при удалении "неудаляемых" ключей реестра.

Автор: Liveofan
Дата сообщения: 13.11.2008 07:46
вот решение проблемы


Код: 'Через ключ MountPoints2 в реестре также существует возможность для системы обходить заданный запрет на автозапуск сьёмных носителей.(там могут уже быть заданы параметры по автозапуску для сьёмных устройств, которые система уже знает).
Command = "REG DELETE ""HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2"" /f"
Return = WshShell.Run(Command, 0, true)

Command = "REG DELETE ""HKU\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2"" /f"
Return = WshShell.Run(Command, 0, true)

Command = "REG DELETE ""HKU\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2"" /f"
Return = WshShell.Run(Command, 0, true)

Command = "REG DELETE ""HKU\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2"" /f"
Return = WshShell.Run(Command, 0, true)

Command = "REG DELETE ""HKU\S-1-5-21-2170445449-3629066266-18666223-4272\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2"" /f"
Return = WshShell.Run(Command, 0, true)
Автор: demon1981
Дата сообщения: 13.11.2008 10:25
stalker1980
кстати psexec и прочие принимают текстовик со списком хостов
Автор: Ilyha58343
Дата сообщения: 13.11.2008 10:54
Подскажите пожалуйста каким образом можно выполнить скрипт на удаленных машинах. Дело в том что стоит домен но в GP нет доступа, можно толко со своего компа. На всех компах я админ, а скрипт надо запустить что быудаленно сменить ключ продукта и тем самым лицензировать ПК. Дело в том что телнет по умолчанию отключен и как выполнить скрипт не могу додуматься

Есть наподобие скрипт но тут минус нельзя указать какую службу запустить, и если стоит статус отключено то он не может сделать автоматически. код скрипта прилагаю
Код: '*******************************************************************
' Имя: StartStoppedServices.vbs
' Язык: VBScript
' Описание: Запуск остановленных служб
'*******************************************************************
Option Explicit

' Объявляем переменные
Dim strComputer ' Имя компьютера
Dim strNamespace ' Имя пространства имен
Dim objWMIService ' Объект SWbemServices
Dim colServices ' Коллекция экземпляров класса WMI
Dim objService ' Элемент коллекции
Dim strResult ' Результирующая строка
Dim WshShell ' Объект WshShell
Dim Res

'********************** Начало *************************************
' Присваиваем начальные значения переменным
strComputer = "."
strNamespace = "Root\CIMV2"

' Подключаемся к пространству имен WMI
Set objWMIService = GetObject("WinMgmts:\\" & _
strComputer & "\" & strNamespace)
' Формируем коллекцию остановленных служб
Set colServices = objWMIService.ExecQuery("SELECT * FROM Win32_Service WHERE name = 'Alerter'")

' Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")

' Запрос на запуск служб
Res = WshShell.Popup("Запустить все остановленные службы?",0, _
"Работа со службами Windows",vbQuestion+vbYesNo)
If Res=vbYes Then
' Запускаем каждую остановленную службу
For Each objService In colServices
objService.StartService()
Next
WScript.Echo "Все остановленные службы запущены"
End If
'************************* Конец ***********************************
Автор: YNY
Дата сообщения: 14.11.2008 04:49

Цитата:
Liveofan

На самом деле через процесс авторана вирус производит "первое" заражение, а затем он прописывается на обычные комманды открытия папки\диска и по этой причине ты, отключив обработку авторана, только "себя" обезопасишь от проникновения вира на комп, но не других если вир у тя уже живет ) - если конечно твой антивир вдруг подобный вирус пропустит!

Добавлено:

Цитата:
Есть ли какой нибудь способ перестартовать все машины за исключением этих 5-ти?

Заранее благодарен!

Ответ: конечно есть и этот способ - написать соответствующий скрипт ))))

Добавлено:

Цитата:
Ilyha58343

по поводу того как запустить ранее писано неск способов, а именно:
1) psexec
2) копируй в шарную папку и запускай с каждого компа из под админа или от его имени
[more=Start-Stop Service(s)]

'*****************
dim Stat(24)
Stat(0)=" Success "
Stat(1)=" Not Supported "
Stat(2)=" Access Denied "
Stat(3)=" Dependent Services Running "
Stat(4)=" Invalid Service Control "
Stat(5)=" Service Cannot Accept Control "
Stat(6)=" Service Not Active "
Stat(7)=" Service Request Timeout "
Stat(8)=" Unknown Failure "
Stat(9)=" Path Not Found "
Stat(10)=" Service Already Running "
Stat(11)=" Service Database Locked "
Stat(12)=" Service Dependency Deleted "
Stat(13)=" Service Dependency Failure "
Stat(14)=" Service Disabled "
Stat(15)=" Service Logon Failure "
Stat(16)=" Service Marked For Deletion "
Stat(17)=" Service No Thread "
Stat(18)=" Status Circular Dependency "
Stat(19)=" Status Duplicate Name "
Stat(20)=" Status Invalid Name "
Stat(21)=" Status Invalid Parameter "
Stat(22)=" Status Invalid Service Account "
Stat(23)=" Status Service Exists "
Stat(24)=" Service Already Paused "
dim rezS
dim NC
    NC=0
rez=msgbox("Если Вы хотите ЗАПУСТИТЬ службу - нажмите ДА" &vbcrlf &vbCr&"Если Вы хотите ОСТАНОВИТЬ службу - нажмите НЕТ", vbYesNo ,"Запуск/Остановка службы")
'*****************
'да=6
'нет=7

'msgbox rez
if (rez=7) then msg="остановить"
if (rez=6) then msg="запустить"
NC=inputBox("Укажите имя службы которую Вы хотите "& msg & " и нажмите ОК!","Запуск/Остановка конкретной службы","")
A1()


Sub A1()
'msgbox NC
if (NC<>"") then
NC="'"&NC&"'"
msgbox NC
strComputer = "."
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

    
    Set colSoftware = objWMIService.ExecQuery ("Select * FROM Win32_Service WHERE Name =" & NC )
    if (rez=7) then
    'msgbox "START"
         For Each objSoftware in colSoftware
            msgbox Stat(objSoftware.StopService()) , ,"Результат операции " & "< "& msg &" службу с именем " & NC &" >"
            
         Next
    elseif (rez=6) then
        'старт соответственно
        For Each objSoftware in colSoftware
            msgbox Stat(objSoftware.StartService() ) , ,"Результат операции " &"< "& msg &" службу с именем " & NC &" >"
            
        Next
    end if

end if
End Sub


[/more]

Добавлено:
еще есть в реестре - сам не искал конкретные - ключи относящиеся к групповым политикам + "выполнить\mmc>Файл\Добавить остнаску>Добавить(Add)\Групповая политика" и там либо на вкл\выкл компа или вх\вых пользователя

Добавлено:

Цитата:
минус нельзя указать какую службу запустить

ну а тогда, в твоем примере что же я выделил жирным???

Цитата:
Set colServices = objWMIService.ExecQuery("SELECT * FROM Win32_Service WHERE name = 'Alerter'")


Автор: Ilyha58343
Дата сообщения: 14.11.2008 10:13
YNY За psexe большое спасибо! Прога рульная но вот вопрос по ней. пытаюсь psexec выполнить скрипт таким образом
psexec.exe \\computername -u domen\user -p password cmd.exe /c \\server\key\lic\ChangeVLKey2600.vbs M8DDB-HDJW8-MG97W-XGX4J-7FYXG, скрипт проходит нормально, но в ответ консольпа стопорится и следующая команда не проходит. В чем трабла?
Автор: YNY
Дата сообщения: 17.11.2008 08:22

Цитата:
Ilyha58343


Цитата:
консольпа стопорится и следующая команда не проходит

не совсем понял про консольпа, после смены ключа возмона надо перегружаться

Добавлено:
http://www.osp.ru/w/2004/06/177161/

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576

Предыдущая тема: BackUp Win2003Serer


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.