2016-03-19 12 views
-1

this amazing answer kullanıyorum ve bir CSV dosyası vermek için RunSpacePools var, ancak CSV dosyamda boş satırlar var ve boş satırların nereden geldiğini bulamıyorum.RunSpacePool çıkışı CSV boş satırlar içeriyor

boş satır deneme yanılma sonra ,,,

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

kodunuzun altındaki Foreach döngü dosyasını yazdıklarının ise, ben bu hata ayıklama olacaktır. Boru hattını kullanmamak için kodu yeniden düzenleyin. İşlerin üstesinden gelin ve her iş hakkında bilgi girin. Başka bir veri yapısına yazacağınızı düşündüğünüz şeyi toplayın. Bundan memnun olduğunuzda, csv'ye aktar. –

+0

Yorumunuz için teşekkür ederim, korkarım bu başımın üstünde. Çalışmak için daha fazla kod örneği arıyorum ama işler beklendiği gibi çalışmıyor. – user4317867

+0

[Bu çalışma alanı havuzu yöntemi] ile çalışıyorum (http://learn-powershell.net/2012/05/10/speedy-network-information-query-using-powershell/) ve biçimlendirilmiş çıktı alın İstendiği gibi veriler yanlıştır. – user4317867

cevap

0

olarak Defteri'nde gösterilir, ben yaklaşmak için with this method of run space pools çalışma sona erdi. Yakından bakınca, çıktı WMI'nin ekstra boşlukları tarafından kirletildi.

Bunu çözmek için ScriptBlock'un Try ifadesinde aşağıdakileri kullanarak bitti.

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

Artık döndürülen verilerin tümü istenen tek satırdır.

WMI'nin çıktıdaki ek boşlukları hakkında yorum yapmak için kullanın. See this question for more details.

Bir bilgisayarın son yeniden başlatma zaman damgasını döndürmek için aşağıdaki yöntemi gözden geçirin. Dizeyi gerektiği gibi biçimlendirebileceğinizi unutmayın, see this library page for more info.

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

Whitespaces in WMI output in PowerShell

sonra boşlukları kaldırmak için Trim() kullanılarak bir dizi çıkış dönüştürerek çıkarılabilir boşlukları, dikkate alınmalıdır.

WMI output without extra WhiteSpaces