我有一个检测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
}
}
1条答案
按热度按时间ecr0jaav1#
您可能正在寻找类似于以下内容的内容:
请注意,由于在
Affected Location
列中使用换行符("
rn"
)作为分隔符,因此在每次迭代中创建的每个CSV行将(可能)* 跨越多行 *。至于你试过什么:
@{N="Computer Name";E={$hostname}}
)使用calculated property的语法,但您没有使用能够创建计算属性的cmdlet(通常为Select-Object
)。Export-Csv
和ConvertTo-Csv
并 * 不 * 有意义地支持hashtables作为输入对象-您需要提供[pscustomobject]
示例,通过将[1]哈希表文字转换为[pscustomobject]
,您可以轻松地创建这些示例,如上所示[ordered]
哈希表来实现可预测的列排序。[1]严格地说,
[pscustomobject] @{ ... }
形式不是一个 cast,而是一个 * 内置的语法糖 *,用于将[pscustomobject]
示例创建为文字。这一点可以从下面的事实中得到证明:在本例中,哈希表文字中的键定义顺序是 * maintened * 的,而在独立的哈希表文字中则不是。