Назад | Перейти на главную страницу

Поиск папок $ RECYCLE.BIN в общих сетевых папках

Есть ли хороший инструмент для поиска папок $ RECYCLE.BIN в общих сетевых папках и их размера?

В нашей среде мы используем перемещаемые профили и перенаправление папок для хранения профилей / данных пользователей. Пользователи часто ленивы убирать свои корзины, поэтому наши сетевые ресурсы заполняются.

Я уже пробовал это с помощью сценария PowerShell, но он часто дает сбой или тайм-аут.

Спасибо за любой совет.

Лучший.

Спасибо всем за ответы. Я нашел более короткий и, на мой взгляд, более элегантный способ рекурсивно найти "$ RECYCLE.BIN" в общей сетевой папке или локальном каталоге с помощью Windows PowerShell:

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

или вы просто cd в корневой каталог, где хотите начать поиск:

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

Если вы дополнительно хотите отобразить размер папки $ RECYCLE.BIN, вы можете использовать эту, немного более сложную команду:

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)}} 

или короче:

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)}} 

(Имейте в виду, что при использовании «Select-Object» вы обрезаете исходный возвращаемый объект только для указанных членов.)

Лучший!

Действительно грязный однострочник командной строки может быть:

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"

(замена "D:\" для корневого пути вашего поиска).

Резюме ROBOCOPY отобразит индикатор разумного размера в столбце «Пропущено».

редактировать

Еще один очень грязный однострочник, на этот раз сканирующий все возможные буквы дисков на нескольких серверах:

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"

Конечно, если доходит до того, что такие однострочные строки становятся нечитаемыми, поэтому в пакетном файле 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

... который можно назвать scanbins.cmd SERVER1 SERVER2 SERVER3