You can use a logon script and a batch script to determine which client computer names are still active in your domain, what servers they get validated against, and which computer names haven't logged on since a specified date (or never logged on).

The code for the logon script requires that you create a share on each logon server, with a share name Computer$. Place one file in this folder (@echo . > \\ServerName\Computer$\ServerName.lcn) using the proper case of ServerName. Grant a minimum of Change permission on the share and the following NTFS permissions:

Everyone Special Directory Access (RWX)
Everyone Special File Access (RWXD)
Administrators       Full Control
System Full Control

For your non-WinNT clients, define %COMPUTERNAME% and %LOGONSERVER% using WINSET.EXE and SETL.

Add the following line to your logon script:

@echo . > %LOGONSERVER%\Computer$\%ComputerName%.lcn

To generate a report of computer names that have not logged on since YYYYMMDD, in a format similar to:

Computer Name       LOGONSERVER       LAST LOGON
Computer1 DC1 YYYYMMDD
Computer2 DC2 YYYYMMDD
Computer3 None Never
Computer4 DC1 YYYYMMDD

run (on a domain controller) CNLL /D:YYYYMMDD DC1 \[DC2 DC3 ... DCn\]

where DCx are the names of your domain controllers, in their proper case. CNLL.RPT is created in the current folder. CNLL.bat contains:

@echo off
setlocal
set param=%1
if "%param:~0,1%"

"/" goto wparam
:syntax
@echo syntax CNLL /D:YYYYMMDD DC1 \[DC2 DC3 ...DCn\] or CNLL /A DC1 \[DC2 DC3 ...DCn\]
if exist sort*.tmp del /q sort*.tmp
if exist cnll.rpt del /q cnll.rpt
endlocal
goto end
:notfnd
@echo %url% NOT FOUND
goto syntax
:wparam
if /i "%param:~1,1%"

"A" set rpt=A&goto dc
if /i "%param:~1,1%"

"L" set rpt=L&goto dc
if /i "%param:~1,2%"

"D:" set rpt=D&goto symd
goto syntax
:symd
set ymd=%param:~3,8%
:dc
if "%2"

"" goto syntax
if exist sort*.tmp del /q sort*.tmp
if exist cnll.rpt del /q cnll.rpt
for /f "tokens=1,2,3,4* delims=/ " %%i in ('date /t') do set day=%%i&set mm=%%j&set dd=%%k&set yy=%%l
if %yy% GTR 99 goto tymd
if %yy% GTR 97 set /a yy=19%yy%&goto tymd
set /a yy=20%yy%
:tymd
set td=%yy%%mm%%dd%
set bcn=                                                               #
set bcn=%bcn:~0,25%
:get
shift
if "%1"

"" goto sam
set lcn=%1
set lcn=%lcn:"=%
set url="\\%lcn%\Computer$"
if not exist %url%\*.* goto notfnd
set flcn=N
for /f "Skip=4 tokens=1-3*" %%i in ('dir %url%\*.lcn /ON') do call :cn %%i "%%l"
if "%flcn%"

"Y" goto get
@echo %lcn%,%td%,%lcn%>> sortin.tmp
goto get
:cn
set cname=%2
set cname=%cname:.lcn=%
set cname=%cname:"=%
for /f "Tokens=1-3 Delims=/" %%i in ('@echo %1') do call :when %%i %%j %%k
goto end
:when
if "%3"

"" goto end
set /a yy=%3
if %yy% GTR 99 goto mymd
if %yy% GTR 97 set /a yy=19%yy%&goto mymd
set /a yy=20%yy%
:mymd
if /i "%lcn%" EQU "%cname%" set flcn=Y
set fymd=%yy%%1%2
:mymdsrt
@echo %cname%,%fymd%,%lcn%>> sortin.tmp
goto end
:sam
regedit /e reg.tmp "HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names"
for /f "Tokens=8 Delims=\" %%i in (reg.tmp) do call :ismbr %%i
del /q reg.tmp
sort < sortin.tmp > sortout.tmp
del /q sortin.tmp
set lcn=Computer Name                                                  #
set rls=LOGONSERVER                                                    #
set rymd=LAST LOGON
set rcn=%lcn:"=%                                                       #
set rcn=%rcn:~0,25%
set rls=%rls:"=%                                                       #
set rls=%rls:~0,25%
@echo %rcn%%rls%%rymd%>> CNLL.RPT
set lcn=" "
set acn="X"
set rymd=00000000
for /f "Tokens=1-3 Delims=," %%i in (sortout.tmp) do call :report "%%i" %%j "%%k"
if "%rpt%"

"L" goto reporte
if "%rpt%"

"A" goto reporte
if "%rymd%" GTR "%ymd%" goto finish
:reporte
set rcn=%lcn:"=%                                                       #
set rcn=%rcn:~0,25%
set rls=%rls:"=%                                                       #
set rls=%rls:~0,25%
if "%rymd%"

"00000000" set rymd=Never
if "%rpt%"

"A" goto reportf
@echo %rcn%%rls%%rymd%>> CNLL.RPT
:finish
del /q sortout.tmp
endlocal
goto end
:reportf
if "%rcn%"

"%acn%" set rcn=%bcn%
@echo %rcn%%rls%%rymd%>> CNLL.RPT
goto finish
:ismbr
set tst=%1
set mbr=%tst:$\]=%
if "%mbr%"

"%tst%" goto end
@echo %mbr%,00000000,None>> sortin.tmp
goto end
:report
if /i %lcn%

%1 goto newcn
if /i %lcn%

" " goto newcna
if "%rpt%"

"L" goto reportit
if "%rpt%"

"A" goto reportit
if "%rymd%" GTR "%ymd%" goto newcna
:reportit
set rcn=%lcn:"=%                                                       #
set rcn=%rcn:~0,25%
if "%rcn%"

"%acn%" set rcn=%bcn%
set rls=%rls:"=%                                                       #
set rls=%rls:~0,25%
if "%rymd%"

"00000000" set rymd=Never
@echo %rcn%%rls%%rymd%>> CNLL.RPT
set acn=%lcn:"=%                                                       #
set acn=%acn:~0,25%
goto newcna
:newcn
if not "%rpt%"

"A" goto newcna
if "%rymd%"

"00000000" goto newcna
set rcn=%lcn:"=%                                                       #
set rcn=%rcn:~0,25%
if "%rcn%"=="%acn%" set rcn=%bcn%
set rls=%rls:"=%                                                       #
set rls=%rls:~0,25%
@echo %rcn%%rls%%rymd%>> CNLL.RPT
set acn=%lcn:"=%                                                       #
set acn=%acn:~0,25%
:newcna
set lcn=%1
set rymd=%2
set rls=%3
:end
To run a report showing the computer name activity on each DC (most recent), run CNLL /A DC1 \[DC2 DC3 ... DCn\].

To run a report showing the latest (most recent) computer name activity, run CNLL /L DC1 \[DC2 DC3 ... DCn\].