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()
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. –
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
[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