Есть ли хороший инструмент для поиска папок $ 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