Показать полную графическую версию : Создание txt файла при логине пользователя
Fantastish
16-12-2015, 17:24
Доброго дня.
Встала такая задача и прошу вашей помощи в реализации.
Язык: 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)
Спасибо огромное.
@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.
)
и на всякий, если не сработал писал бы ошибку - типа time date error - error »
«Не сработал» что?
Fantastish
16-12-2015, 20:28
проверка доступности файла\шары\возможности записи в файл
и в зависимости от этого записать лог ошибки
и в зависимости от этого записать лог ошибки »
Куда, простите, писать, если этот самый лог недоступен?!
Fantastish
17-12-2015, 03:00
ну можно например в темп данной машины и перетирать его или дописывать =)
возможно отправлять по емаил, как вариант
@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
Спасибо за помощь, буду тестировать
Fantastish
17-12-2015, 12:47
протестировал
12:46:16 17.12.2015 11111111111111 {показал первый DNS сервер} {показал второй DNS сервер} а можно именно IP адрес машины вывести?
{показал первый 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
Огромное спасибо
а если не секрет, наличие несколько - это имелось ввиду 2 и более интерфейсов или еще статически прописанных адресов
Прежде всего — наличие нескольких IP-адресов на одном соединении.
Fantastish
17-12-2015, 16:29
Понятно, в принципе это не так критично, хотя полезно определить интерфейс и расписать какой IP на нем
В доменной сети, как правило, одно соединение и один адрес :).
Fantastish
18-12-2015, 13:06
Уважаемый Iska
если добавить
>>"\\Сервер\СкрытаяШараНаСервере$\%UserName%.txt"
текстовый файл будет дописываться, для каждого пользователя?
если добавить »
Наверное, Вы имели в виду «если «>» заменить на «>>»». Да, будет дописываться вместо перезаписи.
Fantastish
21-12-2015, 10:00
Еще один момент
А реально ли определять RDP сессию, по версии Windows (2008/2012 любой версии) или же имени машины (если есть регламент наименования), или по другому способу, который не учитывает первые два способа?
Поясните, что есть:
определять RDP сессию »
?
Fantastish
21-12-2015, 16:58
Человек логинется по RDP (Подключение к удаленному рабочему столу) клиенту на локальный сервер в сети, допустим 1с и тд
Ясно. Самым правильным будет использование такой техники: Detecting the Remote Desktop Services environment (https://msdn.microsoft.com/en-us/library/aa380798.aspx). То есть, как минимум, это PowerShell, но не пакетные файлы.
В принципе, можно попробовать указанное:
по версии Windows (2008/2012 любой версии) или же имени машины (если есть регламент наименования) »
Fantastish
21-12-2015, 20:20
тогда самый простой наверно вариант тупо определять версию винды с разрядностью и дописывать ее в скобках - отсюда будет понятно что до как
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.