Войти

Показать полную графическую версию : BAT'ник собирающий информацию о системе


Fometra
21-08-2017, 13:50
Нужно сделать батник, который будет собирать нужную информацию о системе и записывать её в ТХТ
Собрать нужно вот что:
IP внешний (реализовал)
Логин под которым сейчас зашел в систему (реализовал)
Название ОС (реализовал)
Общее количество пользователей в системе (реализовал)
Название процессора (реализовал)
Количество ядер (реализовал)
Частота процессора (реализовал)
Количество ОЗУ (реализовал)
Дата чека (реализовал)
UPTIME системы (работает только отдельным BAT'ником)
Тип учетной записи Админская или юзерская (работает только отдельным BAT'ником)

Порыскав форум и гугл удалось почти всё реализовать самому, только есть не большие проблемы
Вот сам код РАБОЧЕГО батника, он определяет ВНЕШНИЙ ip адрес, собирает всю необходимую информацию
и записывает всё в ТХТ с именем вашего IP (пример 178.254.125.22.txt)

@echo off
::::::::::::::
::Узнать IP ::
::::::::::::::
echo option explicit>>ip.vbs
echo dim http:set http=createobject("msxml2.serverxmlhttp")>>ip.vbs
echo http.open "get","http://icanhazip.com",false>>ip.vbs
echo http.send>>ip.vbs
echo wscript.stdout.write http.responsetext>>ip.vbs
echo set http=nothing>>ip.vbs
cscript //b ip.vbs>info.txt
del ip.vbs


:::::::::::::::::::::::::::
:: Записать ЛОГИН в файл ::
:::::::::::::::::::::::::::
echo LOGIN: %UserName% >> info.txt
echo ********************************************** >> info.txt
::::::::::::::::::::::::::
:: Записать название ОС ::
::::::::::::::::::::::::::
if defined ProgramFiles(x86) (set oper=x64) else (set oper=x32)
FOR /F "tokens=1* delims==" %%A IN ('wmic os get caption /Format:List ^| FIND "="') DO set "s=%%~B"
echo █ OS: %s% %oper% >> info.txt

:::::::::::::::::::::::::::::::::::::::
:: Записать количество пользователей ::
:::::::::::::::::::::::::::::::::::::::
For /F "tokens=2 Delims==" %%J In ('wmic os get numberofusers /Value^|FindStr .') Do set "us=%%J"
echo █ NUMBER OF USERS: %us% >> info.txt

::::::::::::::::::::::::::::::::::
:: Записать название процессора ::
::::::::::::::::::::::::::::::::::
For /F "tokens=2 Delims==" %%J In ('WMIC CPU Get Name /Value^|FindStr .') Do set "CPU=%%J"
echo █ CPU: %CPU% >> info.txt

::::::::::::::::::::::::::::::
:: Записать количество ядер ::
::::::::::::::::::::::::::::::
FOR /F "tokens=1* delims==" %%A IN ('WMIC CPU Get numberofcores /Format:List ^| FIND "="') DO set "core=%%~B"
echo █ CORE: %core% >> info.txt

::::::::::::::::::::::::::::::::::::::::::
:: Записать тактовую частоту процессора ::
::::::::::::::::::::::::::::::::::::::::::
FOR /F "tokens=1* delims==" %%A IN ('WMIC CPU Get currentclockspeed /Format:List ^| FIND "="') DO set "s=%%~B"
echo █ FREQUENCY: %s% Mhz >> info.txt

:::::::::::::::::::::::::::::
:: Записать количество RAM ::
:::::::::::::::::::::::::::::
FOR /F "tokens=1* delims==" %%A IN ('WMIC os get totalvisiblememorysize /Format:List ^| FIND "="') DO set "su=%%~B"
set /a sss=%su%/1024
echo █ RAM: %sss% %uu% Mb >> info.txt

::::::::::::::::::::::::
:: Записать дату чека ::
::::::::::::::::::::::::
echo █ CHECK TIME: %DATE% (%TIME%) >> info.txt

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::Прочитать IP из файла выше и создать с именем IP txt файл ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal EnableDelayedExpansion
set /p "line="< "info.txt"
ren info.txt %line%.txt


Необходимо в этот батник добавить возможность определения админправ (Админская учетка или нет)
Нашел в интернете такой код, в отдельном BAT'нике он хорошо работает и показывает тип учетной записи,
а если добавляю его в основной код, то ничего не работает

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (
`wmic.exe Group where "LocalAccount=TRUE AND SID = 'S-1-5-32-544'" get Name /value ^| find.exe /i "Name"`
) do set sAdminGroup%%i

if defined sAdminGroupName (
echo [%sAdminGroupName%] >> info.txt
)

endlocal
exit /b 0


Еще необходимо добавить определение АПТАЙМА системы, нашел вот такой код,
в отдельном BAT'нике он работает, если добавить в основной код, то тоже работает,
но в TXT записывает почему то 2 раза аптайм, это не красиво и нужно бы с этим разобраться

::UPTIME
@echo off
for /f "delims=" %%a in ('wmic OS Get LastBootUpTime ^| find "."') do set up=%%a
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
set beg=%up:~0,4%-%up:~4,2%-%up:~6,2%T%up:~8,2%-%up:~10,2%-%up:~12,2%-%up:~15,3%
set end=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%T%dt:~8,2%-%dt:~10,2%-%dt:~12,2%-%dt:~15,3%
call :TimeDifference uptime %end% %beg%
echo %beg%
echo %end%
echo UPTIME: %uptime% >> info.txt
:TimeDifference Return_Variable Start_Date_Time Stop_Date_Time
SetLocal EnableExtensions EnableDelayedExpansion
For /F "tokens=1-14 delims=T/:-., " %%a in ("%~2 %~3") Do (
Set "h2=0%%d" & Set "h3=0%%k" & Set "n2=%%g00" & Set "n3=%%n00"
Set /A "y2=%%a, m2=1%%b-100, d2=1%%c-100, h2=1!h2:~-2!-100, i2=1%%e-100, s2=1%%f-100, n2=1!n2:~0,3!-1000"
Set /A "y3=%%h, m3=1%%i-100, d3=1%%j-100, h3=1!h3:~-2!-100, i3=1%%l-100, s3=1%%m-100, n3=1!n3:~0,3!-1000"
)
Set /A "t2=((h2*60+i2)*60+s2)*1000+n2, t3=((h3*60+i3)*60+s3)*1000+n3"
Set /A "a=(14-m2)/12, b=y2-a, j2=(153*(12*a+m2-3)+2)/5+d2+365*b+b/4-b/100+b/400"
Set /A "a=(14-m3)/12, b=y3-a, j3=(153*(12*a+m3-3)+2)/5+d3+365*b+b/4-b/100+b/400"
Set /A "d=j3-j2, t=t3-t2"
If %d% LEQ 0 (If %d% LSS 0 (Set /A "d=j2-j3, t=t2-t3") Else If %t% LSS 0 (Set /A "t=t2-t3"))
If %t% LSS 0 (Set /A "t+=(1000*60*60*24), d-=1")
Set /A "n=t %% 1000, t/=1000, s=t %% 60, t/=60, m=t %% 60, t/=60"
EndLocal & Set "%~1=%d% days, %t% hours, %m% minutes"
pause>nul


После запуска BAT'ника хочу чтобы собранная информация выглядела вот так:

196.223.213.23
LOGIN: ROOT
ACCOUNT TYPE: [Administrator]
**********************************************
█ OS: Microsoft Windows 7 Ultimate x64
█ NUMBER OF USERS: 1
█ CPU: Intel(R) Core(TM) i5-4570 CPU @ 3.20GHz
█ CORE: 4
█ FREQUENCY: 3201 Mhz
█ RAM: 8097 Mb
█ CHECK TIME: 21.08.2017 (13:36:57,23)
█ UPTIME: 0 days, 2 hours, 34 minutes
**********************************************

Fometra
21-08-2017, 13:59
Забыл уточнить, все команды естественно нашел в интернете и собрал в один BAT'ник, сам в этом практически ничего не понимаю, поэтому не пинайте)
И еще такая проблема: сам код сначала создает файл info.txt и записывает в него всю информацию, а в конце переименовывает info.txt в IP_сервера (расширение почему-то не пишется). Как исправить?

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::Прочитать IP из файла выше и создать с именем IP txt файл ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal EnableDelayedExpansion
set /p "line="< "info.txt"
ren info.txt %line%.txt




© OSzone.net 2001-2012