Comparaison de GPOs via SCM

Recensement et par pur hasard nous sommes tombés sur une feature de SCM (Security Compliance Manager) permettant de comparer deux GPOs  (dans notre cas il s’agissait de comparer une GPO XenApp de Prod avec son pendant en Qualification)

En effet il est possible de comparer facilement deux GPOs via SCM , la seule contrainte est le fait qu’il faille backuper au préalable les GPOs à comparer.
L’installation de SCM est une suite de Next, Next, Next (juste besoin d’un base SQL, cependant sqlexpress est fourni dans le package).

SCM est disponible ici (en 3.0).

Première étape : sauvegarder les deux GPOs qui seront comparées.

SCM_01Cliquez sur GPO Backup (folder)

SCM_02Choisissez la GPO à comparer

SCM_03Cliquez sur Ok

SCM_04Cliquez sur OK

SCM_05La première GPO à comparer apparaît dans la Custom Baselines
Répéter les opérations d’import pour la seconde GPO à comparer

SCM_07Sélectionnez une des GPO importée (dans Custom BAselines-GPO Import) puis cliquez sur Compare/Merge (dans Baseline)

 SCM_08Sélectionnez la deuxième GPO à comparer
Cliquez sur le bouton OK

SCM_09Enjoy 😉

Un point négatif est que SCM ne fonctionne pas avec les GPP et bug avec des settings de type wirelless, nous sommes en train de voir avec MS si une évolution/Correction est prévue.

D’autres outils permettant de comparer deux GPos (liste non exaustive 😉 ) : 
GPO Compare,
AGPM
GPOADmin (Quest)

Post to Twitter

Comparer les OUs enfants de deux OUs parents

Logiquement dans toute production XenApp (ou autre) on a une production ISO à la qualification, cependant il peut arriver au fil du temps que la réalité soit un peu différente 🙂 .

Afin de mettre en évidence les silos applicatifs n’ayant pas de Qualif (ou pas de Prod) nous avons mis en place un PowerShell qui compare les OUs de Prod et de Qualif de nos différentes fermes XenApp.

 

Ou_XenApp

 

En général la qualif XenApp est sur une Ad de Qualif et la Prod XenApp sur une Ad de Prod, mais (car il y a toujours un mais dans certaines missions) dans le cas présent la qualif et la prod sont sur l’AD de prod 🙂 .

En ligne 1 il faut adapter le contenu de la variable $Vers en fonction de votre nomenclature.
Les OUs parents sont à renseigner en ligne 13 et 16 du script (vous pouvez aussi supprimer la variable $Vers et le Foreach en ligne 3 et31 si vous ne souhaitez checker qu’une seule version XenApp)

CompareOuSur notre lab on est presque ISO 🙂

 

Download_2Compare_Ou_ProdQualif.ps1

Post to Twitter

Créer une alerte sur les GPO Citrix modifiées.


Dans les infras où la délégation est “forte” (dans le cas présent les GPOs),  il est important (pour ne pas dire obligatoire) de mettre en place des alertes permettant d’informer les administrateurs qu’une ou plusieurs GPOs ont été modifiée(s).  L’un des avantages de ce type d’alerte est de permettre à l’ensemble des admins  d’avoir le même niveau de connaissance sur les  modifications apportées aux GPO.

dontTouchEn amont on pourrait aussi mettre ça, histoire que tout le monde ait le même niveau de connaissance 🙂

En PowerShell la cmdlet GET-GPO avec son attribut ModificationTime associé à un filtre sur le DisplayName (Ctx dans notre cas) permet de filtré facilement les GPOs  venant d’être modifiées,  le résultat étant envoyé par mail en html.

GPOs_Modified
Le script remonte toute les GPOs dont le DisplayName contient la chaîne “Ctx” et qui ont été modifier durant les trois dernières heures.
A l’ancienne en tache planifiée ça fera l’affaire 😉  .

 

