记录不断更改名称的文件

时间:2019-03-14 16:39:07

标签: powershell

我遇到了一些难题,我有script1本身需要Script2。 现在script2可以运行并调用XML文件,一旦完成,它将创建一个日志文件,该文件在每次运行时都会更改名称。

就像..

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

基本上,它以给定的时间结尾创建一个新的日志文件。 现在script1需要查看script2的日志文件,并输出它自己过滤后的日志文件。

现在,我的主要问题是我不知道如何让我的script1查看script2s的日志输出,但是我不知道名称如何不断变化。而且我不能放下Remove-StallUserObjects_ *,因为它不会拾取最新的。

长话短说

3 个答案:

答案 0 :(得分:0)

这是从文件列表中获取最新文件的一种方法。它假定每个.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

输出...

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

但是,有一种更直接的方法...只需按.CreationTime.LastWriteTime进行排序。

答案 1 :(得分:0)

Remove-StallUserObjects_*文件中嵌入的时间戳的格式设置为:按字母顺序排序按字母顺序排序,按嵌入时间排序的顺序与按时间顺序排序邮票。

因此,您可以利用Get-ChildItem的按字母顺序排序的输出,只需获取返回的 last 文件:

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

注意:@(...)可以在没有文件匹配的情况下防止出现错误消息。 在这种情况下,$newestLog将是$null。在PowerShell的第2版之前,当只有 1 个文件匹配时,您还需要@(...)来处理这种情况。

答案 2 :(得分:-1)

您必须保留script2的结果,而不是读取日志。尝试创建一个函数:https://www.red-gate.com/simple-talk/sysadmin/powershell/powershell-functions-reusability-restartability-azure/