Собственно, сделал предложенным способом, только немного модифицировал: скрипт не пробегает по всему домену, а запускается от каждого пользователя, причем с проверкой - если в дескрипшине у компьютера в АД уже есть такая же информация, которую он потенциально может записать, то ничего не делает. Если там что-то другое - то пишет.
Да, кстати, информацию по пользователю берет не из АД, а из реестра (правда, получается, что имя прошлого залогиненного пользователя).
Собственно, вот скрипт:
Код:
@echo off
setlocal ENABLEDELAYEDEXPANSION
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName') DO SET LastLogonUsername=%%B
ECHO Last Logon Username=%LastLogonUsername%
set domain=
set user=
set comp=%computername%
for /f "tokens=2,3 delims==\" %%d in ('wmic /failfast:on /output:STDOUT /node:"!comp!" ComputerSystem get username /format:value 2^> nul ^| find "="') do (
set user=%%~e
set domain=%%~d
set domain=!domain:~0!
if /i "%userdomain%"=="!domain!" (
set user=!LastLogonUsername!
net user "!user!" /domain > nul 2>&1 && (
for /f "delims=" %%u in ('dsquery user -samid "!user!" -scope subtree -o dn ^| dsget user -fn -mi -ln -display -L 2^> nul ^| find ": "') do (
set name=%%~u
set name=set !name:: ==!
!name!
)
set fullname=!fn! !mi! !ln!
set fullname=!fullname:"='!
set display=!display:"='!
dsquery computer -name "!comp!" | dsget computer -desc > c:\windows\temp\availabilty.txt
for /F "eol=d tokens=1,2,3 delims= " %%i in (c:\windows\temp\availabilty.txt) do set availabilty=%%i %%j %%k && echo "!availabilty!" && echo "!display! "
if "!availabilty!" NEQ "!display! " (
dsquery computer domainroot -name "!comp!" -scope subtree -o dn | dsmod computer -desc "!display!" 2> nul && echo !comp! - !fullname! (!display!^)
) else (
echo Equal
)
)
)
)