Download_2Check_Gpo_Modified.ps1

Post to Twitter

Exclusions antivirus


MAJ : 04/01/2017
Ajout d’une exclusion dans la section UPM


Ajout de l’exclusion : %ProgramFiles%\Citrix\User Profile Manager\Driver\UpmJit.sys


MAJ : 07/10/2015
Ajout de la section PVS servers


Récemment nous avons du mettre  en place des exclusions antivirus (pour des clients SEP 11 ) destinées à des environnements XenApp (5,6.0 et 6.5), et comme à chaque fois on avait pas sous la main une trame générique regroupant les principales exclusions antivirus Microsoft et Citrix .

Afin de ne plus chercher,  nous avons regroupé les principales exclusions dans ce billet.

 

W2K8 R2 

EdgeSight Exclusions Agent

  • %ALLUSERSPROFILE%\Application Data\Citrix\System Monitoring\Data
  • %ProgramFiles%\Citrix\System Monitoring\Agent\Core\rscorsvc.exe
  • %ProgramFiles%\ Citrix\System Monitoring\Agent\Core\Firebird\bin\fbserver.exe

XenApp 6.5 Exclusions

  • %ProgramFiles(x86)%\Citrix\Group Policy\Client-Side Extension\CitrixCseEngine.exe
  • %ProgramFiles(x86)%\Citrix\System32\wfshell.exe
  • %ProgramFiles(x86)%\Citrix\System32\ctxxmlss.exe
  • %ProgramFiles(x86)%\Citrix\System32\CtxSvcHost.exe
  • %ProgramFiles(x86)%\Citrix\System32\mfcom.exe
  • %ProgramFiles(x86)%\Citrix\System32\Citrix\Ima\ImaSrv.exe
  • %ProgramFiles(x86)%\Citrix\System32\Citrix\Ima\IMAAdvanceSrv.exe
  • %ProgramFiles(x86)%\Citrix\HealthMon\HCAService.exe
  • %ProgramFiles(x86)%\Citrix\Streaming Client\RadeSvc.exe
  • %ProgramFiles(x86)%\Citrix\Streaming Client\RadeHlprSvc.exe
  • %ProgramFiles(x86)%\Citrix\Independent Management Architecture\RadeOffline.mdb
  • %ProgramFiles(x86)%\Citrix\Independent Management Architecture\imalhc.mdb

Windows Exclusions

  • %windir%\SoftwareDistribution\Datastore\Datastore.edb
  • %windir%\SoftwareDistribution\Datastore\Logs\*.log
  • %windir%\SoftwareDistribution\Datastore\Logs\*.jrs
  • %windir%\SoftwareDistribution\Datastore\Logs\Edb.chk
  • %windir%\SoftwareDistribution\Datastore\Logs\Tmp.edb
  • %windir%\Security\Database\*.edb
  • %windir%\Security\Database\*.sdb
  • %windir%\Security\Database\*.log
  • %windir%\Security\Database\*.chk
  • %windir%\Security\Database\*.jrs
  • %allusersprofile%\NTUser.pol
  • %windir%\System32\GroupPolicy\Machine\Registry.pol
  • %windir%\system32\csrss.exe
  • %windir%\system32\spoolsv.exe
  • %windir%\system32\winlogon.exe
  • %windir%\system32\userinit.exe
  • %windir%\system32\smss.exe
  • %windir%\System32\Spool

UPM

  • %ProgramFiles%\Citrix\User Profile Manager\UserProfileManager.exe
  • %ProgramFiles%\Citrix\User Profile Manager\Driver\UpmJit.sys

