1
votes

journalisation d'un fichier qui change constamment de nom

Je rencontre un dilemme, j'ai script1 qui appelle Script2 en lui-même. maintenant script2 s'exécute et appelle un fichier XML, une fois terminé, il crée un fichier journal qui change de nom à chaque exécution.

Comme ça ..

Remove-StallUserObjects_201903141219.log
Remove-StallUserObjects_201903141222.log
Remove-StallUserObjects_201903141255.log

en gros, il crée un nouveau fichier journal avec l'heure donnée à la fin. maintenant, script1 doit examiner le fichier journal de script2 et afficher son propre fichier journal qu'il a filtré.

MAINTENANT, mon problème principal est que je ne sais pas comment faire en sorte que mon script1 examine la sortie du journal de script2s mais Je ne sais pas comment le nom change constamment. et je ne peux pas mettre Remove-StallUserObjects_ * car il ne récupérera pas le plus récent.

Aide en bref


1 commentaires

filtrez la liste par le préfixe et le LastWriteTime - cela vous donnera le fichier le plus récent. ///// ou, l'horodatage dans le nom du fichier est vraiment un horodatage ... utilisez-le pour sélectionner le fichier le plus récent en triant sur .BaseName . [ sourire ]


3 Réponses :


-1
votes

Vous devez conserver le résultat de script2 au lieu de lire les journaux. Essayez de créer une fonction: https : //www.red-gate.com/simple-talk/sysadmin/powershell/powershell-functions-reusability-restartability-azure/


1 commentaires

Veuillez éviter les réponses de lien (externe) uniquement et lire comment répondre .



0
votes

voici une façon d'obtenir le fichier le plus récent de la liste des fichiers. il suppose que la dernière partie de chaque .BaseName est un horodatage.

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
darhsl       1600-12-31   6:00 PM                Remove-StallUserObjects_201903141255.log

sortie ...

# fake getting a list of files
#    in real life, use Get-ChildItem
$FileList = @(
    [System.IO.FileInfo]'Remove-StallUserObjects_201903141219.log'
    [System.IO.FileInfo]'Remove-StallUserObjects_201903141222.log'
    [System.IO.FileInfo]'Remove-StallUserObjects_201903141255.log'
    )

# this presumes the last part of each file name is a time stamp
$FileList |
    Sort-Object -Property {$_.BaseName.Split('_')[-1]} |
    Select-Object -Last 1

cependant, il existe une méthode plus directe ... trier simplement par le .CreationTime ou le .LastWriteTime .


0 commentaires

0
votes

Les horodatages intégrés dans vos fichiers Remove-StallUserObjects_ * sont formatés de manière à ce que le tri alphabétique se fasse dans le même ordre que chronologique em > tri par horodatage intégré.

Par conséquent, vous pouvez profiter de la sortie triée par ordre alphabétique de Get-ChildItem et simplement récupérer le dernier fichier renvoyé: p>

$newestLog = @(Get-ChildItem -Filter Remove-StallUserObjects_*.log)[-1]

Remarque: Le @ (...) empêche un message d'erreur au cas où aucun fichier ne correspond; dans ce cas, $ newLog sera $ null . Jusqu'à la version 2 de PowerShell, vous avez également besoin du @ (...) pour gérer le cas où seul le fichier 1 correspond.

p>


0 commentaires