Вытаскиваем Логин пользователя из Spark на Windows

Сканирование сети получение Логина пользователя
на основе скриптов cmd и bash
Базы Данных Mysql и Веб интерфейса отображения
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 367
Стаж: 2 года 9 месяцев
Откуда: Вологодская область
Контактная информация:

Вытаскиваем Логин пользователя из Spark на Windows

Сообщение Артём Мамзиков »

Spark — свободная программа для мгновенного обмена сообщениями в сети Интернет по протоколу Jabber.

Вытаскиваем Логин пользователя из Spark на Windows
Так спарк по умолчанию стартует вместе с windows и выйти из него нельзя, возможность убрана. Доменные учетные записи не везде , а нахождение сотрудника в спарке обязательно по его учетке (доменной в спарке) определим какой сотрудника за каким ПК находится. Учетная запись формате Фамилия Инициалы.

Login-spark.bat
@echo off
color 1a

:: Отправка данных одной строкой

:: Текущий IP Хоста
::for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FIND /I "192.168."') do set IPDNS=%%a
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do set IPDNS=%%a
Set IP=%IPDNS:~1%

:: Определение версию Windows
::For /f "tokens=4" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName^|FIND /I "Windows"') do (
For /f "tokens=4,5" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName^|FIND /I "ProductName"') do (
if /i %%b==XP (goto :WindowsXP) else (if /i %%a==Vista (goto :Windows7) else if /i %%a==7 (goto :Windows7) else if /i %%a==8 (goto :Windows7) else if /i %%a==8.1 (goto :Windows7) else if /i %%a==10 (goto :Windows7) else (goto :end)))