PVS (servers)

  • %windir%\System32\drivers\CvhdBusP6.sys
  • %windir%\System32\drivers\CfsDep2.sys
  • %ProgramFiles%\Citrix\Provisioning Services\BNTFTP.EXE
  • %ProgramData%\Citrix\Provisioning Services\Tftpboot\ARDBP32.BIN
  • %ProgramFiles%\Citrix\Provisioning Services\StreamService.exe
  • %ProgramFiles%\Citrix\Provisioning Services\StreamProcess.exe
  • %ProgramFiles%\Citrix\Provisioning Services\soapserver.exe
  • %ProgramFiles%\Citrix\Provisioning Services\PVSTSB.exe
  • %ProgramFiles%\Citrix\Provisioning Services\BNAbsService.exe
  • %ProgramFiles%\Citrix\Provisioning Services\Notifier.exe (à partir de PVS 6.0)
  • %ProgramFiles%\Citrix\Provisioning Services\MgmtDaemon.exe (à partir de PVS 6.0)
  • %ProgramFiles%\Citrix\Provisioning Services\Inventory.exe (à partir de PVS 6.0)
  • …\Store (chemin du répertoire hébergeant les vDisk store)

PVS (poste cible)

  • %ProgramFiles%\Citrix\Provisioning Services\drivers\CNicTeam.sys
  • %ProgramFiles%\Citrix\Provisioning Services\BNDevice.exe
  • %ProgramFiles%\Citrix\Provisioning Services\drivers\BNIStack6.sys
  • %ProgramFiles%\Citrix\Provisioning Services\drivers\CVhdBusp6.sys
  • …\.vdiskcache (emplacement du fichier de cache vdisk)
  • %ProgramFiles%\Citrix\Provisioning Services\TargetOSOptimizer.exe
  • %ProgramFiles%\Citrix\Provisioning Services\drivers\CFsDep2.sys

 

W2K3 (32 bits)

EdgeSight Exclusions Agent

  • %ALLUSERSPROFILE%\Application Data\Citrix\System Monitoring\Data
  • %ProgramFiles%\Citrix\System Monitoring\Agent\Core\rscorsvc.exe
  • %ProgramFiles%\ Citrix\System Monitoring\Agent\Core\Firebird\bin\fbserver.exe

XenApp Exclusions

  • %ProgramFiles%\Citrix\System32\wfshell.exe
  • %ProgramFiles%\Citrix\System32\ctxxmlss.exe
  • %ProgramFiles%\Citrix\System32\mfcom.exe
  • %ProgramFiles%\Citrix\System32\Citrix\Ima\ImaSrv.exe
  • %ProgramFiles%\Citrix\System32\Citrix\Ima\IMAAdvanceSrv.exe
  • %ProgramFiles%\Citrix\HealthMon\HCAService.exe
  • %ProgramFiles%\Citrix\Streaming Client\RadeSvc.exe
  • %ProgramFiles%\Citrix\Independent Management Architecture\RadeOffline.mdb
  • %ProgramFiles%\Citrix\Independent Management Architecture\imalhc.mdb

Windows Exclusions

  • %windir%\SoftwareDistribution\Datastore\Datastore.edb
  • %windir%\SoftwareDistribution\Datastore\Logs\*.log
  • %windir%\SoftwareDistribution\Datastore\Logs\*.jrs
  • %windir%\SoftwareDistribution\Datastore\Logs\Edb.chk
  • %windir%\SoftwareDistribution\Datastore\Logs\Tmp.edb
  • %windir%\Security\Database\*.edb
  • %windir%\Security\Database\*.sdb
  • %windir%\Security\Database\*.log
  • %windir%\Security\Database\*.chk
  • %windir%\Security\Database\*.jrs
  • %allusersprofile%\NTUser.pol
  • %Systemroot%\System32\GroupPolicy\Machine\Registry.pol
  • %SystemRoot%\system32\csrss.exe
  • %SystemRoot%\system32\spoolsv.exe
  • %SystemRoot%\system32\winlogon.exe
  • %SystemRoot%\system32\userinit.exe
  • %SystemRoot%\system32\smss.exe
  • %systemroot%\System32\Spool

