2014-10-09 34 views
1

我正在尋找精簡客戶端網站的cryptolocker爆發後需要恢復的文件夾數量,並開始尋找PowerShell作爲一種很好的方法來執行此操作。我需要做的是恢復一個文件夾,如果它有擴展名爲.encrypted的任何文件。PowerShell - 確定某個文件夾層次結構中某些文件的存在效率

我可以運行下面

get-childitem C:\ -recurse -filter 「*.encrypted」 | %{$_.DirectoryName} | Get-Unique 

並獲得在他們已經.encrypted文件,但我想要做的就是瘦不下來的列表,例如,如果我們有以下文件中的所有文件夾的列表列表並假設*表示該文件夾包含加密文件。

C:\ Folder1中

C:\ Folder1中\ FOLDER2 \ Folder4 *

C:\ Folder1中\ FOLDER2 *

C:\ Folder1中\ Folder3 \ Folder5 *

Ç :Folder1中\ Folder3 \ Folder6 \

,而不是返回

C:\ Folder1中\文件夾2 \ * Folder4

C:\ Folder1中\文件夾2 *

C:\ Folder1中\ Folder3 \ Folder5 *

我想它只是返回,因爲這將是最佳的恢復選項。

C:\ Folder1中\文件夾2 *

C:\ Folder1中\ Folder3 \ Folder5 *

我知道這是一個相當複雜的問題,所以我不要求任何人來解決這個問題對我來說只是一些指向正確方向的指針將會非常棒,因爲我的大腦現在正在被炸,我需要很快寫出它。

+0

這是一個非常複雜的請求。一個簡單的答案可以幫助你追加'|排序「到您正在運行的命令的末尾......它至少可以幫助您在視覺上縮小範圍。 – 2014-10-09 14:03:37

+0

您輸出的規則不明確。示例 - 如果驅動器根目錄中有加密文件,則整個輸出將爲單行:「c:\」 - 這是您想要的嗎? – x0n 2014-10-09 19:02:15

回答

0

這是太多的評論,但我不知道這將是一個很好的答案,只是一種來完成它的hackish方式...

我能想到的唯一的事情是得到你的文件夾列表,然後開始將它們全部相互匹配,並且當你得到兩個至少部分匹配的文件時,刪除較長的文件夾。

$FullList = GCI C:\*.encrypted | Select -Expand DirectoryName -Unique | Sort -Property Length 
$ToRemove = @() 
foreach($Folder in $FullList){$ToRemove+=$FullList| Where{$_ -ne $Folder -and ($_ -match [regex]::Escape($Folder))}} 
$FinalList = $FullList | Where{$ToRemove -notcontains $_} 

雖然這樣做會很慢,但還是有更好的方法去做。我還沒有想到更好的方法。

不要誤解我的意思,這樣做會起作用,而且確實比手工處理事情要快,但我確信必須有更好的方法來做到這一點。

2

這裏有一個簡單的方法來做到這一點,應該是相當有效:

PS C:\> dir -ad -rec | where { test-path (join-path $_.FullName *.encrypted) } 
  • dirget-childitem
  • where別名爲where-object
  • -ad手段的別名返回目錄只
  • -rec意味着遞歸
  • test-path返回$true如果存在的路徑(是的,它處理通配符)

S,我們通過轉發文件夾對象下管道中的所有文件夾遞歸。我們得到文件夾的全名,並附加*.encrypted。如果test-path爲此路徑返回$ true,我們將該文件夾轉發到管道。該文件夾在控制檯輸出中結束。現在

,如果你想更大膽的嘗試了一下,這裏有一個更充實的單行比將報告文件夾和加密文件算到機器命名的CSV文件:

dir -ad -rec | ? { test-path (join-path $_.FullName *.txt) } | % { 
    [pscustomobject]@{"Path"=$_.fullname;"Count"=(dir (join-path $_ *.txt)).count}} |` 
    Export-Csv "c:\temp\$(hostname).csv" -NoTypeInformation 

?%where-objectforeach-object分別)

隨着一點點更多的努力別名,你可以用整個公司承擔PowerShell遠程的扇出掃描每臺目標計算機上啓用並已將其所有的結果返回給你來自所有機器。

祝你好運!

相關問題