[W2K8] MFCOM- Printers Drivers

Bonjour à tous



J’ai un problème concernant MFCOM : j’écris un script qui récupère les informations de ferme ainsi que la conf de chaque serveur.



Concernant la partie ferme pas de problème.

Par contre pour chaque serveur, j’arrive à récuperer la plupart des informations voulues…à l’exception des informations drivers et printers qui me rendent des erreurs. Pourtant la même méthode d’instanciation des collections est utilisée (avec l’objet ferme et serveur)



Partie ferme :



Set theFarm = CreateObject(“MetaFrameCOM.MetaFrameFarm”)

Set drivfermes = thefarm.Drivers

For Each drivferme In drivfermes

ficlfarm.writeline("#DRVn:" & drivferme.drivername)

ficlfarm.writeline("#DRVp:" & drivferme.driverplatform)

Set drivsrvs = drivferme.servers

For Each drivsrv In drivsrvs

ficlfarm.writeline("#SRVD:" & drivsrv.servername)

next

next




=> c’est OK. Idem avec le pointeur Printers



Partie serveur :



set objCPS = CreateObject(“MetaFrameCOM.MetaframeServer”)

objCPS.initialize 6,nomdeserver




=> la création de l’objet et l’initialization fonctionne, je récupère un certain nombre d’infos (de type applications, winmetaframeobject).



MAIS:

Set drivsrvs= objcps.drivers

For Each drivsrv In drivsrvs

wscript.echo drivsrv.drivername

next
=> me renvoie une erreur comme quoi l’object ne supporte pas cette méthode…idem avec Printers



Je teste sur une plateforme W2008, XenApp5



merci d’avance



Pierre

ta méthode :

Set drivsrvs= objcps.drivers

For Each drivsrv In drivsrvs

wscript.echo drivsrv.drivername

next



drivers n’est pas un objet de MetaFrameServer donc cela ne peut pas marcher. Il faut que tu utilises PrinterDrivers (et lire le fichier .CHM indigeste du guide MFCOM ;D)





méthode qui fonctionne (copié directement depuis le code de Citrix Print Tool v.3.0 ) :



Set aServer = CreateObject(“MetaFrameCOM.MetaFrameServer”)

aServer.Initialize MetaFrameWinSrvObject, tempcurrentserver(i) 'tempcurrentserver(i) est une array qui contient la liste des serveurs sélectionnés

For Each aPrinterdriver In aServer.PrinterDrivers

DebugNote “DrvListInDataStore(” & i & “,” & j & “)= " & tempcurrentserver(i) & “,” & aPrinterdriver.DriverName

DrvListInDataStore(i, j) = tempcurrentserver(i) & “,” & aPrinterdriver.DriverName

j = j + 1

Next

