Um script Powershell pode ser conectado a eventos do Lync, se o SDK do Lync estiver instalado (em particular, uma dll chamada Microsoft.Lync.Model.Dll.
Você o importaria com uma declaração como esta:
import-module "C:\Program Files (x86)\Microsoft Lync\SDK\Assemblies\Desktop\Microsoft.Lync.Model.Dll"
Então você pegaria o objeto cliente assim:
$client = [Microsoft.Lync.Model.LyncClient]::GetClient()
Finalmente, você precisa se conectar aos eventos em que deseja atuar:
$i = 0
# For each conversation
foreach ($con in $client.ConversationManager.Conversations) {
# For each participant in the conversation
$con.Participants | Where { !$_.IsSelf } | foreach {
Register-ObjectEvent -InputObject $_.Modalities[1] -EventName "InstantMessageReceived" -SourceIdentifier "person $i" -action { newInstantMessage }
$i++
}
}
Cada objeto de conversa (abrir janela / aba IM) tem pelo menos dois participantes (às vezes) a mais, o código acima verifica cada uma dessas conversas e cada participante, mas ignora o participante que é "você" (IsSelf). Este código dispara a função newInstantMessage toda vez que alguém envia uma mensagem para você.
Mais importante, você precisa de algo no final do script do powershell para impedir que ele seja encerrado, enquanto (1) {} é suficiente. Por fim, convém também ligar o evento ConversationAdded e dentro desse registro novos eventos InstantMessageReceived. Caso contrário, funcionará apenas para conversas existentes.
Para aqueles que não estão interessados nos porcos e porquês, pretendo disponibilizar meu script publicamente no futuro próximo. Verifique o site da Growl For Windows.