Speichernutzung eines Windows Domänenbenutzers analysieren
Hallo zusammen,
folgendes Szenario: Linux fileserver auf Basis Samba4 mit aktivierter Kontigentbeschränkung (quota) auf filesystems /srv/freigaben. In Samba4 gibt es diverse Freigaben, physikalisch liegt alles unterhalb dieses filesystem, also z.B.
Freigabe --> Ort auf dem Linux filesystem
Foo --> /srv/freigaben/foo
Bar --> /srv/freigaben/bar
Homes --> /srv/freigaben/homes
Public --> /srv/freigaben/public
Marketing --> /srv/freigaben/marketing
usw.
Quotas sind eingerichtet und funktionieren auch soweit. Das Problem bzw. meine Frage ist: welche Möglichkeit hat ein standard Windows-Domänenbenutzer (=Mitarbeiter) herauszufinden, wo überall er Dateien auf diesem Server liegen hat. Alle Dateien, dessen Besitzer/Eigentümer ist werden ja zu seinem Quota dazugerechnet. Manuell und mit etwas Eigenrecherche kann ich auf dem Linux fileserver manuell alle Dateien des Benutzer "mustermann" rausfischen mit "find" und "awk" in einem one-liner aber das Ziel soll es sein, dass der Mitarbeiter das selbst anzeigen lassen kann. Er hat mehrere Ordner und Dateien quer durch alle verfügbaren Freigaben verteilt, möchte Platz schaffen (alte Daten aufräumen, komprimieren, löschen, ...) und weiß aber nicht wie er all "seine" Dateien findet.
Hat jemand einen Tip?
folgendes Szenario: Linux fileserver auf Basis Samba4 mit aktivierter Kontigentbeschränkung (quota) auf filesystems /srv/freigaben. In Samba4 gibt es diverse Freigaben, physikalisch liegt alles unterhalb dieses filesystem, also z.B.
Freigabe --> Ort auf dem Linux filesystem
Foo --> /srv/freigaben/foo
Bar --> /srv/freigaben/bar
Homes --> /srv/freigaben/homes
Public --> /srv/freigaben/public
Marketing --> /srv/freigaben/marketing
usw.
Quotas sind eingerichtet und funktionieren auch soweit. Das Problem bzw. meine Frage ist: welche Möglichkeit hat ein standard Windows-Domänenbenutzer (=Mitarbeiter) herauszufinden, wo überall er Dateien auf diesem Server liegen hat. Alle Dateien, dessen Besitzer/Eigentümer ist werden ja zu seinem Quota dazugerechnet. Manuell und mit etwas Eigenrecherche kann ich auf dem Linux fileserver manuell alle Dateien des Benutzer "mustermann" rausfischen mit "find" und "awk" in einem one-liner aber das Ziel soll es sein, dass der Mitarbeiter das selbst anzeigen lassen kann. Er hat mehrere Ordner und Dateien quer durch alle verfügbaren Freigaben verteilt, möchte Platz schaffen (alte Daten aufräumen, komprimieren, löschen, ...) und weiß aber nicht wie er all "seine" Dateien findet.
Hat jemand einen Tip?
Please also mark the comments that contributed to the solution of the article
Content-Key: 521234
Url: https://administrator.de/contentid/521234
Printed on: April 23, 2024 at 13:04 o'clock
9 Comments
Latest comment
Powershell Einzeiler am Client, ansonsten kannst du ja auch ne PHP-Seite basteln die es dem User auf ner Webseite präsentiert.
Get-ChildItem "\\SERVER\Share" -Recurse -File -Force -EA SilentlyContinue | ?{$_.GetAccessControl().GetOwner([System.Security.Principal.NTAccount]).Value -eq "$env:USERDOMAIN\$env:USERNAME"} | sort Length -Desc | select @{n='Größe(MB)';e={"{0:F2}" -f ($_.Length / 1MB)}},LastWriteTime,Fullname | ogv
Klar einfach ne Schleife über Win32_Share drum pappen
gwmi Win32_Share -Computer xyz
Dann ist wohl die Firewall des Servers komplett dicht, und die WMI Ausnahme ist nicht gegeben.
Geht hier einwandfrei
$server = 'SERVERXY'
gwmi win32_Share -Computer $server | ?{$_.Type -eq 0 -and $_.Name -notmatch '\$$'} | %{
Get-ChildItem "\\$server\$($_.Name)" -Recurse -File -Force -EA SilentlyContinue | ?{$_.GetAccessControl().GetOwner([System.Security.Principal.NTAccount]).Value -eq "$env:USERDOMAIN\$env:USERNAME"} | sort Length -Desc | select @{n='Größe(MB)';e={"{0:F2}" -f ($_.Length / 1MB)}},LastWriteTime,Fullname
} | ogv
Uups ist ja ein Samba-Server der hat ja kein WMI da geht das natürlich nicht. Dann musst du die Shares auf andere Art auslesen (z.B. über "net view") oder im Skript definieren.
$server = 'SERVERXYZ'
net view $server | ?{$_ -match 'Platte'} | %{($_ -split '\s+')} | %{
Get-ChildItem "\\$server\$_" -Recurse -File -Force -EA SilentlyContinue | ?{$_.GetAccessControl().GetOwner([System.Security.Principal.NTAccount]).Value -eq "$env:USERDOMAIN\$env:USERNAME"} | sort Length -Desc | select @{n='Größe(MB)';e={"{0:F2}" -f ($_.Length / 1MB)}},LastWriteTime,Fullname
} | ogv
Ja, beschäftige dich mal mit try .... Catch