Ну как бы вариантов реализовать много, и запуск батника из батника это один из самых скверных вариантов. Можно создавать ежегодный таск в шедулере, который будет стартовать всё это дело. Можно запускать батник, который проверяет совпадает ли текущая дата с датой рождения залогинившегося и является ли этот запуск первым за эту самую дату (привязывать правда опять же придется к тому самому шедулеру).
Для проигрывания звука есть вариант с posh:
Код:

(New-Object Media.SoundPlayer 'c:\Windows\Media\ding.wav').PlaySync()
А картинку отобразить (с его же помощью) можно
вот так.