result = GetPrintDrivers(”" & tempcurrentserver(i), main.DriverList)

Set aServer = Nothing

Effectivement, pourtant je l’ai lu en long, en large et de travers…



Par contre, j’ai le même problème pour la collection Printers, qui est normalement accessible par l’object server…



Pierre

copie ton code qui fait les queries sur Printers stp

En fait c’est le même principe de précedemment :

Set Printss= objCPS.Printers

For Each Printer In Printss

wscript.echo printer.printername

next




il plante à la création de l’objet printss

que cherches tu exactement à faire ? énumérer les imprimantes importées par Print Server ? les imprimantes définies par stratégie ?

je souhaitais :

1- Lister les différents drivers d’impression d’une ferme

2- Lister les imprimantes par serveur



les objets MFCOM ainsi que le fichier d’aide CHM restent pour moi toujours un peu un mystère :slight_smile:



Merci Thin…

pour les drivers, c’est résolu ;D



pour les imprimantes, je n’ai pas encore joué avec mais ça doit le faire… il faut peut etre initialiser un MetaFramePrinter avant…



t’a googlé MetaFramePrinter object MFCOM ?

Pour les pilotes, je pense que c’est mieux (plus rapide) en WMI.

cela dépend ce que tu souhaites faire…



si c’est comparer la liste des pilotes présents dans le datastore avec la liste réellement installé… faut bien utiliser MFCOM ;D



tiens, cette fonction me rappelle un truc sur lequel je suis en train de bosser pour une certaine version 3.0 d’un machin

OK pour les drivers, mais c’était bien les printers qui me posaient problème. :slight_smile:



Je vais chercher sur Google. L’initialisation est peut-être nécessaire. Et je reviens dès solution ou quelque chose qui s’en rapproche.



J’en profite, j’ai une interrogation sur un autre objet MFCOM. J’arrive à m’en servir après recherche sur le net mais sans bien comprendre le pourquoi:



je créé une collection d’objets Load Evaluator via l’objet ferme. Je récupère le nom de chaque evaluator ainsi que les serveurs sur lesquels est installé le loadEvaluator:



set farmloadS = thefarm.loadevaluators

for each farmload in farmloadS

wscript.echo farmload.lename

set ssrvs= farmload.attachedServers([font=Verdana:32xbagkz]metaframeWinSrvObject[/font:32xbagkz])

for each ssrv in ssrvs

wscript.echo ssrv.servername

next




Pourquoi est-il nécessaire de préciser le type d’objet cf (MetaframeWinsrvObject) alors que le type d’objet est implicite ???

Si tu as une idée…



Pour le WMI, bon il faudrait que je refasse mon script… et puis je trouve moins impactant de n’interroger que le DS plutôt que de faire des requêtes à chaque serveur de la ferme. En prod, ça peut-être un peu génant.

"ThinIsFat" wrote:
cela dépend ce que tu souhaites faire...

si c'est comparer la liste des pilotes présents dans le datastore avec la liste réellement installé... faut bien utiliser MFCOM ;D

tiens, cette fonction me rappelle un truc sur lequel je suis en train de bosser pour une certaine version 3.0 d'un machin
C'est un peu pour cela que je préfère le wmi, je suis sur des pilotes installés et je n'ai pas de problème de synchro entre la ds et le serveur en question....
"MaxB (Jolebarjo)" wrote:
"ThinIsFat" wrote:
cela dépend ce que tu souhaites faire...

si c'est comparer la liste des pilotes présents dans le datastore avec la liste réellement installé... faut bien utiliser MFCOM ;D

tiens, cette fonction me rappelle un truc sur lequel je suis en train de bosser pour une certaine version 3.0 d'un machin
C'est un peu pour cela que je préfère le wmi, je suis sur des pilotes installés et je n'ai pas de problème de synchro entre la ds et le serveur en question....

en fait, je vais virer cette fonctionnalité de la pas encore sortie 3.0 : pas la peine de se prendre la tête pour faire des trucs avec l'outil qui se font déjà dans la CMC....

Voici pour lister les drivers en WMI :



Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\" & strSrv & "rootcimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_PrinterDriver")
i=0
For each objPrinter in colInstalledPrinters
Wscript.Echo ArgObj(0) & " " & objPrinter.Name _
' & "OEM Url: " & objPrinter.OEMUrl _
' & "Data File: " & objPrinter.DataFile _
' & "Description: " & objPrinter.Description _
' & "Driver Path: " & objPrinter.DriverPath _
' & "File Path: " & objPrinter.FilePath _
' & "Help File: " & objPrinter.HelpFile _
' & "INF Name: " & objPrinter.InfName _
' & "Supported Platform: " & objPrinter.SupportedPlatform _
' & "Version: " & objPrinter.Version
' & "Configuration File: " & objPrinter.ConfigFile

wscript.echo objPrinter.Name
i = i+1
Next
wscript.echo "Nombre de drivers sur " & strsrv & " : " & i

j’utilise les API Win32 pour cela, si cela intéresse je peux envoyer mon code mais c’est un poil plus long et plus complexe (pointeurs, buffers et tout le tintouin)

Je le fait aussi en vb.net :wink:

"MaxB (Jolebarjo)" wrote:
Je le fait aussi en vb.net ;)

désolé, c'est trop récent pour moi .net ;D