MFCOM & PowerShell PDF Print E-mail
User Rating: / 3
PoorBest 
Written by Flo   
Friday, 09 July 2010 15:18

powershell

 

 

 

Introduction au MFCOM avec PowerShell & CTP2

MFCOM & PowerShell

Le Framework de gestion Windows, PowerShell est capable de solliciter des objets MFCOM, ce Framework permet d’optimiser, de faciliter la gestion et l’automatisation des taches d’administration au sein d’environnements Windows / Citrix

La gestion des objets MFCOM permet ainsi de gérer et d’administrer vos fermes Citrix.

Installation de l’environnement

Pour commencer le scripting PowerShell, vous devez installer le Framework PowerShell au minimum sur un serveur 2003/Citrix Xenapp.

Lien de téléchargement Powershell


Afin de créer ou d’éditer vos script, je vous suggère d’utiliser l’outil PowerGUI, il facilite l’écriture des scripts et permet un débogage immédiat.
Lien de téléchargement PowerGui

Il existe un PowerPack Citrix avec des scripts de base facilitant la compréhension.
Lien de téléchargement du PowerPack Citrix

Il se peut que votre politique de sécurité vous empêche de tester les scripts via PowerGUI, il est possible de paramétrer cela dans une console PowerShell :



Vous voila maintenant opérationnel pour vos premiers pas dans le scripting PowerShell - MFCOM !

Utilisation de l'objet MFCOM

Attaquons nous maintenant au vif du sujet, l’intégration de l'objet MFCOM.
Pour cela, PowerShell dispose de la commande New-Object –COM qui comme son nom l’indique instancie des objets Com.

L'exemple suivant va nous montrer comment instancier l'objet et afficher le nom de la ferme Citrix:

$farm = new-Object -com "MetaframeCOM.MetaframeFarm"
$farm.Initialize(1)
$farm.FarmName




Poussons un peu plus loin et faisons la liste des connections en pré formatant le résultat:

	$farm = new-Object -com "MetaframeCOM.MetaframeFarm"
	$farm.Initialize(1)
	$farm.FarmName
	$farm.sessions | Format-Table UserName,AppName,SessionID



Maintenant, nous allons intégrer des conditions afin de mieux filtrer nos requêtes.

Par exemple, nous voulons la liste des clients dont la résolution des de 1024*768 :

	$farm = new-Object -com "MetaframeCOM.MetaframeFarm"
	$farm.Initialize(1)
	$farm.FarmName
	$farm.sessions | Where-Object { $_.ClientHRes -eq 1024 } |
 Format-Table UserName,ClientHRes



Si l’inverse est demandé, tout est possible :

	$farm = new-Object -com "MetaframeCOM.MetaframeFarm"
	$farm.Initialize(1)
	$farm.FarmName
	$farm.sessions | Where-Object { $_.ClientHRes -ne 1024 } | 
Format-Table UserName,ClientHRes



Nous allons maintenant insérer une interaction entre le script et l’utilisateur :

	$farm = new-Object -com "MetaframeCOM.MetaframeFarm"
	$farm.Initialize(1)
	$farm.FarmName
	$hres = Read-Host "Entrez une résolution horizontale"
	$farm.sessions | Where-Object { $_.ClientHRes -eq $hres } | 
Format-Table UserName,ClientHRes



Voila, une première étape sur MFCOM + PowerShell est effectuée, nous allons maintenant nous tourner vers les Xenapp Commands Technology preview (CTP2) de Citrix !

CTP2 (XenApp Commands Technology Preview v2 )

CTP2 est une suite d’outils PowerShell permettant l’administration de vos fermes XenApp 5 (2003/2008).
Il reprend les fonctionnalités de MFCOM ainsi que des consoles AMC/CMC.
CTP2 est actuellement une version béta et n’est pas supporté par le support Citrix.

Installation de l’environnement

La version béta de CTP2 est disponible sur le site MyCitrix, une authentification est requise afin de pouvoir le télécharger.

Versions Citrix supportées :

  • Xenapp 5.0 - Windows Server 2008 x64.
  • Xenapp 5.0 - Windows Server 2008 x32.
  • Xenapp 5.0 - Windows Server 2003 x64.
  • Xenapp 5.0 - Windows Server 2003 x32.
  • Presentation Server 4.5 - Windows Server 2003 x64 avec HRP3.
  • Presentation Server 4.5 - Windows Server 2003 x32 avec HRP3.

Lien de téléchargement CTP2



Si par erreur, vous avez supprimé ce raccourci, il est possible de charger le snap-in citrix dans une console PowerShell normale :

PS W:\> Add-PSSnapin Citrix.XenApp.Commands

Utilisation de CTP2

Afin de mieux exploiter ce toolkit, voici comment récupérer la liste complète des fonctions :

PS W:\> Get-Command -PSSnapin Citrix* | sort Noun, Verb | select name




