附加CSV输出编码问题

时间:2013-06-20 18:09:28

标签: powershell export append add output

您好我创建了以下脚本来审核远程主机上的本地管理员组。它运行正常,但由于它只是在经过所有主机后才输出数据,我担心数据在有机会导出到csv之前会耗尽缓冲区空间,所以我一直试图让它创建并在每个主机通过列表时附加每个主机的输出,除了我无法在第一行显示标题并在其下方添加附加行。以下是我尝试追加时获得的输出。斜体字应该是标题,其他信息应该列在下一行。我做错了什么?

@ {服务器 = PC1; 成员 =管理员; 的distinguishedName = DC =域,DC = COM

这应该是它的样子。看起来这样,如果我不附加,我让它在完成主机列表后创建csv

Server           Members            DistinguishedName
host1   Administrator;Admin2    DC=DOMAIN,DC=COM





$servers= get-content "C:\Scripts\AD Audits\Local Admin\workstations.txt"
$output = "c:\temp\local admin audit $CurrentDate.csv" 
$results = @()
$disconnected = "Did not respond"
foreach($server in $servers)
{
 $connected = Test-Connection $server -count 1 -quiet
    if ($connected) {
        "$server responded" | Out-File -append "c:\temp\LocalAdmin goodhosts $CurrentDate.txt"}

    else { 
        "$server did not respond" | Out-File -append "c:\temp\LocalAdmin badhosts $CurrentDate.txt"}

$group =[ADSI]"WinNT://$server/Administrators" 
 $members = $group.Members() | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null) } 
 $results += New-Object PsObject -Property @{
  DistinguishedName = (get-adcomputer ($server) -properties * | select distinguishedname).distinguishedname
  Server = $server
  Members = $members -join ";"

    }

$results | Export-Csv $Output -NoTypeInformation

}`

if($connected -eq $True) { New-Object PSObject -Property @{ DistinguishedName = (Get-ADComputer $_).DistinguishedName Server = $_ Members = $members -join ";" }} else {write-host ""}

1 个答案:

答案 0 :(得分:0)

我的建议是使用管道而不是foreach语句,因此每个对象在处理后立即写入文件。

$servers | ForEach-Object{

    $connected = Test-Connection $_ -Count 1 -Quiet -ErrorAction SilentlyContinue
    $state = if($connected) {"$_ responded"} else {"$_ did not respond"}
    $state | Out-File -Append "c:\temp\LocalAdmin goodhosts $CurrentDate.txt"

    $group =[ADSI]"WinNT://$_/Administrators,group" 
    $members = $group.Members() | ForEach-Object {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null) } 

    if($connected)
    {
       New-Object PSObject -Property @{
           DistinguishedName = (Get-ADComputer $_).DistinguishedName
           Server = $_
           Members = $members -join ";"
       }
    }

} | Export-Csv $Output -NoTypeInformation