Script Powershell para tipos de arquivo de inventário

Script Powershell para tipos de arquivo de inventário

Tenho escrito um script para inventariar unidades por tipos de arquivos específicos. (AVI, MPG, MP3, etc....)

Posso fazer com que o script base funcione usando apenas uma unidade e uma extensão definidas, mas eu realmente gostaria que ele lesse extensões de um arquivo e unidades de um arquivo.

$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
    }
}

Quando pesquiso, encontro apenas scripts de espaço em disco do servidor.

Qualquer orientação seria apreciada.

Responder1

Confuso, mas usei o WMI para obter as unidades e, em seguida, fiz um loop com base em extensões exclusivas:

$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
    }
}

A chamada WMI trará de volta apenas unidades locais.

Responder2

Algo assim deve resolver... Observe o -WhatIf no bit Export-Csv.

Todos os arquivos csv seriam salvos em C:\temp neste exemplo.

$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
    }
}

Onde Drives.txt tem uma letra de unidade por linha

C
D
E
[...]

E Extensions.txt tem uma extensão por linha.

mp3
mpg
avi
[...]

informação relacionada