UPM

  • %ProgramFiles%\Citrix\User Profile Manager\UserProfileManager.exe

 

W2K3 64 bits

EdgeSight Exclusions Agent

  • %ALLUSERSPROFILE%\Application Data\Citrix\System Monitoring\Data
  • %ProgramFiles%\Citrix\System Monitoring\Agent\Core\rscorsvc.exe
  • %ProgramFiles%\ Citrix\System Monitoring\Agent\Core\Firebird\bin\fbserver.exe

XenApp Exclusions

  • %SystemRoot%\system32\csrss.exe
  • %SystemRoot%\system32\spoolsv.exe
  • %SystemRoot%\system32\winlogon.exe
  • %SystemRoot%\system32\userinit.exe
  • %SystemRoot%\system32\smss.exe
  • %ProgramFiles(x86)%\Citrix\System32\wfshell.exe
  • %ProgramFiles(x86)%\Citrix\System32\ctxxmlss.exe
  • %ProgramFiles(x86)%\Citrix\System32\mfcom.exe
  • %ProgramFiles(x86)%\Citrix\System32\Citrix\Ima\ImaSrv.exe
  • %ProgramFiles(x86)%\Citrix\System32\Citrix\Ima\IMAAdvanceSrv.exe
  • %ProgramFiles(x86)%\Citrix\HealthMon\HCAService.exe
  • %ProgramFiles(x86)%\Citrix\Streaming Client\RadeSvc.exe
  • %ProgramFiles(x86)%\Citrix\Independent Management Architecture\RadeOffline.mdb
  • %ProgramFiles(x86)%\Citrix\Independent Management Architecture\imalhc.mdb

Windows Exclusions

  • %SystemRoot%\SoftwareDistribution\Datastore\Datastore.edb
  • %SystemRoot%\SoftwareDistribution\Datastore\Logs\*.log
  • %SystemRoot%\SoftwareDistribution\Datastore\Logs\*.jrs
  • %SystemRoot%\SoftwareDistribution\Datastore\Logs\Edb.chk
  • %SystemRoot%\SoftwareDistribution\Datastore\Logs\Tmp.edb
  • %SystemRoot%\Security\Database\*.edb
  • %SystemRoot%\Security\Database\*.sdb
  • %SystemRoot%\Security\Database\*.log
  • %SystemRoot%\Security\Database\*.chk
  • %SystemRoot%\Security\Database\*.jrs
  • %allusersprofile%\NTUser.pol
  • %Systemroot%\System32\GroupPolicy\Machine\Registry.pol
  • %SystemRoot%\system32\csrss.exe
  • %SystemRoot%\system32\spoolsv.exe
  • %SystemRoot%\system32\winlogon.exe
  • %SystemRoot%\system32\userinit.exe
  • %SystemRoot%\system32\smss.exe
  • %systemroot%\System32\Spool

UPM

  • %ProgramFiles(x86)%\Citrix\User Profile Manager\UserProfileManager.exe

 

Web Interface

  • %SystemRoot%\system32\LogFiles
  • %systemroot%\system32\inetsrv

 

EdgeSight Server

  • %SystemRoot%\system32\LogFiles
  • %systemroot%\system32\inetsrv
  • %ProgramFiles%\Citrix\System Monitoring\Server\EdgeSight\scripts\rssh
  • %ProgramFiles%\Citrix\System Monitoring\Server\EdgeSight\Pages

 

Serveur de Licence Citrix

  • %ProgramFiles(x86)%\Citrix\Licensing
  • %systemroot%\system32\inetsrv
  • %SystemRoot%\system32\LogFiles

 

Serveur de Licence RDS

  • %SystemRoot%\System32\LServer\*.edb
  • %SystemRoot%\System32\LServer\*.log
  • %SystemRoot%\System32\LServer\*.tmp
  • %SystemRoot%\System32\LServer\*.chk

 

