Powershell: Comment puis-je passer un objet log4net à un travail de fond?

StackOverflow https://stackoverflow.com/questions/2516488

  •  22-09-2019
  •  | 
  •  

Question

je tenterai une approche invalide, donc je suis ouvert à toute suggestion.

Je suis en cours d'exécution d'une série de 3 scripts que chaque faire une analyse des sites Web sur un serveur IIS, et je les en cours d'exécution contre une centaine ou deux serveurs. Je suis la preuve de concepting faisant cela comme un processus Start-Job je peux donc courir en parallèle et terminer beaucoup plus rapidement. Ces scripts attendent la plupart du temps autour de WMI et le système de fichiers pour recueillir et renvoyer des données, donc en attente parallèle fait beaucoup de sens.

Mais je ne peux pas obtenir mon emploi de se connecter. Je tuyauterie une ligne de données au script et d'essayer d'envoyer le Log4net $ Logger comme paramètre, mais les nouveaux processus Powershell ne peut rien faire avec. Voici ce que j'ai essayé: (Dans le script d'appel)             $ 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. 20 processus, je ne reçois que des messages de 9 d'entre eux et tous les messages de rien.

Ne pas se connecter est pas une option. Le travail est complexe. Exécution de journaux différents pour chaque instance du script peut-être faisable, mais ce serait une nuisance méchant, méchant. La plupart du temps, je figure que je fais quelque chose mal informé.

Était-ce utile?

La solution

Chaque processus PowerShell est donné naissance à son propre espace mémoire. Rien n'est partagé entre eux, afin de demander log4net de manipuler en toute sécurité un journal de système de fichiers dans plusieurs travaux générés dynamiquement est un ÉCHEC. Base de données ou d'un événement gère l'enregistrement des journaux les problèmes de sécurité de façon appropriée et résolu cette question.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top