将“foreach”结果输出为CSV(列完好无损)(列出AD中所有服务器上的所有服务)

时间:2011-12-24 00:49:39

标签: powershell csv active-directory foreach

使用以下代码:

   # List all servers
    $servers = Get-QADComputer -OSName *server*,*hyper-v*

    # Looping through the servers
    foreach ($server in $servers) {
    $i++
    $intSize = $intSize + $server.Length

    # Writing statusbar
    Write-Progress -activity "Scanning servers . . ." -status "Scanned: $i of $($servers.length) - Working on $($server.name)" -percentComplete (($i / $servers.length)  * 100)

    # Pinging the server in Powershell-way!
    if (Test-Connection -ComputerName $server.name -count 1 -Quiet ) {
        echo $server.name
    }
}
$respondingservers = $i - $notresponding

我正在循环浏览我的270个AD服务器列表并计算谁在线,运行snmp,wmi等。但我想要做的是不指定要检查的服务并在每个服务器上获取完整列表。我想将其输出到CSV,以便我可以将其导入Excel并对服务名称进行排序等。这当然意味着它需要以合理的方式输出。

例如,如果服务器X正在运行DNS SERVER并且它在第4列中结束,则以下所有DNS SERVER结果都应该在我的电子表格的同一列中结束。

我要求太多还是可以做到?现在我甚至无法输出到CSV,所以任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以导出服务器的服务信息,如下所示:

    # Pinging the server in Powershell-way!
    if (Test-Connection -ComputerName $server.name -count 1 -Quiet ) {
        echo $server.name
        $services = $services, (get-wmiobject -ComputerName $server.name win32_service | select systemname, name, started)
    }
}
# export information about services to csv file
$services | Export-Csv services.csv -NoTypeInformation

这将生成具有以下结构的csv文件:

"systemname","name","started"
"SERVER01","AeLookupSvc","False"
"SERVER02","AeLookupSvc","False"
...

然后,可以使用此csv在Excel中创建数据透视表(rows = systemname,columns = name)以显示所需的信息。