Compartilhe que você está se especializando

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 te ajudado e estaremos sempre a disposição para mais informações.

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

NVLAN - Consultoria