2016-10-31 5 views
0

こんにちはPowershellには初めて、既存のスクリプトを盗んだり、以前はbashで作業していました。Powershell with Directories

私はすべてのディレクトリを1つの基準でリストし、それらの内容についての推薦を実行しようとしています。

基本的には、Processedという名前のすべてのディレクトリを再帰的に検索し、31日以上のすべてのアイテムを削除します。私はのためにそう持っていることは、以下のコマンドをされている:私は$ dirsにエコーする場合

$limit = (Get-Date).AddDays(-31) 
$path = "C:\Users\mark.hodgson\Desktop\New folder" 
$dirs = Get-ChildItem $path -Recurse -Directory| Where-Object {$_.PSIsContainer -eq $true -and $_.Name -match "Processed"} |select-object Fullname 

をリストには以下のように良く見えます:

PS C:\Users\mark.hodgson\Desktop\New folder> echo $dirs 

FullName               
--------               
C:\Users\mark.hodgson\Desktop\New folder\Folder1\FolderA\Processed 
C:\Users\mark.hodgson\Desktop\New folder\Folder1\FolderB\Processed 
C:\Users\mark.hodgson\Desktop\New folder\Folder2\Processed   
C:\Users\mark.hodgson\Desktop\New folder\Folder3\Processed   
C:\Users\mark.hodgson\Desktop\New folder\Folder4\Processed   
C:\Users\mark.hodgson\Desktop\New folder\Folder5\Processed 

んだけど、でも以下かなどの項目で作業しようとすると、それは私のデスクトップからすべてのフォルダを返すか、削除しますか?

$dirs | ForEach-Object { Get-ChildItem -Recurse -Force | Where-Object { !$_.PSIsContainer -eq $_.LastWriteTime -lt $limit } | Remove-Item -Force } 

同じ、私は$のためでDIR $ dirsに

を使用している場合、私はここで間違っ基本を取得する必要があります!私はパスをハードコードすることができますが、適切な仕事をするのが大好きです。

乾杯、

hodgm

+0

$ _ PSIsContainer -eq $ _ LastWriteTime -lt $限界?あなたの状態はここで間違っています。 -eqを-andに置き換えてください。 –

+0

lat-lineの '-eq'は' -and'でなければなりません。削除項目 – LotPings

+0

にテスト中に '-whatif'を追加すると'! 'は' -not'になります。または '-eq'(等号)を' -ne'(等しくない)に置き換えることができます。 http://ss64.com/ps/syntax-compare.html – JohnLBevan

答えて

0

あなたはForEach-Object体内に現在のパイプラインのアイテムを参照する必要があります!。。

$dirs | ForEach-Object { Get-ChildItem $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.LastWriteTime -lt $limit } | Remove-Item -Force } 
+0

(-eqを〜と置き換えて、上記のコメントから)完璧なものを選んでください! – hodgm

+0

非常に高く評価されています:D – hodgm

+0

@hodgm私の答えで問題が解決した場合は、左側のチェックマークをクリックして問題を解決してください –