Script de Powershell para inventariar tipos de archivos

Script de Powershell para inventariar tipos de archivos

He estado escribiendo un script para inventariar unidades por tipos de archivos específicos. (AVI, MPG, MP3, etc...)

Puedo hacer que el script base funcione usando solo una unidad y una extensión establecidas, pero realmente me gustaría que lea las extensiones de un archivo y las unidades de un archivo.

$dir = get-childitem z:\ –recurse
ForEach ($item in $dir)
{
If ($item.extension –eq '.avi')
    {
    $item | select-object length,fullname,LastWriteTime | Export-CSV  C:\temp\z-avi.csv –notypeinformation –append
    }
}

Cuando busco, solo encuentro scripts de espacio en el disco del servidor.

Se agradecería cualquier orientación.

Respuesta1

Desordenado, pero elegí WMI para obtener las unidades y luego las recorrí en función de extensiones únicas:

$computer = Get-ADcomputer ComputerName
$drives = Get-WmiObject win32_volume -ComputerName $computer.DNSHostName | Where-Object {$_.DriveType -eq 3 -and $_.DriveLetter -ne $null -and $_.Label -ne "System Reserved"}

Foreach ($drive in $drives)
{
    $allfiles = gci $drive.DriveLetter -recurse | Select Name,FullName,Extension,Length,LastWriteTime
    $extensions = $allfiles | Select -Unique Extension
    Foreach ($ext in $extensions)
    {
    $filename = ($drive | Select -ExpandProperty DriveLetter -First 1)[0] +     ($ext | Select -ExpandProperty Extension -First 1)
    $extensionfiles = $allfiles | Where-Object {$_.Extension -eq   $ext.extension}
    #$extensionfiles.count
    $extensionfiles | Export-Csv C:\Temp\$filename.csv -Notypeinformation
    }
}

La llamada WMI recuperará solo las unidades locales.

Respuesta2

Algo como esto debería funcionar... Tenga en cuenta el -WhatIf en el bit Export-Csv.

Todos los archivos csv se guardarían en C:\temp en este ejemplo.

$drives = Get-Content .\Drives.txt
$extensions = Get-Content .\Extensions.txt

foreach($drive in $drives) 
{
    $files = Get-ChildItem -Path "$drive`:\*" -Recurse -Include $($extensions | % { "*.$_" }) | where { $_.PSIsContainer -eq $false }
    $grouped = $files | Group-Object -Property Extension
    foreach ($group in $grouped)
    {
        $group | select -ExpandProperty Group | select Length, FullName, LastWriteTime | Export-Csv -Path "C:\Temp\$drive-$($group.Name.Replace('.','')).csv" -Append -NoTypeInformation -WhatIf
    }
}

Donde Drives.txt tiene una letra de unidad por línea

C
D
E
[...]

Y Extensions.txt tiene una extensión por línea.

mp3
mpg
avi
[...]

información relacionada