:WindowsXP
:: Запрос содержание данной директории профилей пользователей, В файле spark.properties найти строку username=Логин
for /f "tokens=1 " %%c in ('dir /A:D /B "C:\Documents and Settings"') do (
for /f "tokens=1 " %%d in ('FINDSTR /I "username=[a-z]" "C:\Documents and Settings"\%%c\Spark\spark.properties') do (
:: Учетка пользователя спарк, Имя, IP Хоста
if %%d == %%d (for /f "tokens=2 delims==" %%e in ('echo %%d') do curl -X POST -d "SPARK=LOGIN=%%e HOSTNAME=%COMPUTERNAME% IP=%IP%" https://DNS-IP.ru/glpi/data_server/data.php)
))
:: Запрос содержание данной директории профилей пользователй, В файле spark.properties найти строку username=Логин
for /f "tokens=1 " %%c in ('dir /A:D /B "C:\Documents and Settings"') do (
for /f "tokens=1 " %%d in ('FINDSTR /I "username=[a-z]" "C:\Documents and Settings\%%c\Application Data"\Spark\spark.properties') do (
:: Учетка пользователя спарк, Имя, IP Хоста
if %%d == %%d (for /f "tokens=2 delims==" %%e in ('echo %%d') do curl -X POST -d "SPARK=LOGIN=%%e HOSTNAME=%COMPUTERNAME% IP=%IP%" https://DNS-IP.ru/glpi/data_server/data.php)
))

goto:eof

:Windows7
:: Запрос содержание данной директории профилей пользователей, В файле spark.properties найти строку username=Логин
for /f "tokens=1 " %%c in ('dir /A:D /B C:\Users\') do (
for /f "tokens=1 " %%d in ('FINDSTR /I "username=[a-z]" C:\Users\%%c\AppData\Roaming\Spark\spark.properties') do (
:: Учетка пользователя спарк, Имя, IP Хоста
if %%d == %%d (for /f "tokens=2 delims==" %%e in ('echo %%d') do curl -X POST -d "SPARK=LOGIN=%%e HOSTNAME=%COMPUTERNAME% IP=%IP%" https://DNS-IP.ru/glpi/data_server/data.php)
))

:: Определение активных пользователей|Получаем sid пользователей|Получаем путь пользователя AppData\Roaming дириктории
for /f "skip=1 tokens=1 delims= " %%f in ('QUSER /server:%IP%') do (
for /f "skip=1 tokens=1 delims= " %%g in ('wmic useraccount where "name='%%f'" get sid^|findstr /r /v "^$"') do (
::for /f "skip=1 tokens=3 delims= " %%h in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CurrentVersion\ProfileList\%%g" /v ProfileImagePath') do set put=%%h
for /f "skip=1 tokens=3 delims= " %%h in ('reg query "HKEY_USERS\%%g\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v AppData') do (
for /f "tokens=1 " %%i in ('FINDSTR /I "username=[a-z]" %%h\Spark\spark.properties') do (
:: Учетка пользователя спарк, Имя, IP Хоста
if %%i == %%i (for /f "tokens=2 delims==" %%j in ('echo %%i') do curl -X POST -d "SPARK=LOGIN=%%j HOSTNAME=%COMPUTERNAME% IP=%IP%" https://DNS-IP.ru/glpi/data_server/data.php)
))))
goto:eof

:end

Вытягиваем путь для пользователя в доменной учётке
Показать
wmic useraccount where name='%username%' get sid
wmic useraccount where (name="Администратор" and domain="%computername%") get sid
whoami /user

Путь на профиль пользователя
HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CurrentVersion\ProfileList %sid%
значение ProfilesDirectory D:\Users
Значение присваивается в winlogon.exe в следующей последовательности:
winlogon.main();
winlogon.SetProfilesLocation();
profapi.GetBasicProfileFolderPath(5, 0, userprofilePath, MAX_PATH);
profapi.GetSidStringFromSelf(sid); //sid = L"S-1-5-21-2821893254-1530714858-2690302199-500"
profapi.vsnwprintf(regKey, L"%s\\%s", L"Software\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList", sid);
profapi.GetBasicProfileFolderPath(regKey);
RegOpenKeyEx(regKey);
RegQueryValueEx(L"ProfileImagePath")

profapi.SetEnvironmentVariable(L"USERPROFILE", userprofilePath);


HKEY_CURRENT_USER\Volatile Environment
HKEY_USERS\тут sid пользователя \Volatile Environment
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList,выберите нужный sid,задайте нужное значение
ProfileImagePath,например D:\Users\SafeZone

hklm\Software\Microsoft\Windows NT\ProfileList

HKEY_USERS\тут sid пользователя \Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKEY_USERS\тут sid пользователя \Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
HKEY_USERS\тут sid пользователя \Volatile Environment
запросить AppData

Скрипт для установки
Install-Login-spark.bat
@echo off
color 1a

TITLE install LoginSpark
:: Копируем скрипт на получение Логина из Spark и ставим его на автозапуск

:: Определение пути откуда запущен bat и копирование в Program Files батника Login-spark.bat для определенной рязрядности системы
Set xOS=x64
If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86
If %xOS%==x86 (xcopy "%~dp0"Login-spark.bat "C:\Program Files\Spark" /s /e /y /v) Else (xcopy "%~dp0"Login-spark.bat "C:\Program Files (x86)\Spark" /s /e /y /v)

:: 2Варианта для авто запуска при включении Автозагрузка и Планировщик заданий с определением разрядности нам нужна пака 32 битная
Set xOS=x64
If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86
If %xOS%==x86 (reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v LoginSpark /d "C:\Program Files\Spark\Login-spark.bat" /f & SCHTASKS /Create /SC DAILY /tn "LoginSpark" /TR "'C:\Program Files\Spark\Login-spark.bat'" /ST 10:01:00 /F) Else (reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v LoginSpark /d "C:\Program Files (x86)\Spark\Login-spark.bat" /f & SCHTASKS /Create /SC DAILY /tn "LoginSpark" /TR "'C:\Program Files (x86)\Spark\Login-spark.bat'" /ST 10:01:00 /F)

:: Автозапуск
::reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v LoginSpark /d C:\Program Files (x86)\Spark\Login-spark.bat /f
::reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v LoginSpark /d C:\Program Files\Spark\Login-spark.bat /f
:: Уже готовая задача в XML делаем импорт (от Администратора)
::SCHTASKS /Create /tn "LoginSpark" /XML "%~dp0LoginSpark-x64.xml"
::SCHTASKS /Create /tn "LoginSpark" /XML "%~dp0LoginSpark-x86.xml"
:: Планировщик задач создание задачи
::SCHTASKS /Create /SC DAILY /tn "LoginSpark" /TR "'C:\Program Files (x86)\Spark\Login-spark.bat'" /ST 10:01:00 /F
::SCHTASKS /Create /SC DAILY /tn "LoginSpark" /TR "'C:\Program Files\Spark\Login-spark.bat'" /ST 10:01:00 /F
:: Папка Автозагрузки в нее нужно скоприровать батника
::C:\Users\Пользователь\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
::C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

1 Установка Curl если не установлен и добавление переменной на его
Само распаковывающийся архив мы сделали в предыдущем посте
Установка Curl на Windows самораспаковывающимся архивом
2 Как его сделать я рассказывал 7-Zip и Саморапаковываюшийся архив SFX
Планировщик заданий либо создать командой или сделать в экспорт xml для единого пользователя
Пример
LoginSpark-x64.xml
Показать
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2020-08-06T12:12:38</Date>
<Author>1</Author>
</RegistrationInfo>
<Triggers>
<CalendarTrigger>
<StartBoundary>2020-08-06T10:01:00</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByDay>
<DaysInterval>1</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-19</UserId>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>true</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>false</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>true</WakeToRun>
<ExecutionTimeLimit>PT1H</ExecutionTimeLimit>
<Priority>7</Priority>
<RestartOnFailure>
<Interval>PT5M</Interval>
<Count>3</Count>
</RestartOnFailure>
</Settings>
<Actions Context="Author">
<Exec>
<Command>"C:\Program Files\Spark\Login-spark.bat"</Command>
</Exec>
</Actions>
</Task>
LoginSpark-x86.xml
Показать
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2020-08-06T12:12:38</Date>
<Author>1</Author>
</RegistrationInfo>
<Triggers>
<CalendarTrigger>
<StartBoundary>2020-08-06T10:01:00</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByDay>
<DaysInterval>1</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-19</UserId>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>true</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>false</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>true</WakeToRun>
<ExecutionTimeLimit>PT1H</ExecutionTimeLimit>
<Priority>7</Priority>
<RestartOnFailure>
<Interval>PT5M</Interval>
<Count>3</Count>
</RestartOnFailure>
</Settings>
<Actions Context="Author">
<Exec>
<Command>"C:\Program Files (x86)\Spark\Login-spark.bat"</Command>
</Exec>
</Actions>
</Task>
Все это в само распаковывающийся архив после еще раз в архив и установка через ocs агентов
Скачать пример скриптов
Windows-Spark-Login.7z
Windows-Spark-Login.7z
(2.62 КБ) 5 скачиваний
До вывода в одну строку
Показать
@echo off
color 1a

:: Текущий IP Хоста
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IPv4"^|FIND /I "192.168.1"') do set IPDNS=%%a
echo %IPDNS%

:: Текущее Имя Хоста
echo %COMPUTERNAME%

:: Определение версию Windows
::For /f "tokens=4" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName^|FIND /I "Windows"') do (
For /f "tokens=4,5" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName^|FIND /I "ProductName"') do (
if /i %%b==XP (goto :WindowsXP) else (if /i %%a==Vista (goto :Windows7) else if /i %%a==7 (goto :Windows7) else if /i %%a==8 (goto :Windows7) else if /i %%a==8.1 (goto :Windows7) else if /i %%a==10 (goto :Windows7) else (goto :end)))

:WindowsXP
:: Запрос содержание данной директории профилей пользователй, В файле spark.properties найти строку username=Логин
for /f "tokens=1 " %%c in ('dir /B "C:\Documents and Settings"') do (
for /f "tokens=1 " %%d in ('FINDSTR /I "username=[a-z]" "C:\Documents and Settings"\%%c\Spark\spark.properties') do (
:: Учетка пользователя спарк
if %%d == %%d (echo %%d)
)
)
pause
goto :end

:Windows7
:: Запрос содержание данной директории профилей пользователй, В файле spark.properties найти строку username=Логин
for /f "tokens=1 " %%c in ('dir /B C:\Users\') do (
for /f "tokens=1 " %%d in ('FINDSTR /I "username=[a-z]" C:\Users\%%c\AppData\Roaming\Spark\spark.properties') do (
:: Учетка пользователя спарк
if %%d == %%d (echo %%d)
)
)
pause
goto :end

:end

:: Автозапуск
::C:\>reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v LoginSpark /d C:\1.bat /f
:: Планировщик задач создание задачи
SCHTASKS /Create /SC DAILY /tn "LoginSpark" /TR "'C:\1.bat'" /ST 10:01:00 /F
:: Уже готовая задача в XML делаем импорт (от Администратора)
SCHTASKS /Create /tn "LoginSpark" /XML "%~dp0OLoginSpark.xml"
количество слов: 1486

Вернуться в «Сканирование сети получение Логина пользователя»