Résolu Rapport Compare-Object et Measure-Object

Plus d'informations
il y a 3 ans 5 mois - il y a 3 ans 5 mois #32730 par Soum Tony
Bonjour à tous,

J'ai besoin d'un peu d'aide svp.
J'ai un fichier CSV avec des comptes utilisateurs supprimés en SamAccountName. Nous avons des dossiers de ces utilisateurs et je souhaite faire du ménage dans nos serveurs de fichiers, leurs dossiers respectifs a pour nom leur SamAccountName. Mais avant cela, j'ai besoin d'avoir des statistiques, je génère le fichier, avec le nom du chemin et sa taille en Mo. Par contre, quand cela génère le fichier csv, je n'ai pas la bonne mise en forme où la taille serait à coté du répertoire en question. Il est écrit à la ligne en dessous.

Voici le script :

# Variables serveurs de fichiers
$Folder_PST = Get-ChildItem '\\Serveur1\pst' -Directory | % {$_.Name}
$Folder_Private = Get-ChildItem '\\Serveur2\Private' -Directory | % {$_.Name}
$Folder_Archives = Get-ChildItem '\\Serveur3\My_Archives_Place' -Directory | % {$_.Name}

# Import CSV
$CSV_users = Import-Csv -Path 'D:\Folders_for_delete.csv' | % {$_.'SamAccountName'}

# Comparer les utilisateurs supprimées et les répertoires des serveurs de fichiers
$Compare_Private = Compare-Object $Folder_Private $CSV_users -IncludeEqual -ExcludeDifferent
$Compare_PST = Compare-Object $Folder_PST $CSV_users -IncludeEqual -ExcludeDifferent
$Compare_Archives = Compare-Object $Folder_Archives $CSV_users -IncludeEqual -ExcludeDifferent

foreach($SAM in $Compare_Private){

if($SAM.SideIndicator -eq "=="){
Write-Output "\\Serveur1\Private\$($SAM.InputObject)" | Out-File -FilePath D:\Report_Folders_for_delete.csv -Append
[math]::Round((Get-ChildItem "\\Serveur1\Private\SAM.InputObject)" -Recurse | Measure-Object -Property Length -Sum).Sum / 1Mb,2) | Add-Content -Path D:\Report_Folders_for_delete.csv
}
}

foreach($SAM in $Compare_PST){

if($SAM.SideIndicator -eq "=="){
Write-Output "\\Serveur2\pst\$($SAM.InputObject)" | Out-File -FilePath D:\Report_Folders_for_delete.csv -Append
[math]::Round((Get-ChildItem "\\Serveur2\pst\$($SAM.InputObject)" -Recurse | Measure-Object -Property Length -Sum).Sum / 1Mb,2) | Add-Content -Path D:\Report_Folders_for_delete.csv
}
}

foreach($SAM in $Compare_Archives){

if($SAM.SideIndicator -eq "=="){
Write-Output "\\Serveur3\My_Archives_Place\$($SAM.InputObject)" | Out-File -FilePath D:\Report_Folders_for_delete.csv -Append
[math]::Round((Get-ChildItem "\\Serveur3\My_Archives_Place\$($SAM.InputObject)" -Recurse | Measure-Object -Property Length -Sum).Sum / 1Mb,2) | Add-Content -Path D:\Report_Folders_for_delete.csv
}
}


Le CSV d'import user a un format :

 

Actuellement j'ai:
 

Le CSV généré souhaité serait plutôt:
\\serveur1\Private\Pierre;0
\\serveur1\Private\Paul;228,28
\\serveur1\Private\Jacques;0
\\serveur2\Pst\Pierre;0,26
\\serveur3\My_Archives_Place\Pierre;xxx.xx
etc...

Peut-être il y a plus simple, mais je n'ai pas encore trouvé.

Merci pour votre aide =)
 
Pièces jointes :
Dernière édition: il y a 3 ans 5 mois par Soum Tony.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 5 mois #32731 par Laurent Dardenne
Salut,
>> Par contre, quand cela génère le fichier csv
d'après le résultat attendu tu devrais créer un objet , que tu insères dans une collection Et en fin de traitement. tu exportes cette collection en csv (export-csv).

Une fonction traitant chaque liste de répertoire peut réduire la taille du code.

>>Peut-être il y a plus simple,
Je dirais 'plus objet ' (que ligne de texte)

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 5 mois #32732 par Laurent Dardenne
qq chose dans ce genre là :
# Variables serveurs de fichiers
$Folder_PST = 1..5
$Folder_Private = 3..8
$Folder_Archives = 10..15

# Import CSV
$script:CSV_users = 5..10

$Liste=[system.collections.arraylist]::new()

Function Select-EqualObject{
 param($Folder,$Path)

  # Comparer les utilisateurs supprimés et les répertoires des serveurs de fichiers
 $Compare = Compare-Object $Folder $script:CSV_users -IncludeEqual -ExcludeDifferent
 foreach($Current in $Compare){

    if($Current.SideIndicator -eq "==")
    {
        $sam=$Current.InputObject
        $Result=[pscustomObject]@{Sam="$path\$Sam";Stat=$null}
        $Result.Stat=10 #[math]::Round((Get-ChildItem "$path\$($SAM)" -Recurse | Measure-Object -Property Length -Sum).Sum / 1Mb,2)
        $script:Liste.Add($Result) > $null
    }
 }
}

Select-EqualObject $Folder_PST '\\Serveur1\Private\'
Select-EqualObject $Folder_Private '\\Serveur2\pst\'
Select-EqualObject $Folder_Archives '\\Serveur3\My_Archives_Place\'
$script:Liste
$script:Liste|export-csv c:\temp\Report_Folders_for_delete.csv  -delimiter ';' -NoTypeInformation

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 5 mois #32733 par Soum Tony
Bonjour Laurent,

Merci pour la réponse, j'avais eu du mal à comprendre puis en lisant le script c'est tout bon.

Merci pour l'aide, ça m'a énormément aidé !!

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 5 mois #32734 par Soum Tony
Merci, j'avais pas compris pourquoi j'avais que des 10 dans Start, j'ai vu le commentaire dans la variable et c'était bon.

Merci encore !

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.120 secondes
Propulsé par Kunena