Mostrando postagens com marcador buscar. Mostrar todas as postagens
Mostrando postagens com marcador buscar. Mostrar todas as postagens

sábado, 21 de outubro de 2017

Identificando os arquivos grandes

Digamos que desejamos identificar quais arquivos estão ocupando muito espaço em determinado drive.

Ainda que existam boas ferramentas para descobrir, cito aqui (WinDirStat), Powershell pode nos ajudar.

Vamos criar uma função que receberá como parâmetros:
  • O drive que desejamos verificar.
  • O total de arquivos grandes que desejamos inventariar.
  • O total de arquivos grandes que desejamos inventariar.
  • Onde desejamos salvar Log com as informações inventariadas.
  • A extensão dos arquivos que desejamos inventariar
Function Get-LargeFiles {
    param([String]$drive, [Int32]$totalArq, [string]$Log, [String]$Ext)
...
}

Usaremos Get-ChildItem.
Get-ChildItem -path $drive -include $Ext -recurse -ErrorAction "SilentlyContinue" `
| ? { $_.GetType().Name -eq "FileInfo" } | where-Object {$_.Length -gt $fileSize} `
| sort-Object -property length -Descending `
| Select-Object Name, `
@{Name="Size In MB";Expression={ "{0:N0}" -f ($_.Length / 1MB)}},`
@{Name="LastWriteTime";Expression={$_.LastWriteTime}},`
@{Name="Path";Expression={$_.directory}} -first $totalArq

A função poderia ser escrita assim:
Function Get-LargeFiles {
    param([String]$drive, [Int32]$totalArq, [string]$Log, [String]$Ext)

Clear-Host
Write-Host " "
Write-Host "Buscando em $drive os $totalArq maiores arquivos (aguarde, pode demorar...)"
"Abaixo estão os $totalArq maiores arquivos em $drive, ordenados do maior ao menor:" | out-file -width 150 $Log -Force
$largeSizefiles = Get-ChildItem -path $drive -include $Ext -recurse -ErrorAction "SilentlyContinue" | ? { $_.GetType().Name -eq "FileInfo" } | where-Object {$_.Length -gt $fileSize} | sort-Object -property length -Descending | Select-Object Name, @{Name="Size In MB";Expression={ "{0:N0}" -f ($_.Length / 1MB)}},@{Name="LastWriteTime";Expression={$_.LastWriteTime}},@{Name="Path";Expression={$_.directory}} -first $totalArq
$largeSizefiles | format-list -property Name,"Size In MB",Path,LastWriteTime | out-file -width 150 $Log -append
Write-Host " "
Write-Host "Busca Completa!"
Write-Host " "
Write-Host "Pressione a tecla [ENTER] e o Log será aberto no Bloco de Notas"
Read-Host
c:\windows\system32\notepad.exe $Log
}

E ser chamada assim.
Get-LargeFiles -drive "E:" -totalArq 11 -Log "E:\LargeFiles.txt" -Ext "*.*"

Nesse exemplo, estamos verificando os 11 maiores arquivos, de qualquer extensão, do drive E:
Referência: RobWillis.info

segunda-feira, 18 de setembro de 2017

Manipulando Arrays

Powershell simplifica a manipulação de dados com arrays.
A seguir iremos ilustrar diversos exemplos.

Para criar um array vazio:
$automoveis = @()
$automoveis.Count
0

Para adicionar itens ao array:
$automoveis += "Ferrari"
$automoveis += "Lamborghini"
$automoveis += "Porsche"
$automoveis += "Maserati"
$automoveis.Count
4
$automoveis
Ferrari
Lamborghini
Porsche
Maserati

Obtendo elementos do array: Enquanto $automoveis[0] obtém o primeiro elemento, $automoveis[-1] recupera o último elemento, assim como $automoveis[$automoveis.Count-1].
$automoveis[0]
Ferrari
$automoveis[-1]
Maserati
$automoveis[$automoveis.Count-1]
Maserati

É possível extrair pedaços do array e atribuí-los a outros arrays, por exemplo:
$automoveis_ini = $automoveis[0..1]
$automoveis_ini
Ferrari
Lamborghini

$automoveis_fim = $automoveis[2..3]
Porsche
Maserati

$automoveis_fim[1]
Maserati

Ainda, obter itens utilizando operadores de comparação:
$automoveis -ne 'Ferrari'
Lamborghini
Porsche
Maserati

$automoveis -like '*s*'
Porsche
Maserati

Ordenando os itens do array, mantendo ordem no array original:
$automoveis_ordenados = $automoveis | Sort-Object
$automoveis_ordenados[2]
Maserati
$automoveis[2] ##array original fica igual
Porsche

$automoveis_ordenados
Ferrari
Lamborghini
Maserati
Porsche

Verificando se o arrray possui determinado item:
$automoveis -contains 'Maserati'
True

$automoveis -contains 'Honda'
False

Por fim, um exemplo para retornar itens do array com mais do que 7 letras:
$automoveis | Where-Object { $_.Length -gt 7 }
Lamborghini
Maserati