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