2012-08-01 2 views
1

Я новичок в Powershell, и я имею проблему получить прогресс бар для работы с петлей Еогеасп-объекта (если это вообще возможно)Powershell Progress Bar

Благодаря Крису ниже то, что я до сих пор моя проблема здесь состоит в том, что индикатор попадет в точку, а затем я получаю ошибку: 101 аргумента больше максимально допустимый диапазон 100:

$FolderList = Get-Content C:\Folders.txt 
$i = 0 

foreach($Folder in $FolderList) 
{ 

Write-Host $Folder 
Get-ChildItem $Folder -Recurse *.pdf | foreach-object{ 

$fileCount = (Get-ChildItem $Folder).Count 
$i += 1 
Write-Progress -Activity "Counting Files" -status "Searching...." -percentComplete (($i/$fileCount)*100) 

$pdf = c:\pdftk.exe $_.FullName dump_data 
$NumberOfPages = [regex]::match($pdf,'NumberOfPages: (\d+)').Groups[1].Value 

    New-Object PSObject -Property @{ 
    Name = $_.Name 
    FullName = $_.FullName 
    NumberOfPages = $NumberOfPages 
    } 
    } 
} 
+0

Pl легко вывести сценарий * с помощью * Write-Progress'. IOW, покажите нам, что вы пробовали, и расскажите, в чем проблема. Или ваш вопрос: «Как я помещаю этот кусок кода в этот кусок кода?» В этом случае, снова, пожалуйста, попробуйте то, что кажется правильным, и опубликуйте здесь. – alroc

ответ

3

Вот мой подход к проблеме:

$i = 0 
$pdfFiles = @() 

#First, get the files and add them to a collection: 
foreach ($folder in $FolderList){ 
    Get-ChildItem $Folder -Recurse *.pdf | %{$pdfFiles += $_} 
} 

#Measure the collection 
$fileCount = ($pdfFiles | Measure-Object).Count 

#Do work on the collection 
$pdfFiles | foreach-object{ 
    $pdf = c:\pdftk.exe $_.FullName dump_data 
    $NumberOfPages = [regex]::match($pdf,'NumberOfPages: (\d+)').Groups[1].Value 
    New-Object PSObject -Property @{ 
     Name = $_.Name 
     FullName = $_.FullName 
     NumberOfPages = $NumberOfPages 
    } 
    $i += 1 
    Write-Progress -Activity "Counting Files" -status "Searching...." -percentComplete (($i/$fileCount)*100) 
} 
+0

Привет, Крис, Спасибо за помощь. Это указывало на меня в правильном направлении, но из-за количества объектов, связанных с каждой папкой, я надеялся, чтобы индикатор выполнения работал в цикле foreach-object. То, как вы показали мне, может иногда заставить индикатор выполнения выглядеть так, будто он не перемещается, пока он не переместится в следующую папку в списке. Я отредактировал свой вопрос, чтобы отразить изменения, которые я сделал, но придумал еще одну проблему. – user1568178

+0

Отредактировал свой ответ. –

+0

Много спасибо Крис, я не мог заставить его работать в первую очередь, но управлял обходным путем, используя верхнюю часть вашего ответа вместе с моим, и он работал нормально. Просто немного беспорядочно! Я решил дать ему еще один шаг, чтобы очистить вещи, и это сработало, поэтому не уверен, что я сделал неправильно в первый раз! Еще раз спасибо! – user1568178