拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 使用Export-CSV时会保存冗余结果

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

白鹭 - 2022-03-09 2076 0 0

我有一个用于检测 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
    
} 

}

uj5u.com热心网友回复:

你可能正在寻找这样的东西:

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

请注意,由于列中使用换行符 ( ) 作为分隔符,因此在每次迭代中创建的每个 CSV 行(可能)将跨越多行"`r`n"Affected Location


至于你尝试什么

  • 您的哈希表文字(例如@{N="Computer Name";E={$hostname}})使用计算属性的语法,但您没有使用 cmdlet - 通常Select-Object- 能够创建计算属性。

  • 更一般地,Export-CsvConvertTo-CsvWindows PowerShell中没有有意义的支持哈希表作为输入物件-你需要提供[pscustomobject]由铸造改为实体,您可以轻松地创建[1]到Hashtable的文字[pscustomobject],如上图所示,

    • 相比之下,在PowerShell (Core) 7 中,您现在可以直接使用哈希表作为输入,尽管您可能希望使用[ordered]哈希表进行可预测的列排序。

[1] 严格来说,表单[pscustomobject] @{ ... }不是cast,而是用于将实体创建为文字的内置语法糖[pscustomobject]事实证明,在这种情况下,哈希表文字中的键定义顺序得到维护,而它不是在独立的哈希表文字中。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *