Em nosso Github postamos um script PowerShell para criar um site com os relatórios das pastas de rede (incluindo um gráfico com as maiores pastas de rede) e com os relatórios do FSRM (de arquivos duplicados, antigos, grandes). Mas em alguns casos um relatório mais simples, pode ajudar os departamentos a executarem a limpeza de suas pastas. Por isso, abaixo, disponibilizamos um script que:

  • Você cadastre onde deseja exportar seu relatório;
  • Você cadastre as pastas de rede que deseja analisar;
  • Crie uma lista de extensões (por exemplo doc. pdf, etc.) e de palavras chaves que não devem ser analisados;
  • Crie uma lista de extensões que deve constar no relatório (exemplo: mp3);
  • Crie uma lista de palavras que deve constar no relatório (exemplo: deletar);
  • A partir disso, o script lista as pastas e, baseado nos filtros acima, cria um csv com esses dados (usando como dica nosso post Exportar o resultado do PowerShell para o Excel), incluindo quantas vezes cada pasta constou no relatório.

Vários desses itens citados acima são configuráveis (em cinza), o script é:

$ExportReportTo = "C:\Temp\"
$Folders = "E:\deptos\Folder1","E:\deptos\Folder2","F:\Projects\Project1","X:\Temp"
$ExtensionsWhiteList = "doc","docx","pdf","ppt","pptx","xls","xlsx"
$WordsWhiteList = "template"
$Extensions = "backup","bak","bkp","cab","dll","exe","mp3","msi"
$Words = "antig","apagar","backup","deletar","excluir","instalador","lixeira","temp","tmp"
#Colocar acentuação em Português
chcp 1252
$ErrorActionPreference= 'silentlycontinue'
Clear-host
$Folders | ForEach-Object {
    $FolderPath = $_
    If (Test-Path "$FolderPath") {
        $FolderName = (get-item $FolderPath).Name
        Write-host "------------------------------"
        Write-host "- Folder $FolderName - $(date)"
    #Listing the fullpaths with more than 250 characters
        Write-host "- Getting Long Folders " -NoNewline
        cd "$FolderPath"
        Out-File C:\Temp$FolderName-longfilepath.txt ; cmd /c "dir /b /s /a" | ForEach-Object { if ($_.length -gt 250) {$_ | Out-File -append C:\Temp$FolderName-longfilepath.txt}}
        Write-host "FINISHED" -ForegroundColor Green

    #Getting folder information
        Write-host "- Getting Folder Content " -NoNewline
        $FullList = Get-ChildItem -File -Recurse -Path "$FolderPath" | Select-Object DirectoryCounted,Directory,Name,Extension,Filter,ObjectFound,CreationTime,LastAccessTime,LastWriteTime,Length | Where-Object Directory -ne $Null
        Write-host "FINISHED" -ForegroundColor Green

    #Removing the WHITELIST
        Write-host "- WordWhiteList: " -NoNewline
        $WordsWhiteList | ForEach-Object {
            $WordWhiteList = "$_"
            Write-host "$WordWhiteList " -NoNewline -ForegroundColor Yellow
            $FullList = $FullList | Where-Object Directory -NotLike "*$WordWhiteList*"
        }
        Write-host "FINISHED" -ForegroundColor Green

        Write-host "- ExtensionWhiteList: " -NoNewline
        $ExtensionsWhiteList | ForEach-Object {
            $ExtensionWhiteList = ".$_"
            Write-host "$ExtensionWhiteList " -NoNewline -ForegroundColor Yellow
            $FullList = $FullList | Where-Object Extension -ne "$ExtensionWhiteList"
        }
        Write-host "FINISHED" -ForegroundColor Green

    #Creating a Loop for each extension in the our list
        Write-host "- Extension: " -NoNewline
        $Extensions | ForEach-Object { 
            $Extension = ".$_"
            Write-host "$Extension " -NoNewline -ForegroundColor Yellow
            $FullList | Where-Object {($_.Filter -eq $Null) -AND ($_.Extension -eq "$Extension")} | ForEach-Object {
                $_.Filter = "FileExtension"
                $_.ObjectFound = $Extension
            }
        }
        Write-host "FINISHED" -ForegroundColor Green

    #Creating a Loop for each file with a word of our list
        Write-host "- Word in FILE: " -NoNewline
        $Words | ForEach-Object {
            $Word = $_
            Write-host "$Word " -NoNewline -ForegroundColor Yellow
            $FullList | Where-Object {($_.Filter -eq $Null) -AND ($_.Name -like "*$Word*")} | ForEach-Object {
                $_.Filter = "Arquivo Contem Nome"
                $_.ObjectFound = $Word
            }
        }
    Write-host "FINISHED" -ForegroundColor Green

    #Creating a Loop for each folder with a word of our list
        Write-host "- Word in PATH: " -NoNewline
        $Words | ForEach-Object {
            $Word = $_
            Write-host "$Word " -NoNewline -ForegroundColor Yellow
            $FullList | Where-Object {($_.Filter -eq $Null) -AND ($_.Directory -like "*$Word*")} | ForEach-Object {
                $_.Filter = "Pasta Contem Nome"
                $_.ObjectFound = $Word
            }
        }
        Write-host "FINISHED" -ForegroundColor Green

    #Load just the list that we found a filter
        $FullList = $FullList | Where-Object Filter -ne $Null

    #Counting how many times each folder appears in the list
        Write-host "- Counting how many each folder is in the list: " -NoNewline
        $FullPathsList = $FullList.Directory.FullName | Get-Unique
        $FullPathsList | ForEach-Object {
            $FullPath = $_
            $count = @($FullList | Where-Object Directory -like "$FullPath").count
            $FullList | Where-Object Directory -like "$FullPath" | ForEach-Object {
                $_.DirectoryCounted = $count
            }
        }
        $FullList = $FullList | Sort-Object -property DirectoryCounted –Descending

    #Exporting to CSV
        Write-host "Saving " -NoNewline
        $FullList | Export-Csv -NoTypeInformation -Encoding UTF8 -Delimiter ';' "$ExportReportTo$FolderName-Report.csv"
        Write-host "- FINISHED " -ForegroundColor Green

    }
}

Fontes/Referências

NVLAN – Exportar o resultado do PowerShell para o Excel

https://github.com/luizcarlosbranco/nvlan

Mais Informações

Esperamos ter ajudado da melhor forma possível e estaremos sempre a disposição para mais informações.

Se você tem interesse em algum assunto específico, tem alguma dúvida que precisa de ajuda, ou quer sugerir um post, entre em contato conosco pelo e-mail equipe@nvlan.com.br.

NVLAN - Consultoria