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
3 Réponses :
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/
Veuillez éviter les réponses de lien (externe) uniquement et lire comment répondre .
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 .
Les horodatages intégrés dans vos fichiers Par conséquent, vous pouvez profiter de la sortie triée par ordre alphabétique de Remarque: Le 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é. Get-ChildItem et simplement récupérer le dernier fichier renvoyé: p> $newestLog = @(Get-ChildItem -Filter Remove-StallUserObjects_*.log)[-1]
@ (...) 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.
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 ]