
1. Create a new PowerShell script on the PRTG Core Server or Probe Server (depending where the DDC's are located) and call it "Citrix - Desktops statistics.ps1"
2. By design, PRTG doesn't have the capability to execute a PowerShell script on a remote server, even if you create the sensor under a device in PRTG which refers to that server. Therefore, we need to create a way to remotely connect to another server, gather the data we need and write this data to PRTG. I prefer to use Remote PowerShell for this. To use remote PowerShell, we have to enable this first on the DDC server. Login on the Citrix DDC server, open a PowerShell window (as administrator) and enter the following command:
Enable-psremoting -force3. Next we can create a remote session to the Citrix Desktop Delivery Controller in the PowerShell script:
# Create a connection to the remote computer
$session = New-PSSession -ComputerName $citrixddc
# Run the commands on the remote computer
Invoke-command -Session $session -scriptblock {  
    asnp Citrix*
    $result = Get-BrokerDesktop -MaxRecordCount 10000
} 
# Count the variable $result and print it to the variable $state.
$state = Invoke-Command -Session $session -ScriptBlock {$result}
Please check the Citrix support page Get-BrokerDesktop for more information.
4. As a result, we have the output of all desktops in the variable $state. To get the total of all desktop registrered in Citrix:
$total = $state.count
In this (small) environment we have a total of 311 desktops registered with the Desktop Delivery Controller.
5. Write this result to PRTG:
# Start writing output to PRTG. $XMLOutput = "<prtg>`n" $XMLOutput += Set-PrtgResult "Desktops: Total" $total "Desktops" $XMLOutput += "</prtg>" write-host $XMLOutput
6. Result:
The final script would be:
# Get the Citrix Desktop Delivery Controller
$citrixddc = "YourCitrixDDCServer"
# Import module
if (-not (Get-module prtgshell)) {
    Import-Module prtgshell
    }
# Create a connection to the remote computer
$session = New-PSSession -ComputerName $citrixddc
# Run the commands on the remote computer
Invoke-command -Session $session -scriptblock {
    asnp Citrix*
    $result = Get-BrokerDesktop -MaxRecordCount 10000
} 
# Count the variable $result and print it to the variable $state.
$state = Invoke-Command -Session $session -ScriptBlock {$result}
# Count all the desktops. 
$TotalDesktops = $state.count
# Start writing output to PRTG.
$XMLOutput = "<prtg>`n"
$XMLOutput += Set-PrtgResult "Desktops: Total" $TotalDesktops "Desktops" 
$XMLOutput += "</prtg>"
write-host $XMLOutput
Now we have one sensor with one channel showing all the desktops registered. In part 2 of this series I'll give some more examples of fun things that we can do to monitor the status of the desktops in Citrix XenDesktop.
Continue with part 2 of this series!


0 comments:
Post a Comment