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.