При наличии в сети WINS-сервера список активных клиентов службы сообщений удобно получать через "NETSH WINS"... фишка в том, что при запуске компа и при регистрации пользователя служба сообщений регистрирует на WINS-сервере запись с кодом [03], а при выключении (штатном) освобождает эту запись... Т.е. список активных записей в норме соответствует списку компов/пользователей, готовых к получению сообщений. Из этого даже можно извлечь выгоду - не рассылать сообщения на машины без залогиненных пользователей.
Один минус - WINS не отличает компьютер от пользователя, поэтому сообщения могут уйти дважды... но обычно в организациях система именования пользователей и станций отличается, поэтому их можно фильтровать регулярным выражением (через FINDSTR) или применять другие методы (например, сверять со списком машин/пользователей). Для надежности и учета незапланированных отключений света можно совмещать с пингом, который привел выше
Petya V4sechkin. Пример команды "NETSH WINS":
Код:

@Echo Off
SetLocal EnableDelayedExpansion
Set $WINS=MyServer
For /F "Tokens=1 Delims=[ " %%i In ('Netsh WINS Server \\%$WINS% Show Database Servers^={} RecType^=2 EndChar^=3^|FindStr /IBRC:"................\[03h\]-D-A"') Do (
Set MSGCLIENT=%%i
@Echo !MSGCLIENT!
)