Citrix Logon Script nur bei Desktop X oder Y

Erst kürzlich stieß ich auf die Anforderung den Teil eines Logon-Skriptes nur auszuführen, wenn sich ein Benutzer über nur einen bestimmten Citrix Desktop verbunden hat.
Dies kann dann notwendig werden, wenn man in einer Delivery Group sowohl Apps als auch den Desktop freigegeben hat und man einen Teil des Skriptes nicht bei den Apps ausführen möchte, oder umgekehrt.

Das ist gar nicht so einfach, woher soll der Ziel Server auch wissen welches Icon der Benutzer im Receiver geklickt hat.
Glücklicher Weiße gibt es folgende Reg Folder HKLM:\SOFTWARE\Citrix\Ica\Session, in welchen Informationen zu Sitzung gesichert werden.
Dies macht sich folgendes Script zu nutze:

function Get-ConnectedToXenDesk($XenDisplayname)
{
  $strName = $env:username
  foreach ($sessionpath in (Get-ChildItem HKLM:\SOFTWARE\Citrix\Ica\Session).PSPath)
  {
    $sessionconpath = $sessionpath + "\Connection"
    if (Test-Path $sessionconpath)
    {
        if (((Get-ItemProperty -Path $sessionconpath -Name "UserName").Username) -eq $strName)
        {
            $userlogontime = ((Get-ItemProperty -Path $sessionconpath -Name "UserLogonTime").UserLogonTime)
            $userlogontime = $userlogontime.split(","); $userlogontime = $userlogontime[3] + ":" + $userlogontime[4]
            $userlogontime = [datetime]::ParseExact($userlogontime,'H:mm',$null); $userlogontime = $userlogontime.addhours(2)
            $now = Get-Date
            $timediff = New-Timespan $userlogontime $now
            if (($timediff.hours -eq 0) -and ($timediff.minutes -lt 5)) {
                $PublishedName = (Get-ItemProperty -Path $sessionconpath -Name "PublishedName").PublishedName
                $PublishedName = ($PublishedName.Substring(0, $PublishedName.IndexOf('$'))).trim()
                if ($PublishedName -eq $XenDisplayname) { return $true } else { return $false }
            }
        }
    }
  }
}
if (Get-ConnectedToXenDesk "Citrix Desktop Displayname")
{
    Dieser Teil läuft nur wenn sich der Benutzer auf "Citrix Desktop Displayname" verbunden hat
}

Es wird überprüft ob der Displayname der Citrix App/Desktop übereinstimmt und wie alt die Session ist.
Das Überprüfen der Sitzungsdauer ist notwendig, da ein Benutzer ja mehrfache Verbindungen auf einen Server hergestellt haben könnte.

ACHTUNG:

  • Getestet auf 2012R2 + XenDesktop 7.6
  • Weder Garantie auf Funktion noch Gewährleistung

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.