Quelques liens sur les exclusions antivirus Microsoft et Citrix :

Post to Twitter

Rechercher un EventId au sein d’une ferme XenApp

Il arrive lors de troubleshooting que l’on souhaite connaître la présence (ou pas)  d’un EventId au sein des divers silo d’une ferme XenApp (ce qui permettra par la suite d’appliquer le correctif sur les silos impactés et au passage de faire une petite comm 😉 ).

Dans le cas présent il s’agissait de connaitre la liste des silos (avec leurs serveurs) rencontrant l’EventId 6005 (nous ferons très prochainement un billet sur cet EventId) afin de pouvoir appliquer la GPO corrigeant le problème sur les serveurs concernés.

On utilise la cmdlet Get-EventLog afin  de retrouver l’EventID recherché (avec un filtre -Newest 500, suffisant pour constater ou pas la présence de l’EventId durant les derniers jours).

Au préalable modifier la valeur “6005” (et/ou changer le type de journal dans lequel vous allez effectuer votre recherche) par celui recherché en ligne 8 du script.

SearchEventXenAppFarm1

SearchEventXenAppFarm

La liste des silo Impactés est affichée dans la colonne FolderPath

  

Download_2Search_Event_XenApp.ps1

Cela exclue pas  l’utilisation d’un bon vieux Syslog ou un Graylog2 😉

Post to Twitter

Script : Retrouver la ferme d’un serveur XenApp

Si vous souhaitez retrouver (ou un de vos collègues 😉 ) la ferme d’un serveur XenApp dans un environnement “riche” (plusieurs fermes de Prod avec leur Qualif et Recette associés), vous pouvez passer par :

  1. Un AppCenter qui agrège toutes les fermes
  2. Une nomenclature explicite
  3. Votre outil d’inventaire
  4. A l’ancienne (RDP sur le serveur ou accès en remote à la registry du serveur ou au fichier mf20.dsn etc… etc..)
  5. Un script PowerShell

Concernant le script, nous utilisons la cmdlet GET-ADComputer pour checker si le serveur est bien dans l’AD (et récupérer son DN), puis on récupère en WMI la valeur registre “Neighborhood”  afin de remonter le nom de la ferme d’appartenance du serveur .

 

Srv_Farm04Le serveur existe bien dans l’AD mais n’est dans aucune ferme XenApp

  

Srv_Farm03Le serveur existe bien dans l’AD mais ne répond pas à l’ICMP 

 

Srv_Farm02Le serveur n’existe pas dans l’AD

 

Srv_Farm01Le serveur existe bien dans l’AD et on retrouve sa ferme XenApp

  

Download_2SearchXenAppFarm.ps1

 

Post to Twitter

Retour “qfarm /load” vide

Nous allons dans ce billet vous expliquer comment un serveur “pas entièrement supprimé d’une ferme XenApp” peut engendrer un effet de bord inattendu (mais logique).

Il y a quelques temps nous avons rencontré un problème de retour avec la commande qfarm /load, en effet un qfarm /load ne retournait aucun serveur (un qfarm retournait bien la liste des serveurs de la ferme en question).
Le premier réflexe  fut de tester la cmdlet Get-XAServerLoad, qui elle nous retournait l’erreur “Get-XaServerLoad : Exception has been thrown by the target of an invocation“.

QfarmError1

Du coup direction CDFControl afin de faire une trace durant l’exécution d’un qfarm /load.

QfarmError2Intéressant cette Uid 😉 .

En googlelant l’erreur IMA_BUF_BinBuffer nous sommes tombés sur la CTX138294 , on passe donc par un Queryds /table:LMS_ServerLoadTable >ErrorGet-XaServerLoad.txt et en cherchant dans le fichier de sortie nous avons retrouvé notre serveur.

