Что не так с этим, если оператор Get-ChildItem в PowerShell? - PullRequest
0 голосов
/ 26 февраля 2009

У меня проблемы с выполнением следующего оператора PowerShell. Цель состоит в том, чтобы получить список папок в папке ..\archive, отсортированный по возрасту и возрасту.

Я хотел бы скопировать количество папок, которые составляют или меньше $ClosedJobssize из ..\Archive в папку ..\movetotape. Это означает, что размер папки .. \ Archive никогда не изменяется на жестком диске.

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\" }}

Что я могу делать не так? Я не получаю никаких ошибок. Он просто сидит и зависает, когда я его выполняю.

Ответы [ 2 ]

1 голос
/ 26 февраля 2009

Попробуй это. Это длинный однострочный (удалите -whatIf для выполнения перемещения):

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 голосов
/ 27 февраля 2009

Я не совсем уверен, что понимаю. Но я думаю, что вы хотите переместить папки из \archive в \archive\movetotape, чтобы заполнить \movetotape, пока размер не станет $ClosedJobsSize или меньше. Правильно?

Пара вещей: вы складываете размер всего в \archive, поэтому результат вашего сравнения никогда не изменится. Во-вторых, одна из проверенных папок - сама MoveToTape, что может привести к ее перемещению в себя (это должно дать исключение).

Учитывая это, я думаю, что этот код будет работать, но я не проверял его.

## 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...