Ich verwende this amazing answer und bekam RunSpacePools, um eine CSV-Datei auszugeben, aber meine CSV-Datei hat leere Zeilen und ich kann einfach nicht herausfinden, wo die leeren Zeilen herkommen. in NotepadRunSpacePool Ausgabe CSV enthält leere Zeilen
Die Leerzeilen als ,,,
IF(Get-Command Get-SCOMAlert -ErrorAction SilentlyContinue){}ELSE{Import-Module OperationsManager}
"Get Pend reboot servers from prod"
New-SCOMManagementGroupConnection -ComputerName ProdServer1
$AlertData = get-SCOMAlert -Criteria "Severity = 1 AND ResolutionState < 254 AND Name = 'Pending Reboot'" | Select NetbiosComputerName
"Get Pend reboot servers from test"
#For test information
New-SCOMManagementGroupConnection -ComputerName TestServer1
$AlertData += Get-SCOMAlert -Criteria "Severity = 1 AND ResolutionState < 254 AND Name = 'Pending Reboot'" | Select NetbiosComputerName
"Remove duplicates"
$AlertDataNoDupe = $AlertData | Sort NetbiosComputerName -Unique
$scriptblock = {
Param([string]$server)
$csv = Import-Csv D:\Scripts\MaintenanceWindow2.csv
$window = $csv | where {$_.Computername -eq "$server"} | % CollectionName
$SCCMWindow = IF ($window){$window}ELSE{"NoDeadline"}
$PingCheck = Test-Connection -Count 1 $server -Quiet -ErrorAction SilentlyContinue
IF($PingCheck){$PingResults = "Alive"}
ELSE{$PingResults = "Dead"}
Try{$operatingSystem = Get-WmiObject Win32_OperatingSystem -ComputerName $server -ErrorAction Stop
$LastReboot = [Management.ManagementDateTimeConverter]::ToDateTime($operatingSystem.LastBootUpTime)
$LastReboot.DateTime}
Catch{$LastReboot = "Access Denied!"}
#create custom object as output for CSV.
[PSCustomObject]@{
Server=$server
MaintenanceWindow=$SCCMWindow
Ping=$PingResults
LastReboot=$LastReboot
}#end custom object
}#script block end
$RunspacePool = [RunspaceFactory]::CreateRunspacePool(100,100)
$RunspacePool.Open()
$Jobs =
foreach ($item in $AlertDataNoDupe)
{
$Job = [powershell]::Create().
AddScript($ScriptBlock).
AddArgument($item.NetbiosComputerName)
$Job.RunspacePool = $RunspacePool
[PSCustomObject]@{
Pipe = $Job
Result = $Job.BeginInvoke()
}
}
Write-Host 'Working..' -NoNewline
Do {
Write-Host '.' -NoNewline
Start-Sleep -Milliseconds 500
} While ($Jobs.Result.IsCompleted -contains $false)
Write-Host ' Done! Writing output file.'
Write-host "Output file is d:\scripts\runspacetest4.csv"
$(ForEach ($Job in $Jobs)
{ $Job.Pipe.EndInvoke($Job.Result) }) |
Export-Csv d:\scripts\runspacetest4.csv -NoTypeInformation
$RunspacePool.Close()
$RunspacePool.Dispose()
wenn die foreach-Schleife am unteren Rand des Codes ist es, was die Datei schreibt, ich würde das debuggen. Refactor den Code, um die Pipeline nicht zu verwenden. Schleife über die Jobs und protokolliere Informationen über jeden Job. Sammeln Sie, was Sie denken, dass Sie in eine andere Datenstruktur schreiben werden. Wenn Sie damit zufrieden sind, exportieren Sie nach CSV. –
Vielen Dank für den Kommentar, ich fürchte, das ist über meinen Kopf. Ich suche nach mehr Code-Beispielen, damit etwas funktioniert, aber die Dinge funktionieren einfach nicht wie erwartet. – user4317867
Ich arbeite mit [dieser Methode von Run-Space-Pools] (http://learn-powershell.net/2012/05/10/speedy-network-information-query-using-powershell/) und Ausgabe erhalten, die formatiert ist wie gewünscht, aber die Daten sind falsch. – user4317867