在一行中链接两个数组变量

Linking two array variables in one line

现在,我有一个名为 $vlog 的数组,它显示特定文件夹中每个日志文件的最新实例 $logpath 对于服务的特定版本的每个版本 $verno 运行 在一台机器上。它显示文件名和最后写入时间。

$VLog = foreach ($log in $verno) {
    Get-ChildItem $LogPath | 
        Where-Object {$_.Name -like "*$log-*"} | 
        Select-Object -last 1 | Select-Object Name, LastWriteTime
}

此外,我混合使用 Trim()-replace 来削减大部分名称,只显示日志文件名中包含的相应版本号。

$vname = $vlog.name.Trim('service.logfile.prefix-') -replace ".{9}$"

基本上,它会截断文件的末尾(包含日期和扩展名 .log),以及每个文件开头固定不变的特定文本前位。这一切都很好。

麻烦来了。

我需要从此日志文件数据中获取两项($vname,即版本号),以及该特定版本的日志文件的相应 LastWriteTime。我需要它作为一个数组,它将进一步放入一个电子邮件变量中

我需要说明的是,服务实例版本#VERSION# 的最后记录时间为#VERSION'S LAST WRITE TIME#。

这是我现在拥有的:

$mailvar = foreach ($version in $vname) {
    "Service instance version $version was last logged at $PLEASEHELP."
}

我可以让它显示该句子的正确实例数,每个句子都有正确的版本号,但我无法获得显示与该版本号对应的最后写入时间的时间。

我相信您正在寻找的是 FileInfo 属性 LastWriteTime。这是您的简化示例:

foreach ($log in $verno) {
    $file = (Get-ChildItem -Path $LogPath -Filter "*$log-*")[-1]
    $version = $file.Name.Trim('service.logfile.prefix-') -replace '.{9}$'
    $stamp = $file.LastWriteTime | Get-Date -UFormat '%Y-%m-%d %H:%M:%S'

    'Service instance version {0} was last logged at {1}' -f $version, $stamp
}