Terminal Services / Citrix / Remote Desktop
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"