Skip navigation

JSI Tip 9130. How can I schedule a user log off after nnn minutes of inactivity, on all my domain workstations?

I have scripted IOff.bat to schedule a user log off after nnn minutes of inactivity, on all the domain workstations.

IOff.bat uses PsShutdown.exe, which it will copy to each workstation. To schedule the task, IOff.bat uses SchTasks.exe, which is built into Windows XP, Windows Server 2003, and later. It is best to run IOff.bat from Windows XP, or Windows Server 2003, while logged on as a member of the Domain Admins group, but you could run it from your Windows 2000 workstation if you implement tip 5335.

The syntax for using IOff.bat is:

IOff IdleMinutes folder

Where IdleMinutes is the number of minutes, between 1 and 999, that the user must be idle before they are logged off, and folder is the path to  PsShutdown.exe on the workstation that runs IOff.bat. PsShutdown.exe will be copied to this path on all the workstations. If folder does NOT exist on a member computer, it will be created.

NOTE: IOff.bat does NOT schedule the IOff task on the workstation that runs IOff.bat.

NOTE: IOff.bat uses NETDOM.EXE to enumerate domain workstations. NETDOM.EXE is built into Windows XP and later, or installed on the Windows 2000 computer that runs IOff.bat, from the Support Tools on the operating system CD-ROM.

IOff.bat contains:

@echo off
if \{%2\}==\{\} @echo Syntax: IOff IdleMinutes folder&goto :EOF
setlocal
set wrk=%1
set /a IM=1000%wrk%%%1000
if "%wrk%" NEQ "%IM%" @echo Syntax: IOff %wrk% not valid, 1-999&endlocal&goto :EOF
if %IM% LSS 1 @echo Syntax: IOff %wrk% not valid, 1-999&endlocal&goto :EOF
if %IM% GTR 999 @echo Syntax: IOff %wrk% not valid, 1-999&endlocal&goto :EOF
set folder=%2
set lcl=%folder%
set lcl=%lcl:"=%
if not exist %folder% @echo IOff - %folder% NOT found.&endlocal&goto :EOF
set folder=%folder::=$%
set folder=%folder:"=%
set fnd1=findstr /V /I /L /C:"List of workstations with accounts in the domain:"
set fnd2=findstr /V /I /L /C:"The command completed successfully."
set fnd3=findstr /V /I /L /C:"%ComputerName%"
for /f "Tokens=*" %%c in ('netdom query WORKSTATION /DOMAIN:%USERDNSDOMAIN%^|%fnd1%^|%fnd2%^|%fnd3%') do (
 set computer=%%c
 call :doit
)
endlocal
goto :EOF
:doit
if not exist \\%computer%\c$ @echo %computer% NOT available&goto :EOF
if not exist \\%computer%\%folder% MD \\%computer%\%folder%
call :cpy>nul 2>&1
call :sch
goto :EOF
:cpy
copy %lcl%\PsShutDown.exe \\%computer%\%folder%\*.*
goto :EOF
:sch
@echo SCHTASKS.exe /Create /RU "SYSTEM" /SC ONIDLE /I %IM% /TN "IOff" /TR "%lcl%\PsShutdown.exe -O -F" /S %computer%
SCHTASKS.exe /Create /RU "SYSTEM" /SC ONIDLE /I %IM% /TN "IOff" /TR "%lcl%\PsShutdown.exe -O -F" /S %computer%



Hide comments

Comments

  • Allowed HTML tags: <em> <strong> <blockquote> <br> <p>

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
Publish