0

下面的数据集存储的是文本文件,第一个是服务器名称,第二个是日期,第三个是补丁历史记录。

WSUSCL02-2012

Monday, August 10, 2020 5:03:08 PM



X Status     KB          Size Title                                            
- ------     --          ---- -----                                            
2 Accepted   KB3172729  10 MB Security Update for Windows Server 2012 R2 (KB...
2 Accepted   KB3175024  12 MB Security Update for Windows Server 2012 R2 (KB...
3 Downloaded KB3172729  10 MB Security Update for Windows Server 2012 R2 (KB...
3 Downloaded KB3175024  12 MB Security Update for Windows Server 2012 R2 (KB...
4 Installed  KB3172729  10 MB Security Update for Windows Server 2012 R2 (KB...
4 Installed  KB3175024  12 MB Security Update for Windows Server 2012 R2 (KB...



WSUSCL01-2012

Monday, August 10, 2020 5:03:01 PM



X Status     KB          Size Title                                            
- ------     --          ---- -----                                            
2 Accepted   KB2962409  50 MB Update for Windows Server 2012 R2 (KB2962409)    
2 Accepted   KB3175024  12 MB Security Update for Windows Server 2012 R2 (KB...
3 Downloaded KB2962409  50 MB Update for Windows Server 2012 R2 (KB2962409)    
3 Downloaded KB3175024  12 MB Security Update for Windows Server 2012 R2 (KB...
4 Installed  KB2962409  50 MB Update for Windows Server 2012 R2 (KB2962409)    
4 Installed  KB3175024  12 MB Security Update for Windows Server 2012 R2 (KB...

以上是存储在文本文件中的数据集,要求是解析数据并选择 servername 、 date 、 patch 并将该数据放入自定义 power shell 对象中,名称为服务器名称、日期、补丁详细信息。请帮我做这个

4

1 回答 1

2

使用switch -Regex -File循环遍历文本文件中的每一行应该可以解决问题。

下面的代码解析出所有字段,但您可以注释掉结果中不希望出现的任何属性

$result = switch -Regex -File 'D:\Test\patches.txt' {
    '^[-\w]+$' { $server = $_ }
    '[AP]M$'   { $date = [datetime]::ParseExact($_, 'F', [cultureinfo]'en-US') }
    '^(\d+)\s+(\w+)\s+(KB\d+)\s+(\d+\s[KM]B)\s+(.+)' {
        # create and output an object
        [PsCustomObject]@{
            Server = $server
            Date   = $date
            X      = $matches[1]
            Status = $matches[2]
            KB     = $matches[3]
            Size   = $matches[4]
            Title  = $matches[5]
        }
   }
}

# output on screen
$result | Format-Table -AutoSize

# output to CSV file
$result | Export-Csv -Path 'D:\Test\patchresults.csv' -NoTypeInformation

使用您的示例文件输出

服务器日期 X 状态 KB 大小 标题                                            
------ ---- - ------ -- ---- -----                                            
WSUSCL02-2012 10-8-2020 17:03:08 2 已接受 KB3172729 适用于 Windows Server 2012 R2 的 10 MB 安全更新 (KB...
WSUSCL02-2012 10-8-2020 17:03:08 2 已接受 KB3175024 12 MB Windows Server 2012 R2 安全更新 (KB...
WSUSCL02-2012 10-8-2020 17:03:08 3 已下载 KB3172729 10 MB Windows Server 2012 R2 安全更新 (KB...
WSUSCL02-2012 10-8-2020 17:03:08 3 已下载 KB3175024 12 MB Windows Server 2012 R2 安全更新 (KB...
WSUSCL02-2012 10-8-2020 17:03:08 4 已安装 KB3172729 10 MB Windows Server 2012 R2 安全更新 (KB...
WSUSCL02-2012 10-8-2020 17:03:08 4 已安装 KB3175024 12 MB Windows Server 2012 R2 安全更新 (KB...
WSUSCL01-2012 10-8-2020 17:03:01 2 已接受 KB2962409 适用于 Windows Server 2012 R2 的 50 MB 更新 (KB2962409)    
WSUSCL01-2012 10-8-2020 17:03:01 2 已接受 KB3175024 适用于 Windows Server 2012 R2 的 12 MB 安全更新 (KB...
WSUSCL01-2012 10-8-2020 17:03:01 3 已下载 KB2962409 50 MB 更新,适用于 Windows Server 2012 R2 (KB2962409)    
WSUSCL01-2012 10-8-2020 17:03:01 3 已下载 KB3175024 12 MB Windows Server 2012 R2 安全更新 (KB...
WSUSCL01-2012 10-8-2020 17:03:01 4 已安装 KB2962409 适用于 Windows Server 2012 R2 的 50 MB 更新 (KB2962409)    
WSUSCL01-2012 10-8-2020 17:03:01 4 已安装 KB3175024 12 MB Windows Server 2012 R2 安全更新 (KB...

PS 我的系统是荷兰语,所以显示的默认日期格式是 'dd-M-yyyy HH:mm:ss'

于 2020-08-12T14:37:12.143 回答