The msg command should already come with Windows. (At least it's here on XP.)
The general syntax is:
msg [/server <server>] <session> [<message>]
/server <server> is optional. Use it when you want to send the message to another computer. (This means almost always.)
<session> can be:
username of a logged in user; examples: Administrator, jsmith
"session name" of a connected session: console means the one that's currently using the monitor and keyboard. RDP sessions are named rdp-tcp#<number>.
numeric session ID; works for disconnected sessions too
* to send to all sessions on the computer. (This is equivalent to sending a message to a computer in net send.)
Use qwinsta or qwinsta /server <server> to list all currently existing sessions. (Or download "Windows 2003 Admin Tools" and use its tsadmin tool.)
Note that unlike with NetBIOS-based NET SEND, you can't send a message to an entire workgroup.
<message> is the text you want to send. If you don't specify any, then msg will wait for one to be typed in, until you enter CtrlZ on a line by itself.
For example:
msg /server snow console Hi there!
All these tools (msg, qwinsta, quser, qprocess, tskill, tscon, shadow) use Terminal Services RPC. On consumer versions of Windows, this RPC can only be accessed from the local machine and not over the network. To re-enable it, follow these instructions.
TL;DR summary: Run the following from an elevated Command Prompt.
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v AllowRemoteRPC /t REG_DWORD /d 1 /f
RPC is carried over the same protocol as File Sharing. If msg or qwinsta return an "Access denied" even after allowing remote RPC (see above), make sure you can access the other computer's files, authenticated (not as Guest).