Je peux essayer une approche invalide, donc je suis ouvert à toutes les suggestions. Je cours une série de 3 scripts qui font chacun une analyse des sites Web sur un serveur d'IIS, et je les cours contre quelques centaines de serveurs. Je fais preuve de concept en faisant cela en tant que processus Start-Job afin de pouvoir fonctionner en parallèle et finir beaucoup plus rapidement. Ces scripts attendent généralement que WMI et le système de fichiers rassemblent et renvoient des données, de sorte que l'attente parallèle est très logique.Powershell: Comment transmettre un objet log4net à un travail en arrière-plan?
Mais je n'arrive pas à enregistrer mes travaux. Je redirige une ligne de données vers le script et tente d'envoyer le Log4net $ Logger en tant que paramètre, mais les nouveaux processus Powershell ne peuvent rien faire avec. Voici ce que j'ai essayé: (Dans le script appelant) emplois $ + = Start-Job -InputObject $ app -FilePath commande $ -Nom $ app.Name -ArgumentList $ Log
(Dans le script appelé)
param ([parameter(Mandatory=$false,ValueFromPipeline=$true)]
$object,
[parameter(Position=0)]
$Logger)
(Résultat)
Unable to find type [log4net.ThreadContext]: make sure that the assembly containing this type is loaded.
J'ai essayé différentes saveurs de chargement du log4net.dll dans le script appelé. Cela se traduit par:
Method invocation failed because [Deserialized.log4net.Core.LogImpl] doesn't contain a method named 'Info'
J'ai aussi essayé juste instancier un nouveau $ Logger dans les processus de script appelé, et qui a pour conséquence une certaine action de journal, mais pas avec précision. De 20 processus, je reçois seulement quelques messages de 9 d'entre eux et tous les messages de rien.
La consignation n'est pas une option. Le travail est complexe. Exécuter des journaux différents pour chaque instance du script peut être faisable, même si ce serait une nuisance désagréable et désagréable. La plupart du temps, je me dis que je fais quelque chose de mal informé.
Toujours une expérience d'apprentissage. D'ACCORD. Le nouveau processus Powershell ne peut pas assimiler une référence d'objet log4net, car l'objet n'existe pas dans le nouveau processus. Ce n'est juste pas là. J'ai donc besoin d'instancier un nouvel objet. Période. Mais si j'ai 1 fils parent et 20 fils fils dans les processus différents, Log4Net ne peut plus être threadsafe plus, non? D'ACCORD. Sur une nouvelle solution. Peut-être vous connecter à quelque chose d'autre qu'un fichier? Le verrouillage cesse d'être un problème alors. – codepoke
Aucune base de données n'est disponible pour moi (ne demandez pas), mais j'ai pu me connecter à l'Observateur d'événements Windows en douceur. – codepoke