ведение журнала файла, который постоянно меняет имена - PullRequest
1 голос
/ 14 марта 2019

Я сталкиваюсь с некоторой дилеммой, у меня есть script1, который сам вызывает Script2. Теперь script2 запускается и вызывает XML-файл, после чего он создает файл журнала, который меняет имена при каждом запуске.

Вот так ..

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

в основном создает новый файл журнала с указанным временем в конце. теперь script1 должен просмотреть файл журнала script2 и вывести свой собственный файл журнала, который он отфильтровал.

СЕЙЧАС, моя главная проблема в том, что я не знаю, как заставить свой script1 просматривать выходные данные журнала script2s, но я не знаю как, так как имя постоянно меняется. и я не могу поставить Remove-StallUserObjects_ *, потому что он не заберет самый последний.

длинная история короткая помощь

Ответы [ 3 ]

0 голосов
/ 14 марта 2019

вот один из способов получить новейший файл из списка файлов.Предполагается, что последняя часть каждой .BaseName является отметкой времени.

# 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

output ...

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

однако есть более прямой метод ... просто сортировка по .CreationTime или .LastWriteTime.

0 голосов
/ 14 марта 2019

Метки времени, встроенные в файлы Remove-StallUserObjects_*, отформатированы таким образом, что сортировка в алфавитном порядке приведет к тому же порядку, что и сортировка в хронологическом порядке по встроенным меткам времени.

Таким образом, вы можете воспользоваться выводом Get-ChildItem в алфавитном порядке и просто получить последний возвращенный файл:

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

Примечание: @(...) предотвращает появление сообщения об ошибке, если файлы не совпадают;в этом случае $newestLog будет $null.До версии 2 PowerShell вам также необходим @(...) для обработки случая, когда совпадает только файл 1 .

0 голосов
/ 14 марта 2019

Вы должны сохранить результат script2 вместо чтения логов.Попробуйте создать одну функцию: https://www.red -gate.com / simple-talk / sysadmin / powershell / powershell-functions-reusability-restartability-azure /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...