| | |

Making sure your Citrix Desktops are utilized with Powershell v2

powershellIn my post from April on Making sure your Citrix Desktops are utilized in 35 lines of PoSH I mentioned I would be looking to expand the powershell script and I’ve added just a few lines of code to do that expantion.

 

The v1 version of the powershell script was able to grab all the desktops that were inactive for x amount of days (30 in my example) and emails the end user.

With this v1.1 release it will grab all the desktops that haven’t been used within x amount of days, notify the user and set the desktop to maintenance mode effectively making sure that the desktop can’t be used anymore. There’s an “if” statement added which will remove the desktop from the machine catalog if the desktop is older than 30 days and already in maintenance mode. 

 

<# .SYNOPSIS Gets all desktops that haven't been used within x amount of days (30 days is the default) and emails the end user. .DESCRIPTION Gets all desktops that haven't been used within x amount of days (30 days is the default) and emails the end user. .EXAMPLE PS C:\PSScript > .\desktop_ultil_v1.ps1
.INPUTS
    None.  You cannot pipe objects to this script.
.OUTPUTS
    No objects are output from this script.  
    This script creates an email to the end user.
.NOTES
    NAME: desktop_ultil_v1.1.ps1
    VERSION: 1.1
    AUTHOR: Kees Baggerman
    LASTEDIT: Aug 2017
#>

# Setting the variables for this script
$DDC = ""
$cred = get-credential
$adminmail = ""
 
# Making sure the appropriate cmdlets are loaded, Microsoft RSAT and Citrix PoSH Cmdlets need to be installed
Import-Module ActiveDirectory
Add-PSSnapin Citrix*

# Set current date minus 30 days
$logonDate = (get-date).AddDays(-30)


# Get all pre assigned desktops where the last login date is 30 days or longer
$Desktops = Get-BrokerDesktop -maxrecordcount 5000 -adminaddress $DDC | Select-Object MachineName, HostedMachineName, AssociatedUserNames,LastConnectionTime | where-object {$_.LastConnectionTime -le $logonDate}

# Loop through the results, fetch the corresponding email address of the user account and send out an email with a BCC to an additional email address
foreach($Desktop in $Desktops){
                               $user = Get-ADUser $Desktop.AssociatedUserNames.Split("\")[1] -Properties *
                               $ComputerName = $Desktop.HostedMachineName
                               $MachineName = $Desktop.MachineName
                               $body = “Your desktop ($ComputerName) will be deleted within 3 days”
                               Send-MailMessage -To $user.EmailAddress -bcc $adminmail -from xd-admin@ltd.com -Subject 'Your Virtual Desktop will be deleted soon' -Body $body -BodyAsHtml -smtpserver smtp.office365.com -usessl -Credential $cred -Port 587 
                               if(Get-BrokerMachine $MachineName | where-object {$_.InMaintenanceMode -eq "true"}) {
                               remove-brokermachine -InputObject $MachineName- Force
                               } else {
                               Set-BrokerMachineMaintenanceMode -InputObject $MachineName $true }
                               }

As said before I had to use the Office 365 SMTP servers hence why you’d see the additional parameters for SSL, Creds and ports. This might be different for your own environment, also you need to make sure that the account you’re using to send the email has send-as rights for the alias you’re using for the -from parameter. This piece of script fetches all assigned desktops in a XD site, determines the last logon time and if it’s longer than 30 days it will collect the user assigned to the desktop all while utilizing posh cmdlets. Based on the user AD will be queried and the email address will be fetched to send out an email. So far, so good.. Result!

PoSH

 

The following two tabs change content below.

Kees Baggerman

Kees Baggerman is a Staff Solutions Architect for End User Computing at Nutanix. Kees has driven numerous Microsoft and Citrix, and RES infrastructures functional/technical designs, migrations, implementations engagements over the years.

Similar Posts

4 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.