Выходной CSV-файл RunSpacePool содержит пустые строки

Я использую этот замечательный ответ и получил RunSpacePools для вывода CSV, но в моем CSV-файле есть пустые строки, и я просто не могу понять, откуда берутся пустые строки.

Пустые строки отображаются в Блокноте как ,,,

    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()

person user4317867    schedule 19.03.2016    source источник
comment
если этот цикл foreach в нижней части вашего кода - это то, что записывает файл, я бы отладил это. рефакторинг кода, чтобы не использовать конвейер. перебирать задания и регистрировать информацию о каждом задании. соберите то, что, по вашему мнению, вы будете записывать в другую структуру данных. когда вас это устраивает, экспортируйте в csv.   -  person Kory Gill    schedule 20.03.2016
comment
Спасибо за комментарий, боюсь, это выше моего понимания. Я ищу больше примеров кода, чтобы что-то заработало, но все работает не так, как ожидалось.   -  person user4317867    schedule 02.04.2016
comment
Я работаю с этим методом запуска пространственные пулы и получить выходные данные в нужном формате, но с неверными данными.   -  person user4317867    schedule 03.04.2016


Ответы (1)


После проб и ошибок я закончил работу с помощью этого метода пулов пространства для выполнения, чтобы приблизиться. Присмотревшись, я обнаружил, что вывод был загрязнен лишними пробелами WMI.

Чтобы решить эту проблему, я использовал следующее в операторе Try ScriptBlock.

$LastReboot = [Management.ManagementDateTimeConverter]::ToDateTime `
($operatingSystem.LastBootUpTime).ToString().Trim()

Теперь возвращаемые данные представляют собой одну строку по желанию.

-Редактировать, чтобы прокомментировать дополнительные пробелы WMI в выводе. Дополнительные сведения см. в этом вопросе.

Рассмотрим следующий метод, чтобы вернуть отметку времени последней перезагрузки компьютера. Обратите внимание, что вы можете отформатировать строку по мере необходимости, см. эту страницу библиотеки для получения дополнительной информации.

$os = (gwmi -Class win32_operatingsystem).LastBootUpTime
[Management.ManagementDateTimeConverter]::ToDateTime($os)

Пробелы в выводе WMI в PowerShell

Обратите внимание на пробелы, которые можно удалить, преобразовав вывод в строку, а затем используя Trim() для удаления пробелов.

Вывод WMI без дополнительных пробелов

person user4317867    schedule 02.04.2016