2017-06-16 7 views
-2

私は古いファイルを見つけるためのpowershellスクリプトを開発しました。これは、完全に120,000ファイルの周りの900GBのデータサイズからファイル名をフェッチするために実行されます。しかし、同じスクリプトは3TBのデータサイズの約365時間で約1.250,000ファイルを実行しています。powershellスクリプトを実行して、3TBデータのサイズから古いファイル名をフェッチする時間はどれくらいですか?

私は下のスクリプトを記載している:私はhowlongはそれが完了したプロセスになります知ってほしい

$fullPath = Read-Host "Please Enter File Location:" 
$numdays = Read-Host "Please Enter No of days before files:" 

function ShowOldFiles($path, $days) 
{ 
    $files = @(get-childitem $path -include *.* -recurse | where {($_.LastWriteTime -lt (Get-Date).AddDays(-$days)) -and ($_.psIsContainer -eq $false)}) 
    if ($files -ne $NULL) 
    { 
     for ($idx = 0; $idx -lt $files.Length; $idx++) 
     { 
      $file = $files[$idx] 
      Write-host $file.FullName 
     } 
    } 
} 

ShowOldFiles $fullPath $numdays 

pause 

?機能に

拳ライン:

..

答えて

1

いくつかの調整を私を導いてください あなたはあなたが得るすべてのファイルに対して(Get-Date).AddDays(-$days)を実行します。したがって、1.25 Mのファイルでは、それを1.25 M回実行します。しかし、あなたは一度それが必要です。これだけで私の表面に83秒かかる。

あなたが作成したfor-loop内のポイントは表示されません。ファイルを返すよう指示したら、フィルタをかけた後にファイルを返すだけです。 $output = ShowOldFiles...のような関数を実行することで、出力を選択することができます。しかし、機能がまだ動作しているかどうかは、インジケータがありません。

$fullPath = Read-Host "Please Enter File Location:" 
$numdays = Read-Host "Please Enter No of days before files:" 

function ShowOldFiles($path, $days) 
{ 
    $refDate = (Get-Date).AddDays(-$days) 
    get-childitem $path -include *.* -recurse | 
     Where-Object {($_.LastWriteTime -lt $refDate) -and ($_.psIsContainer -eq $false)} | 
      Select-Object -ExpandProperty Fullname 
} 

ShowOldFiles $fullPath $numdays 

pause 

このタスクを完了するのに必要な時間を知りたい場合は、処理する必要のあるアイテムの量を知る必要があります。私たちが大きな数字について話しているように、私は関数を実行する時間についてプログラム的な見積もりをするためだけにすべてのデータを照会しようと試みていません。私が示した構文では、エントリが表示されるはずですので、コードが実行されていることを示す識別子があります。しかし、私が言ったように:どのくらいのアイテムを処理する必要があるか分からずに、プロセスがかかる時間を見積もることはできません。

関連する問題