2017-08-08 5 views
0

私の職業では、後で自分のローカルストレージに抽出する「外国の」PCからフォレンジックイメージを作成します。スレッドを使用して特定の拡張子を持つファイルを削除する特定の日付にファイルを無視する

データをクリーンアップするには、私に関係のないすべてのファイルを削除したいと考えています。 (オーディオ、ムービー、システムファイルなどに限定されない) 私たちは複数TBのデータを扱っているので、特にストレージがすべてフラッシュでディスクの制限があるため、スレッドを使用したいと思っていました。多少問題はありません。

最初の手動実行後に処理を高速化するには、スクリプトを1  より古いファイルから除外したいと思います(これはすでに手動で実行しています)。私がこれまで持っているもの

$IncludeFiles = "*.log", "*.sys", "*.avi", "*.mpg", "*.mkv", ".mp3", "*.mp4", 
       "*.mpeg", "*.mov", "*.dll", "*.mof", "*.mui", "*.zvv", "*.wma", 
       "*.wav", "*.MPA", "*.MID", "*.M4A", "*.AIF", "*.IFF", "*.M3U", 
       "*.3G2", "*.3GP", "*.ASF", "*.FLV", "*.M4V", "*.RM", "*.SWF", 
       "*.VOB" 
$ScriptBlock = { 
    Param($mypath = "D:\") 
    Get-ChildItem -Path $mypath -Recurse -File -Include $file | Where-Object { 
     $_.CreationTime -gt (Get-Date).AddDays(-1) 
    } 
    foreach ($file in $IncludeFiles) { 
     Start-Job -ScriptBlock $ScriptBlock -ArgumentList $file 
    } 
    Get-Job | Wait-Job 
    $out = Get-Job | Receive-Job 
    Write-Host $out 

動作しない唯一のものは、それだけで1  日より「若い」ファイルを参照することを制限です。もし私がそれなしでスクリプトを実行すると、それは完全に動作するようです。 (これは、私が削除したい拡張子のファイルのリストを与えるので)

+0

あなたが投稿したコードは不完全です。 scriptblockは決して閉じられず、 '$ file'は未定義です。また、スクリプトブロックにコマンドを入力してジョブを開始しても、何も高速化することはできません。時間のかかる操作を複数のジョブとして並行して実行できるように、コマンドを分割する必要があります。 –

+0

私はすべてのデータを1つの拡張子で検索してから次のものに移動するので、すべての拡張子を別のスレッドとして使いたいと思っていました。 – Michael

答えて

0

あなたが期待しているように見えるようにパラメータの渡しは動作しません。 Param($mypath = "D:\")は、パラメータmypathを定義し、デフォルト値はD:\です。このデフォルト値は、-ArgumentListでスクリプトブロックに渡す値に置き換えられます。また、スクリプトブロック内の変数$fileと、スクリプトブロック外の変数$fileは同じではありません。 、-Includeよりbetter performanceを提供する必要があります-Filterを使用して

$ScriptBlock = { 
    Param($extension) 
    $mypath = "D:\" 
    Get-ChildItem -Path $mypath -Recurse -File -Filter $extension | Where-Object { 
     $_.CreationTime -gt (Get-Date).AddDays(-1) 
    } 
} 

foreach ($file in $IncludeFiles) { 
    Start-Job -ScriptBlock $ScriptBlock -ArgumentList $file 
} 
Get-Job | Wait-Job | Receive-Job 

:そのための呼び出し

Start-Job -ScriptBlock $ScriptBlock -ArgumentList '*.log' 

は、コマンド

Get-ChildItem -Path '*.log' -Recurse -File -Include $null | ... 

それを動作させるためにこのような何かにあなたのコードを変更し

を実行します1つの文字列( -Includeのような文字列のリストではありません)だけを受け入れるので、1つの内線一度に。

関連する問題