J'essaie de comprendre qui a été imprimé à partir d'un serveur d'impression de 2008. J'ai généré un fichier journal de Server Manager et j'ai maintenant ces informations dans un fichier CSV. Mon objectif est d'analyser cette information et d'exporter à un nouveau CSV pour connaître les seuls associés Chaque rangée de la CSV suit le motif ci-dessous, mais le libellé est différent pour chaque ligne car le nom du travail est plus long / plus court ou d'autres bits d'informations que je n'ai pas 't veux. p> Le motif global est: p> plus d'informations que je ne veux pas p> mon problème est que je ne peut pas savoir que quelque chose comme ignorer les 5 premiers mots de chaque ligne, le 6ème mot serait l'ID utilisateur, etc., car le format est différent de chaque rangée. P> Quel est le meilleur moyen pour moi de Ignorez tous les mots jusqu'à la phrase «appartenant à» ou encore mieux, ID utilisateur, enregistrez-la sur un nouveau CSV dans, puis faites la même chose pour le nom d'hôte de l'ordinateur et le nom de l'imprimante? P> P> ID utilisateur code>, nom d'hôte de l'ordinateur code> et Nom de l'imprimante Code>, tous inclus dans le fichier journal de CSV afin que je puisse déterminer qui imprime à partir de ce serveur et assurez-vous que je peux les mapper sur notre nouveau serveur d'impression. Le CSV consiste en une colonne de données qui a un motif.
3 Réponses :
Cela pourrait être fait suffisamment facilement en utilisant la correspondance d'expression régulière. Les expressions régulières utilisent la correspondance du modèle, de sorte que vous puissiez faire quelque chose comme: qui vous donnerait un CSV que vous pourriez ouvrir dans Excel ou quelque chose avec juste le numéro de travail, l'ID utilisateur, l'ordinateur qu'ils utilisaient. , l'imprimante est allée et le port qu'il a continué. p> p>
La réponse de ThemadTechnicien couvre déjà une majorité de ceci.
$a = Get-Content original.csv
$a[0] += ",Data"
$a | Set-Content updated.csv
$csv = Import-Csv updated.csv
$data = $csv.where({$_."Event ID" -eq 307}) | Select-String -pattern "(?<=owned by )(?<user>[^ ]+)(?: on )(?<host>.*?)(?: was printed on )(?<printer>.*?)(?= through )"
$(ForEach ($m in $data.matches) {
[pscustomobject][ordered]@{"User"=$m.groups["user"].value
"Host"=$m.groups["host"].value
"Printer"=$m.groups["printer"].value
}
}) | Export-Csv Output.csv -notypeinformation
Ce n'est pas une réponse pour extraire des informations du texte du message, mais plutôt comment éviter de devoir faire face au texte formaté en premier lieu. Il semble que vous essayez d'analyser le message pour les événements de journal des événements avec ID 307. Ce code est adapté de PowerShell One-Liner pour vérifier les travaux d'impression sur un serveur d'impression basé sur Windows .
Utilisation de < Un href = "https://docs.microsoft.com/powershell/module/microsoft.powershell.diagnost.powershell.diagnost.powershell.diagnostique/get-winevent" rel = "nofollow noreferrer"> pour un événement avec un message comme celui-ci ... p> document 1, document d'impression appartenant à un nom d'utilisateur sur \\ Machinename était
Imprimé sur Microsoft Print vers PDF via Port X: \ Directory \ File.ext.
Taille en octets: 12345. Pages imprimées: 1. Aucune action d'utilisateur n'est requise. P>
blockquote> ... Le code ci-dessus émise un objet comme celui-ci ... p> Vous pouvez tuyer la commande ci-dessus dans get-winevant code> cmdlet Vous pouvez interroger un journal spécifique ( Microsoft-Windows-PrintService / opérationnel code>) pour des événements spécifiques ( 307 code>), puis il s'agit simplement de récupérer et d'ajouter un nom significatif à Chaque propriété ... p>
export-csv code> pour créer votre fichier CSV, ou même simplement utiliser Out-GridView code> Pour afficher et filtrer les données directement dans PowerShell. De toute façon, pas d'analyse nécessaire. P> p>
Est-ce que l'une des réponses résoudre ou aide à votre problème , ou était quelque chose en outre nécessaire?