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
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.
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.
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
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
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)
désolé, c'est trop récent pour moi .net ;D