【问题标题】:Changing the Export-CSV output output format更改 Export-CSV 输出输出格式
【发布时间】:2013-08-05 17:59:45
【问题描述】:

我正在编写一个 PowerShell 脚本,该脚本将使用 Export-Csv 命令将系统管理员列表输出到 CSV 文件。获取数据的脚本部分是:

Foreach ($Computer in $Computers){
  $Online = Test-Connection -ComputerName $Computer -Quiet
  if ($Online -eq "True"){
    $GroupName = Get-WmiObject win32_group -ComputerName $Computer | ? {$_.SID -eq 'S-1-5-32-544'} | Select-Object name -ExpandProperty name
    $LocalGroup =[ADSI]"WinNT://$Computer/$GroupName"
    $GroupMembers = @($LocalGroup.psbase.Invoke("Members"))
    $Members = $GroupMembers | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}
    foreach ($Member in $Members){
      $obj = New-Object System.Object
      $obj | Add-Member -MemberType NoteProperty -Name "Computer" -Value $Computer
      $obj | Add-Member -MemberType NoteProperty -Name "AdminGroupMembers" -Value $Member
      $obj
    }
  }
}

}

Get-Admins | Export-Csv -NoTypeInformation c:\scripts\adm.csv -Encoding UTF8

当前输出的格式如下:

"Computer1", "Admin1"
"Computer1", "Admin2"
"Computer1", "Admin3"
"Computer1", "Admin4"
"Computer2", "Admin1"
"Computer2", "Admin2"
"Computer3", "Admin1"

我试图让输出看起来像这样:

"Computer1", "Admin1" , "Admin2" , "Admin3" , "Admin4"
"Computer2", "Admin1" , "Admin2"  
"Computer3", "Admin1" , "Admin2" , "Admin3"

有什么想法吗?

【问题讨论】:

    标签: powershell export-to-csv


    【解决方案1】:

    您的输出格式不是 CSV,因此Export-Csv 不是适合您的工具。试试这个:

    Get-Admins | group { $_.Computer } | % {
      '{0},{1}' -f @($_.Group.Computer)[0], ($_.Group.AdminGroupMembers -join ',')
    } | Out-File 'output.csv'
    

    对于 PowerShell v2,您需要手动展开组属性:

    Get-Admins | group { $_.Computer } | % {
      $computer = @($_.Group | select -Expand Computer)[0]
      $admins   = ($_.Group | select -Expand AdminGroupMembers) -join ','
      '{0},{1}' -f $computer, $admins
    } | Out-File 'output.csv'
    

    【讨论】:

    • 感谢您的建议,但是该文件确实输出到 csv 文件,只是不是我想要的格式。您上面的建议运行但没有提供 CSV 输出,这是必需的。
    • @user2654059 现在可以了。
    • 输出文件为9行,每行一个逗号,没有其他数据。 #将数据导出并反馈#----------------------------------------- -------------------------------------------------- ------------- 获取管理员 |组 { $_.计算机 } | % { '{0},{1}' -f @($_.Group.Computer)[0], ($_.Group.AdminGroupMembers -join ',') } | Out-File 'c:\scripts\adm.csv' Write-Host "`n 在线系统脚本已完成"
    • 看来您仍在使用 PowerShell v2。查看更新的答案。
    • 将 powershell 更新到版本 3。上次编辑更改产生了一个包含计算机名称和逗号但没有管理员名称的 9 行列表。结合最新的更改,我收到此错误 43 次: At C:\Scripts\test.ps1:44 char:27 + $admins = ($_.Group | select -Expand AdminGroupMembers) -join ',' + ~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (System.Object:PSObject) [Select-Object], PSArgumentException + FullyQualifiedErrorId : ExpandPropertyNotFound,Microsoft.PowerShell.Commands.SelectObjectCommand
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2022-01-21
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多