PowerShell CSV换行,但不更改生成的CSV中的单元格

ogq8wdun  于 2023-02-14  发布在  Shell
关注(0)|答案(1)|浏览(139)

我得到了一个用户列表,存储在一个变量中,然后将用于创建CSV。最初,变量的元素使用-join (",")以逗号分隔。我希望将","替换为换行符,因此我使用了-join ("'n"),换行符做得很好,但变量的元素不在同一个单元格中。
这是CSV提供给我的内容:

以下是所需的结果:

我试过了,但似乎不起作用:

-join [Environment]::NewLine

ReplaceCommaWithNewLine($Compare -join ",")

$data = Get-Content -Path $Chemin_File_CSV                                                  
$data = $data -replace ",","`n"                                                         
$data | Set-Content -Path $Chemin_File_CSV                                                   
$data = Import-Csv -Path $Chemin_CSV_File

你知道怎么解决我的问题吗?
您可以在下面找到相应的脚本:

# Retrieving the list of privileged groups to check
$GroupsToCheck = @("Administrateurs","Administrateurs du schéma","Administrateurs de l’entreprise","Admins du domaine",       "Opérateurs de compte","Opérateurs de serveur" ,"Opérateurs de sauvegarde","Opérateurs d’impression")

# Retrieve the list of members of the AD group "Protected Users
$ADGroup_ProtectedUsers_Members = (Get-ADGroupMember "Protected Users").SamAccountName

# Comparison of the groups contained in the $GroupsToCheck table and in the AD group "Protected Users
$Compare = ((Compare-Object -ReferenceObject $GroupsToCheck  -DifferenceObject $ADGroup_ProtectedUsers_Members) | Where-Object -Property SideIndicator -EQ "<=").InputObject

# If $Compare is empty, Conform
if (!$Compare) {
    $Status = "Conform"
    $Value = $null

# Else, Not Conform
} else {
     $Status = "Non Conform"
     $Value=  ($Compare -join "`n")
}

$Path__CSV = "C:\Users\Public\Documents\test.csv"

$Content_CSV = (@"
"Status" ; "Value"
$Status  ; $Value
"@) | Out-File -FilePath $Path_CSV -Encoding UTF8 -Append

先谢谢你。

zf2sa74q

zf2sa74q1#

不要使用纯文本处理;创建 * 对象 *([pscustomobject]),您可以将其传递给Export-Csv

[pscustomobject] @{
  Status = $Status
  Value = $Value
} | # see note re -UseCulture and -Delimiter at the bottom
  Export-Csv -NoTypeInformation -Encoding utf8 $Path_CSV -Append

Export-Csv会自动将多行字符串封装在"..."中,"..."会将其嵌入的换行符保留为字段(列)值的一部分(实际上,* 所有 * 字段都封装在"..."中)[1],如以下示例及其内存中的等效项ConvertTo-Csv所示:

[pscustomobject] @{
  SomeColumn = 42
  MultiLineColumn = 'foo', 'bar', 'baz' -join "`n"
} | 
  ConvertTo-Csv

输出:

"SomeColumn","MultiLineColumn"
"42","foo
bar
baz"

注:

  • 如果CSV格式使用 * 特定于区域性 * 的字段分隔符代替,(如;),则将-UseCulture添加到Export-Csv/ConvertTo-Csv调用中,假设所需的分隔符与 * 当前区域性 * 关联。
  • 如果要显式控制字段分隔符(定界符),请使用-Delimiter参数。

[1]这在 * Windows PowerShell * 中 * 总是 * 正确,在PowerShell (Core) 7+中 * 默认情况下 * 正确,现在您可以通过-UseQuotes-QuoteFields参数控制引用行为。

相关问题