【问题标题】:Proper way to export to CSV?导出到 CSV 的正确方法?
【发布时间】:2021-01-05 22:26:05
【问题描述】:

我有一个关于导出到 CSV 的快速问题。

如何决定导出到 CSV 的内容?我是什么意思?下面的示例只是读取列表并查询 AD 的 Systemversion。然后,我将它与我们使用的正确版本相关联。不幸的是,它确实正确地导出了它,或者有时根本没有。我不确定这是否有意义,请原谅我的无知。

$CStrings = Get-Content "C:\users\ME\Desktop\Comps.txt"

$comps = Foreach($Computer in $CStrings){

$VS = Get-ADComputer -Identity:"CN=$Computer,OU=MY Computers,OU=LAB " -Properties:operatingSystemVersion | Select-Object -ExpandProperty operatingsystemversion
    if($VS -like "21543"){
        "$Computer", "Version 45.32"}
        else {
    if($VS -like "21544"){
        "$Computer", "Version 45.33"}
        else{
    if($VS -like "21545"){
        "$Computer", "Version 45.34"}
        else{
        "$Computer", "$VS"
            }    
        }
    }  
}

Foreach($comp in $comps){

    Write-Output $comp | Out-File C:\users\ME\Desktop\comps.csv
     
    }

CSV 中的结果仅输出一个版本,没有其他输出。我尝试了 "$computer - Versions 45.32" 加入它,并导出每台计算机,但它都在一个列中。

在我被追捕之前,我确实检查了其他论坛,包括 ms_docs 哈哈,如果可能的话,我宁愿有人为我做傻事。

总结:希望将计算机名称和版本保留在单独的列中。

顺便说一句,新年快乐!(:

【问题讨论】:

  • -like 匹配 entire 输入,因此要查找 substrings 您应该使用 $VS -like '*21543*' 之类的东西 - 否则,只需使用 @987654325 @。相比之下,-match 确实执行子字符串匹配,但 RHS 被解释为正则表达式。
  • [1] 你为什么不使用Export-CSV? [grin] ///// [2] 为什么要在 ELSE 中嵌入 IF 而不是使用 ELSEIF?
  • “它确实正确导出”是什么意思?样本数据会给我们一个线索
  • 听着,伙计们……我只是按照我知道的方式去做。 @lee 我确实尝试了Export-CSV,但是结果更差。生病查看 ELSEIF,不熟悉的所以在 MS_Docs 中查找它。谢谢!顺便说一句,我得到的结果只是 CSV 中的版本输出,如下所示:Versions 45.32,它显示在第一个块上,就是这样。没有其他内容被导出。
  • 哦!正确地说,我的意思是,导出到 csv 需要什么,如何指定这些字符串等。如果有意义的话,Idk。它如何知道要导出到第一列和第二列的内容。

标签: powershell


【解决方案1】:

最简单的方法之一是创建自定义对象列表,然后将该列表导出到 csv。这是满足您当前要求的一种方法。

$CStrings = Get-Content "C:\users\ME\Desktop\Comps.txt"

$comps = Foreach($Computer in $CStrings)
{
    $VS = Get-ADComputer -Identity:"CN=$Computer,OU=MY Computers,OU=LAB " -Properties operatingSystemVersion | Select-Object -ExpandProperty operatingsystemversion

    $VS = switch -regex ($VS)
    {
        '21543' {"Version 45.32"}
        '21544' {"Version 45.33"}
        '21545' {"Version 45.34"}
        default {$_}
    }

    [PSCustomObject]@{
        ComputerName = $Computer
        OSVersion    = $VS
    }
}

$comps | Export-Csv -Path C:\users\ME\Desktop\comps.csv -NoTypeInformation

【讨论】:

  • 嗯,这在大多数情况下都有效,只是它不切换。它只输出'21543' 而不是"Version 45.32",这是有原因的吗?您能向我解释一下switch -regex 及以下部分的情况吗?希望更好地理解它,所以我不必在这里一直问大声笑
  • 在使用Get-Help about_Switch -Full 对 switch 运算符进行了更多研究后发现了这一点。原来-regex 将尝试匹配该值,这就是它出错的原因;因此为什么我使用-like 而不是-match,因为即使输出就是这样,值也不完全匹配。诡异的。无论如何,谢谢你和所有评论的人,我调查了提到的一切!总结回答:去掉-regex
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多