Powershell-Skript zum Inventarisieren von Dateitypen

Powershell-Skript zum Inventarisieren von Dateitypen

Ich habe ein Skript geschrieben, um Laufwerke nach bestimmten Dateitypen zu inventarisieren. (AVI, MPG, MP3 usw.)

Ich kann das Basisskript zum Laufen bringen, indem ich nur ein festgelegtes Laufwerk und eine festgelegte Erweiterung verwende, aber ich möchte wirklich, dass es Erweiterungen aus einer Datei und Laufwerke aus einer Datei liest.

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

Bei meiner Suche finde ich nur Server-Drivespace-Skripte.

Ich wäre für jede Anleitung dankbar.

Antwort1

Das war kompliziert, aber ich habe WMI verwendet, um die Laufwerke abzurufen, und habe dann eine Schleife basierend auf eindeutigen Erweiterungen ausgeführt:

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

Der WMI-Aufruf bringt nur lokale Laufwerke zurück.

Antwort2

So etwas sollte funktionieren ... Beachten Sie bitte das „-WhatIf“-Bit beim Export-CSV.

Alle CSV-Dateien würden in diesem Beispiel unter C:\temp gespeichert.

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

Wobei Drives.txt einen Laufwerksbuchstaben pro Zeile hat

C
D
E
[...]

Und Extensions.txt hat eine Erweiterung pro Zeile.

mp3
mpg
avi
[...]

verwandte Informationen