log4j 使用Export-CSV时保存冗余结果

nkkqxpd9  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(142)

我有一个检测Log4j的工作脚本,但试图将所有结果导出到CSV。
当前脚本可以导出,但提供了多行精确结果。

$hostnames = "PC1"
foreach ($hostname in $hostnames){

Write-Host "Starting..."

$List = Invoke-Command -ComputerName $hostname  {Get-ChildItem 'C:\' -Recurse -Force -Include *.jar -ea 0 | foreach {select-string "JndiLookup.class" $_} | select -exp Path}

if ($List -ne $null) 
{
    $List1 = [system.String]::Join("`r`n", $List)

    $file_location = "C:\Powershell\log4j-test.csv"

    $global:name = @{N="Computer Name";E={$hostname}}
    $global:lists = @{N="Affected Location";E={$List1}}

    Write-Host "Done.."

    $name, $lists | Export-CSV $file_location -noTypeInformation -Force -Append -Encoding UTF8

}

}

ecr0jaav

ecr0jaav1#

您可能正在寻找类似于以下内容的内容:

[pscustomobject] @{
  'Computer Name' = $hostname
  'Affected Location' = $List -join "`r`n"
} | Export-CSV $file_location -noTypeInformation -Force -Append -Encoding UTF8

请注意,由于在Affected Location列中使用换行符("rn")作为分隔符,因此在每次迭代中创建的每个CSV行将(可能)* 跨越多行 *。
至于你试过什么

  • 您的哈希表文本(例如@{N="Computer Name";E={$hostname}})使用calculated property的语法,但您没有使用能够创建计算属性的cmdlet(通常为Select-Object)。
  • 更一般地说,Windows PowerShell 中的Export-CsvConvertTo-Csv并 * 不 * 有意义地支持hashtables作为输入对象-您需要提供[pscustomobject]示例,通过将[1]哈希表文字转换为[pscustomobject],您可以轻松地创建这些示例,如上所示
  • 相比之下,在 PowerShell(Core)7+ 中,您现在可以直接使用哈希表作为输入,尽管您可能希望使用[ordered]哈希表来实现可预测的列排序。

[1]严格地说,[pscustomobject] @{ ... }形式不是一个 cast,而是一个 * 内置的语法糖 *,用于将[pscustomobject]示例创建为文字。这一点可以从下面的事实中得到证明:在本例中,哈希表文字中的键定义顺序是 * maintened * 的,而在独立的哈希表文字中则不是。

相关问题