输入:
服务器:[1,2,3]
服务:[a,b,c]
服务器1具有服务“a”
服务器2具有服务“a”,“b”
服务器3具有服务“b”,“c”
CSV中的预期输出(在控制台上给出正确的输出):
Server_Name ServerAvailability ServiceName[0] ServiceStatus[0] ServiceName[1] ServiceStatus[1] 1 Up a Running 2 Up a Running b Running 3 Up b Running c Running
CSV中的实际输出:
Server_Name ServerAvailability ServiceName[0] ServiceStatus[0] ServiceName[1] ServiceStatus[1] 1 Up a Running 2 Up a Running 3 Up b Running
foreach
输出正确。没有显示错误。 CSV文件发生错误。突出显示的Service Name[0]
循环不会被迭代。它会在Service Status[0]
和Bootstrap 4
停止。请帮帮我。
答案 0 :(得分:0)
你误解了Export-Csv
的工作原理。 cmdlet将对象列表作为输入,并从该列表中的第一个对象确定CSV的列。对于所有后续对象,缺少的属性将填充空值,并省略其他属性。
要获得您想要的结果,您需要知道最大数量的服务,并将该数量的属性添加到每个对象。或者,您可以通过构建逗号分隔字符串列表并通过Set-Content
或Out-File
写入来手动创建CSV。当然,两者都是可行的,但更简单,更直接的方法是将服务列表放入具有不同分隔符的单个列中:
$infoColl = foreach ($s in $servers) {
$svc = Get-Service -Name $services -Computer $s -ErrorAction SilentlyContinue |
ForEach-Object { '{0}={1}' -f ($_.Name, $_.Status) }
New-Object PSObject -Property @{
'Server name' = $s
'ServerAvailability' = $ConStatus
'Services' = $svc -join '|'
}
}