Blah
Send a Message to Terminal Services users of a specified group
########################################################################
# Created with: SAPIEN Technologies, Inc., PrimalForms 2009 v1.1.10.0
# Created on: 10/19/2010 4:19 PM
# Created by: Kevin Curran
# Organization: Disorganized
########################################################################
param([switch]$debug)
#this will allow the write-debug information to be writen to the console
If ($debug) {$DebugPreference="Continue"}
$LogPath="$($env:systemdrive)\scripts\logs\"
$TranscriptLog = $LogPath + "PopUpMessage_" + $(get-date -uformat "%Y-%m-%d") + "_Transcript.log"
Start-Transcript $TranscriptLog
$StartTime = Get-Date
IF (Get-PSSnapin | where {$_.name -eq "quest.activeroles.admanagement"})
{write-host "Quest Active Roles snapin already loaded"}
Else
{add-PSSnapin quest.activeroles.admanagement}
#this module is not signed allow the import
Set-ExecutionPolicy -Scope process unrestricted -Force
Import-Module PSTerminalServices
Write-Host "DebugPreference: $DebugPreference"
#$Group = "Domain Admins"
$Group = "TEST USERS"
$PopupMessage = "Hey there how are you doing."
#Build a list of servers
$Servers = Get-QADComputer -SearchRoot 'blah.corp/Domain Controllers'
foreach ($Server in $Servers)
{
#query each server for the list of Terminal Services sessions that have a username
Write-Debug "Get the list of TS Sessions for $($Server.Name)"
#this seems to terminate the script if it gets an error even if you use the -ErrorAction
#trying to catch error
try
{
$TSSessions = Get-TSSession -ComputerName $($Server.Name) | where {$_.Username -ne ""}
}
Catch
{
write-host -ForegroundColor red "Error: Failed to get sessions from machine (Error:" $_.Exception.Message ")"
write-host
#continue #not sure why continue doesn't actually continue
}
#if there are no sessions move on to the next server
if ($TSSessions -eq $null)
{
Write-Host "$($Server.Name) has no open Terminal Services Sessions"
}
Else
{
#query each session on the server
foreach ($session in $TSSessions)
{
#If you are a member of this group send the users Session a message box
If ($(Get-QADMemberOf -Identity "$($session.Username)" -Name $Group))
{
Write-Host -ForegroundColor green "User:$($session.Username) on Server:$($session.server.servername) is a member of $Group"
try
{
Send-TSMessage -ComputerName $($session.server.servername) -id $($session.SessionId)-Text $PopupMessage -Caption "Notice"
}
Catch
{
write-host -ForegroundColor red "Error: Failed to send message (Error:" $_.Exception.Message ")"
write-host
#continue #not sure why continue doesn't actually continue
}
}
Else
{
Write-Debug "User:$($session.Username) on Server:$($session.server.servername) is a not member of $Group"
}
}
}
}
$StopTime = Get-Date
$ElapsedTime =$StopTime - $StartTime
Stop-Transcript
$smtpServer = "mail.blah.com"
$To = "Kevin Curran <kcurran@blah.com>"
$From = "AD Reporting <ADReporting@blah.com>"
$message = "Positive Pay Popup message script has completed `r`n`r`n"
$message = $message + "please look at the attached log files for errors `r`n`r`n"
$message = $message + "This script was run by " + $env:username + " on " + $env:COMPUTERNAME
$message = $message + " and ran for $([Math]::Round($ElapsedTime.TotalMinutes,0)) Minutes"
$Attachments = $TranscriptLog
Send-MailMessage -From $From -To $To -SmtpServer $smtpServer `
-Subject "Popup message script completed" -Body $message -Attachments $Attachments
#notes for manual testing
#$session = Get-TSSession -ComputerName server | where {$_.Username -ne ""}
#If ($(Get-QADMemberOf -Identity "$($session.Username)" -Name "Domain Admins")) {Write-Host "Member"} Else {Write-Host "not a member"}
#$session | Send-TSMessage -Text "blah" -Caption "Notice"
|