Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Создание txt файла при логине пользователя (http://forum.oszone.net/showthread.php?t=309278)

Fantastish 16-12-2015 17:24 2585450

Создание txt файла при логине пользователя
 
Доброго дня.
Встала такая задача и прошу вашей помощи в реализации.
Язык: CMD/BAT VBS
Цель:
При авторизации пользователя в системе и запуске Netlogon в скрытой шаре на сервере создавался бы файл вида
<login пользователя (учетная запись)>.txt
А во внутрь файла записывалось бы имя машины, на которой он залогинился, файл можно перетирать не дописывая.
можно даже плюс Ip адрес, если это не сложно.
и на всякий, если не сработал писал бы ошибку - типа time date error - error

пример: s.efremov.txt (внутри файла 9:05 15.12.2015 WS-01-0045 - 192.168.100.56)

Спасибо огромное.

Iska 16-12-2015 18:38 2585479

Код:

@echo off

>"\\Сервер\СкрытаяШараНаСервере$\%UserName%.txt" (
        <nul set /p sVar=%Time:~0,8% %Date% %ComputerName%
       
        for /f "usebackq tokens=2 delims=={}" %%i in (
                `wmic.exe NICCONFIG where "IPEnabled='True'" get DNSServerSearchOrder /value ^| find.exe /i "DNSServerSearchOrder"`
        ) do for %%j in (%%i) do <nul set /p sVar={%%~j}
       
        echo.
)

Цитата:

Цитата Fantastish
и на всякий, если не сработал писал бы ошибку - типа time date error - error »

«Не сработал» что?

Fantastish 16-12-2015 20:28 2585494

проверка доступности файла\шары\возможности записи в файл
и в зависимости от этого записать лог ошибки

Iska 16-12-2015 21:09 2585501

Цитата:

Цитата Fantastish
и в зависимости от этого записать лог ошибки »

Куда, простите, писать, если этот самый лог недоступен?!

Fantastish 17-12-2015 03:00 2585572

ну можно например в темп данной машины и перетирать его или дописывать =)
возможно отправлять по емаил, как вариант

Iska 17-12-2015 11:37 2585653

Код:

@echo off

set sDestPath=\\Сервер\СкрытаяШараНаСервере$

if exist "%sDestPath%\." (
        >"%sDestPath%\%UserName%.txt" (
                <nul set /p sVar=%Time:~0,8% %Date% %ComputerName%
               
                for /f "usebackq tokens=2 delims=={}" %%i in (
                        `wmic.exe NICCONFIG where "IPEnabled='True'" get DNSServerSearchOrder /value ^| find.exe /i "DNSServerSearchOrder"`
                ) do for %%j in (%%i) do <nul set /p sVar={%%~j}
               
                echo.
        )
) else (
        >"%Temp%\%UserName%.txt" echo %Time:~0,8% %Date% %ComputerName% Can't find destination path [%sDestPath%].
)

Ладно, сеть может отвалиться, DC быть недоступен, но «возможность записи в файл» не вижу никакого смысла проверять — данная возможность должна быть обеспечена до исполнения пакетного файла, как необходимое условие для его функционирования.

Fantastish 17-12-2015 12:07 2585667

Спасибо за помощь, буду тестировать

Fantastish 17-12-2015 12:47 2585692

протестировал
12:46:16 17.12.2015 11111111111111 {показал первый DNS сервер} {показал второй DNS сервер} а можно именно IP адрес машины вывести?

Iska 17-12-2015 13:30 2585724

Цитата:

Цитата Fantastish
{показал первый DNS сервер} {показал второй DNS сервер} а можно именно IP адрес машины вывести? »

Твою ж дивизию :). Это я когда тестировал на наличие нескольких IP-адресов, взял вместо предыдущего свойства IPAddress именно DNSServerSearchOrder и забыл после тестирования вернуть IPAddress вобрат.

Пробуйте:
Код:

@echo off

set sDestPath=\\Сервер\СкрытаяШараНаСервере$

if exist "%sDestPath%\." (
        >"%sDestPath%\%UserName%.txt" (
                <nul set /p sVar=%Time:~0,8% %Date% %ComputerName%
               
                for /f "usebackq tokens=2 delims=={}" %%i in (
                        `wmic.exe NICCONFIG where "IPEnabled='True'" get IPAddress /value ^| find.exe /i "IPAddress"`
                ) do for %%j in (%%i) do <nul set /p sVar={%%~j}
               
                echo.
        )
) else (
        >"%Temp%\%UserName%.txt" echo %Time:~0,8% %Date% %ComputerName% Can't find destination path [%sDestPath%].
)


