#!/usr/bin/perl use strict; use warnings; use 5.010; system 'cls'; require Win32::OLE; my $ordner = 'D:/Arbeit/Unterverz'; # Quelle: https://docs.microsoft.com/de-de/windows/win32/cimwin32prov/compress-method-in-class-cim-directory my %fehlernr = ( 2 => 'Der Zugriff wurde verweigert', 8 => 'Nicht angegebener Fehler', 9 => 'Ungültiges Objekt', 10 => 'Das Objekt ist bereits vorhanden', 11 => 'Dateisystem, nicht NTFS', 12 => 'Plattform nicht Windows', 13 => 'Laufwerk nicht identisch', 14 => 'Verzeichnis ist nicht leer', 15 => 'Freigabeverletzung', 16 => 'Ungültige Startdatei', 17 => 'Die Berechtigung wurde nicht gehalten', 21 => 'Ungültiger Parameter', ); if (my $obj_wmi = Win32::OLE->GetObject('winmgmts:\\\\.\\root\\cimv2')) { # Quelle: https://www.stephenjc.com/2009/12/09/windows-log-file-compression-in-perl if (my $obj_dir = $obj_wmi->Get("Cim_Directory='$ordner'")) { if ($obj_dir->Compressed != 1) { say "vorher : NICHT komprimiert"; my $int_rc = $obj_dir->Compress; # dieses Kommando liefert kein true oder false if ($int_rc != 0) { say "Fehler: '$int_rc / " .(defined $fehlernr{$int_rc} ? $fehlernr{$int_rc} : 'Unbekannte Ursache') ."'"; } else { if (my $obj_dir_after = $obj_wmi->Get("Cim_Directory='$ordner'")) { if ($obj_dir_after->Compressed == 1) { say "Ordner ist jetzt komprimiert"; } else { say "Ordner komprimieren hat nicht funktioniert"; } } else { say "Shit in ".__LINE__; } } } else { say "Ordner ist bereits komprimiert"; } } else { say "Shit in ".__LINE__; } } else { say "Shit in ".__LINE__; }