So you like your reports fresh off the press!? We do too! A quick little script to grab a daily report, running as a scheduled task, and send out some user information. Just in case someone likes to know how many people using the platform.
Gets you this nice little emailed report:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | # Get Citrix Daily Users reporting. This requires Powershell, Studio SDK, access rights to the license server. # This gets the unique users, current sessions, connected and disconnected VDI, and license counts. # This was tested with 11.17.2.0 build 37000 License Server with 1 license file. Running this as a scheduled task you will need an AD account # to run this under. A service account works well for this. asnp Citrix* $adminAddress = "deliverycontroller.fqdn:80" $licenseServerName = "licenseserver.fqdn" $cert = Get-LicCertificate -AdminAddress $licenseServerAddress # This section was gotten from https://lalmohan.co.nz/2015/10/09/citrix-license-usage-monitoring-using-powershell/ and modified for my use. $licenseInfo = Get-WmiObject -Namespace "ROOT\CitrixLicensing" Citrix_GT_License_Pool -ComputerName $licenseServerName $licenseModel = ( $LicenseInfo | Where-Object {( $_ .pld -like "XDT*" ) -or ( $_ .pld -like "MPS*" )} |Select -Object pld -unique ).pld $totalLicenses = ( $licenseInfo | Where-Object PLD -like "$licenseModel" | Select-Object count).count # End section. # This section was assisted from http://notesofascripter.com and https://www.linkedin.com/in/douglas-ruehrwein-56835869/ # This will run differently for Monday since you are getting data from the last 24 hours and weekends are usually lower use. $Today = Get-Date if (( $Today .DayOfWeek) -eq 'Monday' ) { $when = $Today .AddDays(-3)} else { $when = $Today .AddDays(-1)} # End section. $connections = Get-BrokerConnectionLog -AdminAddress $adminAddress -Filter {BrokeringTime -gt $when } -MaxRecordCount 100000 | Select-Object BrokeringUserName $licenseCount = ( Get-LicUsageDetails -AdminAddress $licenseServerAddress -ProductEditionModel $licenseModel -CertHash $cert .CertHash).count $ctxUsers = [PSCustomObject] @{ UniqueCitrixUsers = ( $connections .BrokeringUserName | Select-Object -Unique ).count CurrentSessions = ( Get-BrokerSession -AdminAddress $adminAddress -MaxRecordCount 100000 | Select-Object BrokeringUserName).count CitrixVDIConnected = ( Get-BrokerSession -AdminAddress $adminAddress -MaxRecordCount 100000 | Where-Object SessionSupport -eq "SingleSession" | Where-Object SessionState -eq "Active" ).count CitrixVDIDisconnected = ( Get-BrokerSession -AdminAddress $adminAddress -MaxRecordCount 100000 | Where-Object SessionSupport -eq "SingleSession" | Where-Object SessionState -eq "Disconnected" ).count CitrixLicensesUsed = $licenseCount CitrixTotalLicenses = $totalLicenses CtxLicenseFreePercent = ((( $totalLicenses - $licenseCount ) / $totalLicenses ) * 100).ToString( "#.##" ) } # HTML Formatting $style = "<style>BODY{font-family: Arial; font-size: 10pt;}" $style = $style + "TABLE{border: 1px solid black; border-collapse: collapse;}" $style = $style + "TH{border: 1px solid black; background: #dddddd; padding: 5px; }" $style = $style + "TD{border: 1px solid black; padding: 5px; }" $style = $style + "</style>" # HTML Email Body $body = $ctxUsers | ConvertTo-Html -Head $style # Generates email with attachment $date = Get-date -Format "MM-dd-yyyy" $emailFrom = "someemail@place.com" $emailto = "someemail@place.com" #$emailtwo = "someemail@place.com" #$emailCC = "someemail@place.com" $subject = "Daily Citrix User Report | $date" $email = New-object System.Net.Mail.MailMessage $email .to.Add( $emailto ) #$email.to.Add($emailtwo) #$email.CC.Add($emailCC) $Email .From = New-Object system.net.Mail.MailAddress $emailFrom $email .Subject = $subject $email .IsBodyHtml = $true #$attachment = $Reports[1] #$email.Attachments.add($attachment) $email .body = $body $smtpserver = "stmp.someplace.com" $smtp = new-object Net.Mail.SmtpClient( $smtpServer ) $smtp .Send( $email ) |
Ray Davis
This just what I need Man. Thank you.
masterchef
Glad I was able to help! The Citrix Cloud version I have posted as well. It works the same as the other, just updated for the cloud version. ~~Kris