Fantastish 17-12-2015 13:55 2585736

Огромное спасибо
а если не секрет, наличие несколько - это имелось ввиду 2 и более интерфейсов или еще статически прописанных адресов

Iska 17-12-2015 16:17 2585790

Прежде всего — наличие нескольких IP-адресов на одном соединении.

Fantastish 17-12-2015 16:29 2585793

Понятно, в принципе это не так критично, хотя полезно определить интерфейс и расписать какой IP на нем

Iska 17-12-2015 18:04 2585822

В доменной сети, как правило, одно соединение и один адрес :).

Fantastish 18-12-2015 13:06 2586124

Уважаемый Iska
если добавить
>>"\\Сервер\СкрытаяШараНаСервере$\%UserName%.txt"
текстовый файл будет дописываться, для каждого пользователя?

Iska 18-12-2015 14:25 2586166

Цитата:

Цитата Fantastish
если добавить »

Наверное, Вы имели в виду «если «>» заменить на «>>»». Да, будет дописываться вместо перезаписи.

Fantastish 21-12-2015 10:00 2586957

Еще один момент

А реально ли определять RDP сессию, по версии Windows (2008/2012 любой версии) или же имени машины (если есть регламент наименования), или по другому способу, который не учитывает первые два способа?

Iska 21-12-2015 15:50 2587065

Поясните, что есть:
Цитата:

Цитата Fantastish
определять RDP сессию »

?

Fantastish 21-12-2015 16:58 2587096

Человек логинется по RDP (Подключение к удаленному рабочему столу) клиенту на локальный сервер в сети, допустим 1с и тд

Iska 21-12-2015 18:14 2587136

Ясно. Самым правильным будет использование такой техники: Detecting the Remote Desktop Services environment. То есть, как минимум, это PowerShell, но не пакетные файлы.

В принципе, можно попробовать указанное:
Цитата:

Цитата Fantastish
по версии Windows (2008/2012 любой версии) или же имени машины (если есть регламент наименования) »


Fantastish 21-12-2015 20:20 2587172

тогда самый простой наверно вариант тупо определять версию винды с разрядностью и дописывать ее в скобках - отсюда будет понятно что до как

Iska 21-12-2015 21:15 2587197

Fantastish, я гляжу, что мы так или иначе всё больше и больше плавно выходим за рамки пакетных файлов. Расскажите, что Вы делаете.

GreatAndPowerful 21-12-2015 23:19 2587217

Цитата Fantastish:
определять RDP сессию »
Да, вполне реально. Можно по наличию активного соединения:
Код:

netstat -p TCP -an|find ":3389 "|find "ESTABLISHED">nul&&set isRDPConnection=true
а можно и по характерным для rdp процессам:
Код:

tasklist /fi "imagename eq rdpclip.exe"|find "rdpclip">nul&&set isRDPConnection=true
или имени сессии:
Код:

tasklist /v /fo:csv /nh|find "RDP-Tcp">nul&&set isRDPConnection=true

Fantastish 22-12-2015 23:49 2587546

GreatAndPowerful, это при условии логона на удаленный рабочий стол, разве можно реализовать?

Iska, да простое логирование учеток на компах/сервере, чтобы потом помогать присоединяться к пользователям по DMW, так как будет использоваться сквозная нумерация машин
а спрашивать пользователя, а какое имя вашего компа, не есть хорошая манера, от сюда я и хочу отслеживать их авторизацию(логин)

Fantastish 23-12-2015 15:49 2587734

можно попробовать реализовать, данную схему?
Спасибо

Iska 24-12-2015 01:09 2587886

Fantastish, я видел подобные предложения. Дело за малым — проверить и убедиться, что не будет как ложно-положительных, так и ложно-отрицательных срабатываний. На это нужны подходящие условия исполнения, и время, и ещё раз время.

Fantastish 24-12-2015 09:56 2587935

Спасибо за помощь

Fantastish 29-12-2015 10:55 2589420

чутка апну, вдруг есть какие новости

Fantastish 11-01-2016 15:50 2593476

апну спасибо


Время: 15:13.

Время: 15:13.
© OSzone.net 2001-