Beschleunigen Sie die Testverbindung vor Foreach

Ich habe ein Skript erstellt, um zu überprüfen, ob der Desktop-Ordner des Benutzers der Cuota-Beschränkung unterliegt. Wenn er der Cuota-Beschränkung unterliegt, wird die Sicherung auf dem Server korrekt durchgeführt.

Jeder Benutzer hat seinen Computer, daher sieht die Quell-CSV folgendermaßen aus:

pc1,user1
pc2,user2
pc800,user800

Einige Computer sind Windows XP und einige W7, und die Pfade können unterschiedlich sein, da ich Test-Path verwende

W7 = C:\users\$user\desktop
XP = C:\document and settings\$user\desktop

Aber Test-Path ist SUPER LANGSAM und ich fing an, vor jedem Test-Path einen Test-Connection -count 1 zu verwenden

Wie auch immer, das Skript ist immer noch LANGSAM, bei jedem "Bad Ping Test" verliere ich viel Zeit.

CODE:

$csvLocation = '~\desktop\soourceReport.csv'
$csv = import-csv $csvLocation -Header PCName, User

$OuputReport = '~\desktop\newReport.csv'

# info:
# "209715200" Bytes = 200 MB

$cuota = "209715200"
$cuotaTranslate = "$($cuota / 1MB) MB"
Write-Host "Cuota is set to $cuotaTranslate"

$count=1

foreach($item in $csv)
{
    write-host "$count# Revisando" $item.User "en" $item.PCName "..." #For debug

    if (Test-Connection -Quiet -count 1 -computer $($item.PCname)){

        $w7path = "\\$($item.PCname)\c$\users\$($item.User)\desktop"
        #echo $w7path #debug

        $xpPath = "\\$($item.PCname)\c$\Documents and Settings\$($item.User)\Escritorio"
        #echo $xp #debug

                if(Test-Path $W7path){

                    $desktopSize = (Get-ChildItem -Recurse -force $w7path | Measure-Object -ErrorAction "SilentlyContinue" -property length -sum) 

                    write-host -ForegroundColor Green "access succeed"

                        if($($desktopSize.sum) -gt $cuota){


                            $newLine =  "{0},{1},{2}" -f $($item.PCname),$($item.User),"$("{0:N0}" -f $($desktopSize.sum / 1MB)) MB"
                            $newLine |  add-content $outputReport

                             Write-Host -ForegroundColor Yellow "cuota exceeded! -- added"
                         }

                        else{
                         Write-Host -ForegroundColor DarkYellow  "cuota OK"
                        }


                }

                elseif(Test-Path $xpPath){

                    $desktopSize = (Get-ChildItem -Recurse -force $xpPath | Measure-Object -ErrorAction "SilentlyContinue" -property length -sum) 

                    write-host -ForegroundColor Green "access succeed"

                        if($($desktopSize.sum) -gt $cuota){


                            $newLine =  "{0},{1},{2}" -f $($item.PCname),$($item.User),"$("{0:N0}" -f $($desktopSize.sum / 1MB)) MB"
                            $newLine |  add-content $outputReport

                             Write-Host -ForegroundColor Yellow "cuota exceeded! -- added"
                         }

                        else{
                         Write-Host -ForegroundColor DarkYellow  "cuota OK"
                        }
                else{
                     write-host -ForegroundColor Red "Error! - bad path"
                }
    }

    else{
        write-host -ForegroundColor Red "Error! - no ping"
    }
    $count++
}
Write-Host -ForegroundColor green -BackgroundColor DarkGray "All done! new report stored in $report"

Um dies zu verbessern, habe ich alle Computer in einer $ -Liste mit einem anderen Foreach gespeichert, vor der erstgenannten SLOW-Foreach-Schleife.

foreach($pcs in $csv){

    $alivelist += @( $pcs.PCName )
}

Test-Connection -quiet -count 2 -computer $alivelist

Nun, ich weiß jetzt nicht, wie ich die Zeilen ("toter" PC, Benutzer) aus der SOURCE CSV-Datei AKTUALISIEREN oder entfernen soll, bevor ich in den zweiten Foreach eintrete.

Ich brauche etwas von deiner "Magie" oder zumindest ein paar Ideen!

Vielen Dank

Antworten auf die Frage(1)

Ihre Antwort auf die Frage