[R]Lister les fichiers par propriétaire et trier par taille

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 151
Enregistré le : lun. 13 août 2007 16:38
Localisation : Yvelines
Contact :
Status : Hors ligne

[R]Lister les fichiers par propriétaire et trier par taille

#1

Message par corrs78 » mer. 06 févr. 2019 10:28

Bonjour,
je ne trouve pas comment lister les fichiers récursivement (d'un serveur de fichier) appartenant à un utilisateur en particulier.
la fonction FileListToArrayRec semblait idéale, mais malheureusement on ne peut pas chercher par attribut ou propriété d'un fichier.
On peut pas non plus récupérer le poids de chaque fichier dans ce joli tableau :(

L'objectif est de donner un rapport/fichier csv à mes utilisateurs qui liste tous les fichiers dont ils sont propriétaires, ceci afin de visualiser rapidement quels gros fichiers impacte leur "quota user" sur le serveur.

J'ai fait un script powershell, mais c'est pas idéal surtout coté user :/

Code : Tout sélectionner

$date=Get-Date
[String]$username = "utilisateur"
[String]$outfile = "C:\temp\"+$date.Year+"_"+$date.Month+"_"+$date.Day+"_"+"searchowner.csv"
$path = Get-ChildItem "\\MON-SERVEUR\MES-DATA\" -Recurse
$poids = 0

Foreach( $file in $path ) {
  $f = Get-Acl $file.FullName
  
  
  if( $f.Owner -eq $username ) {
    $poids1=$file.length/1024
    Write-Host( "{0}"-f $file.FullName+';'+[Math]::Floor($poids1) | Out-File `
    -Encoding "UTF8" `
      -FilePath $outfile -Append      
      )

        $poids = $poids + $poids1

      }
    
}
Write-Host( "{0}"-f 'Total :'+';'+[Math]::Floor($poids) | Out-File `
      -Encoding "UTF8" `
      -FilePath $outfile -Append
      
      )
 
voici la propriété du fichier qui m'intéresse pour faire ce tri, hormis la taille.
Image

Auriez-vous une piste de réflexion à m'apporter ? Merci à vous
Modifié en dernier par corrs78 le mer. 06 févr. 2019 17:43, modifié 1 fois.

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 661
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

Re: [..]Lister les fichiers par propriétaire et trier par taille

#2

Message par walkson » mer. 06 févr. 2019 15:24

Bonjour,
On peut utiliser FileListToArrayRec() en complétant le tableau

Code : Tout sélectionner

#include <Array.au3>
#include <File.au3>

$folder = FileSelectFolder("Folder",@DesktopDir,0,"")
If @error Then Exit
$aArray = _FileListToArrayRec($folder,"*|*.lnk",$FLTAR_FILES,$FLTAR_RECUR ,0,2)
If Not IsArray($aArray) Then Exit MsgBox(0,"","erreur")
_ArrayColInsert ($aArray,1)
_ArrayColInsert ($aArray,2)
_ArrayColInsert ($aArray,3)

For $i = 1 To $aArray[0][0]
	$attribut = FileGetAttrib($aArray[$i][0])
	$proprio = _FileGetDetails($aArray[$i][0], 10)
	$poids = FileGetSize($aArray[$i][0])
	$aArray[$i][1] = $attribut
	$aArray[$i][2] = $proprio
	$aArray[$i][3] = $poids
Next
_ArraySort($aArray,1,1,0,3)
_ArrayDisplay($aArray)
$aArrayUnique = _ArrayUnique($aArray, 2)
_ArrayDisplay($aArrayUnique)
Local $csv
For $i = 1 To $aArrayUnique[0]
	For $y = 1 To $aArray[0][0]
	If $aArrayUnique[$i] = $aArray[$y][2] Then
		$csv &= $aArray[$y][0] &";"& $aArray[$y][1] &";"& $aArray[$y][2] &";"& Round($aArray[$y][3]/1024,2) & "Ko" & @CRLF
	EndIf
	Next
	FileWrite(StringReplace($aArrayUnique[$i],"\","-") & "table.csv",$csv)
	$csv = ""
Next


Func _FileGetDetails($File,$item)
	$File = FileGetLongName (StringStripWS($File,1))
	$File = StringStripWS($File,2)
   If Not FileExists($File) Then Return SetError(4)
   $objShell = ObjCreate("Shell.Application")
   If @error Then Return SetError(2)
   $Path = StringLeft($File, StringInStr($File, "\", 0, -1) -1)
   $fName = StringMid($File, StringInStr($File, "\", 0, -1) +1)
   $objFolder = $objShell.Namespace($Path)
   Local $dt
   For $Filename In $objFolder.Items

	  If $objFolder.GetDetailsOf($Filename, 0) = $fName Then $dt =  $objFolder.GetDetailsOf($Filename, $item)


   Next
   If $dt = "" Then Return ""
   $objShell = 0
   Return $dt
EndFunc  ;<==> _FileGetDetails($File)
J'utilise Func _FileGetDetails($File,$item) pour retrouver la propriété d'un document et tous les attributs. J'utilise cette fonction pour connaitre par exemple la longueur d'une vidéo
0  Nom >>> ASS-06-2018.pdf
1  Taille >>> 44,2 Ko
2  Type d’élément >>> Document PDF
3  Modifié le >>> 26/06/2018 16:14
4  Date de création >>> 26/06/2018 16:14
5  Date d’accès >>> 26/06/2018 16:14
6  Attributs >>> AI
7  État hors connexion >>>
8  Hors connexion >>>
9  Type identifié >>> Non spécifié
10  Propriétaire >>> PC-PC\PC
11  Sorte >>> Documents
12  Prise de vue >>>
13  Artistes ayant participé >>>
14  Album >>>
15  Année >>>
16  Genre >>>
17  Chefs d’orchestre >>>
18  Mots-clés >>>
19  Notation >>> Non classé
20  Auteurs >>>
21  Titre >>>
22  Objet >>>
23  Catégories >>>
24  Commentaires >>>
25  Copyright >>>
26  N° >>>
27  Longueur >>>
28  Vitesse de transmission >>>
Cette fonction vous donnera la liste complète comme ci-dessus (286 attributs)
Func _FileGetDetailsAll($File);; $File is the Full path and file name if the file to check.GEOSoft
   $objShell = ObjCreate("Shell.Application")
   $Path = StringLeft($File, StringInStr($File, "\", 0, -1) -1)
   $fName = StringMid($File, StringInStr($File, "\", 0, -1) +1)
   $objFolder = $objShell.Namespace($Path)
   $objVerbs = $objFolder.Self.Verbs
   Local $dt, $dt1
   For $Filename In $objFolder.Items
      For $i = 0 To 287
          If $objFolder.GetDetailsOf($Filename, 0) = $fName Then  $dt &= $i & "  " & $objFolder.GetDetailsOf(Null, $i) &" >>> "&  $objFolder.GetDetailsOf($Filename, $i)  & @CRLF
          Next

   Next
FileDelete(@ScriptDir & "\objFolder.txt")
FileWrite(@ScriptDir & "\objFolder.txt",$dt)
ShellExecute(@ScriptDir & "\objFolder.txt")
EndFunc  ;<==> _FileGetDetailsAll($File)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi

Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 151
Enregistré le : lun. 13 août 2007 16:38
Localisation : Yvelines
Contact :
Status : Hors ligne

Re: [..]Lister les fichiers par propriétaire et trier par taille

#3

Message par corrs78 » mer. 06 févr. 2019 15:58

Merci c'est parfait.
Maintenant j'essaie de digérer tout ça, et il y a une partie que je ne comprends pas c'est la boucle FOR imbriquée avec la fonction _ArrayUnique. Pourquoi chercher les doublons ?

Merci d'éclairer ma lanterne.

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 661
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

Re: [..]Lister les fichiers par propriétaire et trier par taille

#4

Message par walkson » mer. 06 févr. 2019 16:05

J'ai supposé qu'il y avait plusieurs propriétaires.
Si ce n'est pas utile, supprimez ! :wink:
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi

Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 151
Enregistré le : lun. 13 août 2007 16:38
Localisation : Yvelines
Contact :
Status : Hors ligne

Re: [..]Lister les fichiers par propriétaire et trier par taille

#5

Message par corrs78 » mer. 06 févr. 2019 16:56

Ha non un fichier ne peut avoir qu'un unique propriétaire.

Maintenant me reste à lister un propriétaire défini au lancement du script.

Merci pour tout.

Répondre