Pour avoir plus d’info, il est possible d’énumérer un court résumé de la fonction ainsi que des exemples :

PS W:\> get-help Get-XAFarm



PS W:\> get-help Disconnect-xasession –examples




Nous voila avec les bases, nous allons maintenant voir comment imbriquer plusieurs cmdlets.
Afin de comparer CTP2 & PowerShell + MFCOM, les mêmes scripts seront repris.

Récupérer le nom de la ferme Citrix :

PS W:\> Get-XAFarm


Lister les sessions :

	
	PS W:\> Get-XASession | Format-Table AccountName,BrowserName,SessionID



Lister les utilisateurs dont la résolution est égale à 1024*768 :

Et la … c’est le drame ! Il est en effet pour l’instant impossible de récupérer certaines valeurs de session même en forçant la commande avec le switch –Full si l’on ne spécifie pas un serveur cible.

Commande logiquement attendue :

PS W:\> Get-XASession –Full

Commande renvoyant la variable complète :

PS W:\> Get-XASession -ServerName XENAPP1 –Full

Le but de PowerShell étant d’automatiser les taches, il est logique de tester :

PS W:\> Get-XAServer | Get-XASession -ServerName $_.ServerName –Full

Ce qui nous renvoi un joli message :



Après recherche sur le forum Citrix, il est en effet impossible de faire un Pipe entre 2 commandes Get-, il est actuellement disponible que pour un passage de Get- a Set- ( limité à un seul Pipe), Ceci devrait être corrigé dans les prochaines versions.

Il nous faut donc revenir aux méthodes plus traditionnelles :

$servers = get-xaserver
foreach ($server in $servers)
{
  Write-host "Server: " $server.ServerName -fore yellow -nonewline
  Get-XASession -ServerName $server.ServerName –Full | where
  {$_.HorizontalResolution -eq '1024'} |  format-table AccountName,HorizontalResolution
}



La grande force des CTP est de pouvoir reproduire chaque action des différentes consoles de gestion Citrix et ceci de manière automatique.
Pour les besoins de ce tutorial, j’ai délibérément changé la résolution et le fenêtrage de certaines applications, nous allons maintenant essayer de tout harmoniser :



Resserrons l’étau sur nos petits moutons noirs …

Get-XAApplication  |Where-Object { $_.WindowType -ne "100%" -or 
$_.ColorDepth -ne "TrueColor"  } | Format-Table DisplayName,WindowType,ColorDepth



N’oubliez pas le switch –WhatIf, il permet de simuler une commande sans en faire les changements !

Puis Harmonisons !

$apps = Get-XAApplication | Where-Object { $_.WindowType -ne "100%" -or $_.ColorDepth -ne "TrueColor"  } 
foreach($BrowserName in $apps )
{
Set-XAApplication -whatif -BrowserName $BrowserName -WindowType "100%" -ColorDepth "TrueColor"
}



Enlevons le whatif, puis vérifions le résultat du script :



Nous voyons ici les possibilités d’automatisation sur une ferme de plus grande échelle et ceci avec un minimum de connaissance en scripting.

Il faudra attendre la version finale du produit pour pouvoir s’exprimer sur les réels bénéfices des cmdlets Citrix, celles-ci étant encore incomplètes et surtout point important, ne supportant pas le multifarm. Les scripts utilisent la ferme auquel est rattaché le serveur d’exécution, il est par contre possible d’exécuter un script à distance.

Nous pouvons néanmoins concéder une simplicité d’utilisation accrue grâce au worklow orienté « task ». Une nouvelle voie est ouverte pour les administrateurs Citrix et je dois admettre être impatient de pouvoir utiliser ces outils en version finale.

Il n’est pas recommandé d’utiliser ces outils dans un environnement de production, tout du moins pour une première utilisation, je recommande fortement de tester les scripts sur une ferme de test, plusieurs bugs ayant déjà été recensés. La démarche la plus raisonnable serait de commencer par convertir les scripts MFCOM vers des scripts PS/MFCOM (le sdk étant beaucoup plus stable à l’heure actuelle).

Note pour les développeurs .NET, les CTP ne pourront être utilisées sous .Net que par le biais d’un RunSpace (ce qui équivaut à simuler une session PowerShell).

 

Commentaires (1)Add Comment
0
méthodes en .Net
Par Moi, July 12, 2010
Methode 1:
Runspace rs = RunspaceFactory.CreateRunspace();
Pipeline pl = rs.CreatePipeline();
Command cmd = new Command("Get-XAApplication");
cmd.Parameters.Add("BrowserName", "test");
pl.Commands.Add(cmd);
pl.Invoke();

Methode 2:
Runspace rs = RunspaceFactory.CreateRunspace();
IEnumerable apps = rs.ExecuteCommand(
new GetXAApplicationByName {BrowserName = new[] {"test"} });

Ecrivez un commentaire
Réduire l'éditeur | Agrandir l'éditeur

busy
Last Updated on Friday, 09 July 2010 15:38