Localizando pastas $ RECYCLE.BIN em compartilhamentos de rede

1

Existe uma boa ferramenta para encontrar pastas $ RECYCLE.BIN em compartilhamentos de rede e seu tamanho?

Em nosso ambiente, usamos perfis de roaming e redirecionamento de pastas para armazenar perfis / dados de usuários. Os usuários geralmente são preguiçosos na limpeza de sua lixeira e, assim, nossos compartilhamentos de rede são preenchidos.

Eu já experimentei com um script do PowerShell, mas ele geralmente falha ou tem limite de tempo.

Obrigado por qualquer conselho.

Melhor.

    
por mazebuhu 27.11.2013 / 12:25

2 respostas

1

Obrigado por todas as suas respostas. Eu encontrei uma maneira mais curta e, na minha opinião, mais elegante de encontrar "$ RECYCLE.BIN" recursivamente em um compartilhamento de rede ou diretório local usando o Windows PowerShell:

Get-ChildItem \server\share -Directory -Hidden -Filter '$REC*' -Recurse | ft Name,FullName

ou você simplesmente faz um cd no diretório raiz em que deseja iniciar sua pesquisa:

cd C:\Directory
Get-ChildItem -Directory -Hidden -Filter '$REC*' -Recurse | ft Name,FullName

Se você também quiser exibir o tamanho da pasta $ RECYCLE.BIN, use este comando, um pouco mais complicado:

Get-ChildItem \server\share\some\path -Directory -Hidden -Filter '$REC*' -Recurse | Select-Object Name,FullName,@{l="Size in MB";e={"{0:N2}" -f ((Get-ChildItem $_.FullName -Force | Measure-Object -Property length -sum).sum / 1MB)}} 

ou menor:

gci \server\share\some\path -Directory -Hidden -Filter '$REC*' -Recurse | select Name,FullName,@{l="Size in MB";e={"{0:N2}" -f ((gci $_.FullName -Force | measure -Property length -sum).sum / 1MB)}} 

(Lembre-se de que, se usar, use "Select-Object", truncar o objeto de retorno original apenas os membros especificados.)

Melhor!

    
por 20.01.2014 / 15:51
1

Um one-liner de prompt de comando realmente sujo pode ser:

FOR /d /r "D:\" %A IN ($RECYCLE.BIN) DO @IF EXIST "%~A" ECHO %~A & ROBOCOPY /l /s /nfl /fp /np /ndl /nfl /njh /r:0 "%~A" "%~A"

(substitua "D:\" pelo caminho raiz da sua pesquisa).

O resumo de ROBOCOPY fornecerá um indicador de tamanho razoável na coluna "Ignorado".

Editar

Outra linha realmente suja, desta vez digitalizando todas as letras de unidade possíveis em uma variedade de servidores:

FOR %S IN (SERVER1 SERVER2 SERVER3) DO @FOR %D IN (A$ B$ C$ D$ E$ F$ G$ H$ I$ J$ K$ L$ M$ N$ O$ P$ Q$ R$ S$ T$ U$ V$ W$ X$ Y$ Z$) DO @IF EXIST "\%~S\%~D\$RECYCLE.BIN" ECHO. & ECHO. & ECHO \%~S\%~D\$RECYCLE.BIN & ROBOCOPY /l /s /nfl /fp /np /ndl /nfl /njh /r:0 "\%~S\%~D\$RECYCLE.BIN" "\%~S\%~D\$RECYCLE.BIN"

É claro, se chegar a um ponto em que essas anotações se tornem inatingíveis, em um arquivo de lote scanbins.cmd :

@ECHO OFF

VERIFY OTHER 2>nul
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 ECHO Unable to enable extensions & GOTO :loop_end

SET ROBO="%WINDIR%\system32\robocopy.exe" /l /s /nfl /fp /np /ndl /nfl /njh /r:0
SET FIND="%WINDIR%\system32\find.exe" /i
SET DISKS=A$ B$ C$ D$ E$ F$ G$ H$ I$ J$ K$ L$ M$ N$ O$ P$ Q$ R$ S$ T$ U$ V$ W$ X$ Y$ Z$

:loop_start
IF "{%1}"=="{}" GOTO :loop_end

FOR %%D IN (%DISKS%) DO (
  SET BIN_PATH=\%~1\%%~D\$RECYCLE.BIN

  IF EXIST "!BIN_PATH!\.\*" (
    FOR /f "useback tokens=*" %%F IN ('dir /a:d /b "!BIN_PATH!"') DO (
      SET USER_BIN_PATH=!BIN_PATH!\%%~nxF
      IF EXIST "!USER_BIN_PATH!\.\*" (
        ECHO.
        ECHO !USER_BIN_PATH!
        %ROBO% !USER_BIN_PATH! !USER_BIN_PATH! | %FIND% " : " | %FIND% /v "Ended" | %FIND% /v "Times"
      )
    )
  )
)

SHIFT
GOTO :loop_start

:loop_end
ENDLOCAL
GOTO :EOF

... que você pode chamar como scanbins.cmd SERVER1 SERVER2 SERVER3

    
por 03.12.2013 / 17:00