En se connectant sur le serveur en question nous avons constaté que le service IMA était encore démarré, (alors que le serveur était censé être sorti de la ferme) une fois le service arrêté et désactivé (juste au cas ou), la command qfarm /load retournais bien la liste des serveurs membre avec leurs charges respectives.

Post to Twitter

Script : inventaire de serveurs non XenApp

Au détour d’un troubleshooting nous sommes tombés sur des serveurs “non XenApp” alors que ces derniers se trouvaient dans des Ou réservés aux serveurs XenApp.

Comme nous n’aimons pas les serveurs qui ne servent à rien, nous avons mis en place un PowerShell qui va se charger d’inventorier tous les serveurs “non XenApp”.

MrPropre

Le fonctionnement du script est on ne peut plus simple, on vérifie si le service IMA existe (s’il n’existe pas on considère que XenApp n’est pas installé) sur les serveurs, on prend aussi en compte les serveurs qui ne répondent pas à l’envoi de paquets ICMP (via la cmdlet Test-Connection) ainsi que ceux pour lesquels nous n’avons pas les droits nécessaires pour obtenir l’existence du service IMA.

Avant de lancer le script rentrer le DN de l’OU que vous souhaitez vérifier en ligne 3 du script.

Search_NoXenApp2

Search_NoXenApp3Et voila huit serveurs (physiques) à récupérer 🙂

 

Download_2Check_XenApp_Computer.ps1

Post to Twitter

Problème d’affichage qfarm /load

Sur plusieurs fermes XenApp 6.5 R01 US Sp1, on nous a remonté  un problème d’affichage lors de l’exécution d’un qfarm /load (ou query farm /load pour les anciens 😉 ).

Qfarm_1En effet la sortie quelque peu décalé 🙂

Après quelques googles infructueux et afin de pallier rapidement ce problème d’affichage (un troubleshoting en bon et du forme viendra rapidement) nous sommes passés par un PowerShell faisant appel à la cmdlet Get-XaServerLoad.

Nous avons ajouté en argument la possibilité de rentrer une charge afin de n’afficher que les serveurs ayant une charge égale ou supérieure à la charge rentrée (si aucun argument n’est rentré la totalité des serveurs sera affichée) ainsi qu’un compteur totalisant le nombre de serveurs issus du qfarm /load.

Dans notre cas nous avons mis le script QfarmPS.ps1 dans %ProgramFiles(x86)%\Citrix\system32 afin que ce dernier puisse être lancé directement via une console PowerShell.

Qfarm_21Un screenshot avec et sans argument

 

Download_2QfarmPS.ps1

 

Post to Twitter

Problème pour forcer l’adresse Ip dans un launch.ica

Toujours dans la série post-it (rentrée des classes oblige), récemment nous avons rencontré un problème pour forcer l’adresse IP serveur dans un launch.ica via une WebInterface 5.4 (2003 sp1 us). 
Dans pareil cas on se tourne rapidement vers le webinterface.conf du site afin de modifier l’addressResolutionType pour forcer le type de résolution (dns-port, dns, ipv4-port, ipv4).

ResolXml03

 

ResolXml01Dans notre cas le WebInterface.conf était configuré pour présenter des adresses dns (configuration par défaut)

 

Pour le coup normal que les launch.ica présentent des adresses dns, cependant une fois le webinterface.conf modifié (addressResolutionType=ipv4-port) afin de présenter des adresses Ip nos launch.ica présentaient toujours des adresses dns.

Après un moumoutage (french expression very famous 🙂 ) de 20 mn, direction les propriétés de la ferme (XenApp 5 R07, 2003 sp1 us) dans la partie XenApp-General la coche XML Service DNS address Resolution était coché .

 

ResolXml02Sous XenApp5 

  

ResolXml05 Sous XenApp 6.5 (dans stratégie ordinateur-Paramètre du serveur)

 

ResolXml04Une fois l’XML service DNS adress resolution décoché nous obtenons bien une adresse en Ip dans le launch.ica 

 

Post to Twitter