2009-02-26 7 views
0

Je n'arrive pas à faire fonctionner l'instruction PowerShell suivante. L'objectif est d'obtenir une liste des dossiers qui se trouvent dans le dossier ..\archive triés du plus ancien au plus jeune.Quel est le problème avec cette instruction Get-ChildItem dans PowerShell?

Je voudrais copier le nombre de dossiers qui sont inférieurs ou égaux à $ClosedJobssize du dossier ..\Archive au dossier ..\movetotape. C'est ainsi que la taille du dossier .. \ Archive ne change jamais sur le disque dur.

get-childitem -path "\\srv02\d$\Prepress\Archive" | sort-object -property 

@{Expression={$_.CreationTime};Ascending=$false} | % { if (((get-childitem -path 

"\\srv02\d$\prepress\archive" -recurse -force | measure-object -Property Length -Sum).Sum + $_.Length) 

-lt $closedjobssize) { move-item -destination "\\srv02\d$\prepress\archive\MoveToTape\" }} 

Que pourrais-je faire de mal? Je ne reçois aucune erreur. Il s'assoit juste et se bloque quand je l'exécute.

+0

'(get-childitem -path "\\ srv02 \ d $ \ archive pré-presse \" -recurse -force | mesure objet -Property Longueur -sum) .Sum' vous obtiendrez la taille totale, y compris sous-dossiers de tous les fichiers du répertoire d'archives. Je ne comprends pas ce que vous essayez d'obtenir en ajoutant la longueur de l'objet pipeline actuel à celle de la comparaison. C'est aussi cher, et vous le faites pour tous les objets qui y passent ... Ensuite, 'move-item -destination" \\ srv02 \ d $ \ prepress \ archive \ MoveToTape \ "' ne spécifie pas de source, et donc ne fait rien (probablement vous inciterait à une source si le script est allé aussi loin). – Jimmeh

Répondre

1

Essayez ceci. Il est un long-liner (retirer -whatIf pour effectuer le déplacement):

dir "\\srv02\d$\Prepress\Archive" | sort CreationTime -desc | where { $_.psiscontainer -AND (dir $_.fullname -recurse -force | measure-object -Property Length -Sum).Sum -lt $closedjobssize} | Move-Item -dest "\\srv02\d$\prepress\archive\MoveToTape\" -whatIf 
+0

le seul paquebot n'a pas fonctionné pour moi. Il a juste copié tout dans le dossier movetotape – phill

0

Je ne suis pas tout à fait sûr que je comprends. Mais je pense que vous voulez déplacer les dossiers dans \archive à \archive\movetotape pour remplir \movetotape jusqu'à ce qu'il soit $ClosedJobsSize ou moins en taille. Droite? Un certain nombre de choses: Vous ajoutez la taille de tout dans \archive, de sorte que le résultat de votre comparaison ne changera jamais. Deuxièmement, l'un des dossiers vérifiés est lui-même MoveToTape, ce qui pourrait vous amener à le déplacer en lui-même (cela devrait donner une exception). Par conséquent, je pense que ce code fonctionnera, mais je ne l'ai pas testé.

## Get all the directories in \arcive that need to be moved 
$Directories = Get-ChildItem "\\srv02\d$\Prepress\Archive" | 
    Where-Object {$_.PSIsContainer -and ($_.Name -ne "MoveToTape")} | Sort-Object CreationTime -Descending 
foreach ($Directory in $Directories) 
{ 
    $SumOfMoveToTape = (Get-ChildItem "\\srv02\d$\prepress\archive\MoveToTape\" -Recurse | Measure-Object -Property Length -Sum).Sum 
    $SumOfItem = (Get-ChildItem $_.FullName -Recurse | Measure-Object -Property Length -Sum).Sum 
    if(($SumOfMoveToTape + $SumOfItem) -lt $ClosedJobsSize) 
    { 
     ## If we can fit on MoveToTape, then move this directory 
     Move-Item -Destination "\\srv02\d$\prepress\archive\MoveToTape\" 
    } 
    ## If you want to keep folders in order (and not try to squeze whatever onto the tape 
    ## then put an 'else {break}' here 
} 
+0

L'objectif est de déplacer les fichiers d'un dossier à un autre de la même taille. Donc, si 1 gig de données vient du dossier closedjobs et est placé dans l'archive, alors 1 gb des fichiers les plus anciens devrait sortir de l'archive pour aller dans le dossier movetotape. Merci! – phill

+0

Ensuite, je pense que mon code va le faire. Il remplira \ movetotape avec les dossiers de \ archive jusqu'à \ movetotape complet avec $ ClosedJobsSize quantité de données (ou il manque de choses à déplacer). Donnez-lui un test et laissez-moi savoir si c'est ce dont vous avez besoin. – JasonMArcher

+0

Je ne vois pas où calcule-t-il $ closedJobsSize? Y a-t-il une ligne manquante? – phill

Questions connexes