Question [Résolu]question sur mon code

Plus d'informations
il y a 10 ans 11 mois #20178 par Axel
la fonction new-rapport, je construit un objet et j'émet les informations que je souhaite dans le pipeline ensuite j'utilise $_ pour obtenir les informations du pipeline actif

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

Plus d'informations
il y a 10 ans 11 mois #20179 par Philippe
dans ta fonction new-rapport tu a ceci :

[code:1]MD5 = (Get-FileHash $fichier.FullName).MD5
[/code:1]

sais tu ce que ça fais ?
.

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

Plus d'informations
il y a 10 ans 11 mois #20180 par Axel
j'appelle la fonction get-filehash de type MD5 pour chaque fichier suspecté d'être des doublons par taille

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

Plus d'informations
il y a 10 ans 11 mois #20181 par Philippe

j'appelle la fonction get-filehash de type MD5 pour chaque fichier suspecté d'être des doublons par taille


oui et non

tu appel la fonction get-filehash pour chaque fichier suspecté d'être des doublons par taille -> OK

de type MD5 -> NON

$variable = (...).MD5 cette opération affecte à la variable $variable la valeur de la propriété MD5 de l'object entre les parenthèses !
et entre parenthèses tu fais appel à la fonction qui calcul le MD5 qui te renvoie un objet contenant plusieurs propriétés dont le MD5 !

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

Plus d'informations
il y a 10 ans 11 mois #20183 par Philippe
pour finir de répondre a ta question

ma question est donc, est-ce que le md5 ce calcul lors de l'analyse ? ou lors de l'exportation des infos ?


j'ai réorganisé ton script avec les conseils donnés précédemment
j'espère que tu y verra plus clair :

[code:1]
# Déclaration des variables

# Répertoire par défaut pour le rapport
$CHEMIN_RAPPORT = \"C:\temp\"
# Répertoire par défaut pour l'analyse
$DEFAULT_PATH = \"S:\PolePilotage\DSIT\ServiceIMP\"

# Boite de dialogue avec comme boutons reponses oui/non
function OuiNon {
param(
$Caption,
$Message,
[ValidateSet(\"Oui\",\"Non\"«»)]
$DefaultChoice=\"Non\" )

$Yes = New-Object System.Management.Automation.Host.ChoiceDescription \"&Oui\"
$No = New-Object System.Management.Automation.Host.ChoiceDescription \"&Non\"
$Choices = [System.Management.Automation.Host.ChoiceDescription[]]($Yes,$No)
$Host.UI.PromptForChoice($Caption,$Message,$Choices,([byte]($DefaultChoice -eq \"Non\"«»)))
}

# calcul
function Get-FileHash {
[CmdletBinding()]
Param(
[Parameter(Position=0,Mandatory=$true, ValueFromPipelineByPropertyName=$true,ValueFromPipeline=$True)]
[Alias(\"PSPath\",\"FullName\"«»)]
[string[]]$Path,
[Parameter(Position=1)]
[ValidateSet(\"MD5\"«»)]
[string[]]$Algorithm = \"MD5\"
)

process {
foreach ($item in $Path) {
$item = (Resolve-Path $item).ProviderPath
$object = New-Object PSObject -Property @{
Path = $item
}

#ouverture du flux
$stream = ([IO.StreamReader]$item).BaseStream
foreach ($Type in $Algorithm) {
[string]$hash = -join ([Security.Cryptography.HashAlgorithm]::Create( $Type ).ComputeHash( $stream ) | foreach {\"{0:«»X}\" -f $_ })
$object = Add-Member -InputObject $Object -MemberType NoteProperty -Name $Type -Value $Hash -PassThru
}
$object.pstypenames.insert(0,'System.IO.FileInfo.Hash')
#sortie du Hash et du chemin
Write-Output $object
#fermeture du flux
$stream.Close()
}
}
}

function new-rapport {
param($fichier)
#construit un nouvel objet à partir d'un objet fichier
#par défaut le résultat est émis dans le pipeline
new-object PSObject -property @{
Lastwritetime = $fichier.Lastwritetime;
Length = $fichier.Length;
FullName = $fichier.FullName;
Owner = $fichier.GetAccessControl().Owner;
MD5 = (Get-FileHash $fichier.FullName).MD5
}#new-object
}#new-rapport


# partie principale du script
function main {

# demande de la valeur minimum en octet des fichiers à analyser
$taille = read-host \"`nIndiquer la taille minimum pour l'analyse des fichiers en Octet: \"

# L'utilisateur peut choisir le répertoire à analyser
$folder_path = read-host \"`nIndiquer le répertoire à analyser,`n`tpar défaut [$DEFAULT_PATH] \"

if($folder_path) {
$search = $folder_path
}
else {
$search = $DEFAULT_PATH
}

$datedebut = get-date

# recherche des fichiers superrieur à la taille demandé
$files = Get-ChildItem $search * -recurse -force | where-object {$_.length -gt $taille}
$datefin = get-date
$dateresult = $datefin - $datedebut

# création de la liste des fichiers de même taille
$fichiers_suspects = $files |
sort-object length |
group-object length |
where-object {$_.count -gt 1}

# calcul du MD5 sur les fichiers suppectés d'être des doublons
$rapport = $fichiers_suspects | foreach-object {
# boucle sur la collection group de chaque doublon
$_.group |
foreach-object {
# boucle sur la collection de fichiers de chaque group
new-rapport -fichier $_
} #file
} #group


# calcul le nombre de fichiers suspectés
$i = $rapport.Count

$Oui = 0
$Non = 1
$nomfichier = get-date -format dd.MM.yyyy-HH.mm

# interrogation de l'utilisateur sur la création d'un fichier rapport daté
if ($i -gt 1) {
write-host \"`n$dateresult`n\"
write-warning \"$i fichiers suspectés\"
$Choix = OuiNon -message \"`nLes MD5 sont calculer, voulez vous exporter les informations ?\"
}
else {
Write-Warning \"La recherche n'a pas trouvé de fichier\"
}

# suivant le choix de l'utilisateur exporte les informations dans un fichier rapport daté
if ($Choix -eq $Oui) {
$d_debut = get-date
$rapport | export-csv \"$CHEMIN_RAPPORT\rapport_$nomfichier.csv\" -NoTypeInformation -Delimiter ';'
write-host \"`nLes informations ont été enregistrées.`n\"
write-warning \"$CHEMIN_RAPPORT\rapport_$nomfichier.csv\"
$d_fin = get-date
$d_result = $d_fin - $d_debut
write-host \"`n$d_result`n\"
}
}

# fonction principale du script
main

[/code:1]<br><br>Message édité par: 6ratgus, à: 17/06/15 16:42

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

Plus d'informations
il y a 10 ans 11 mois #20185 par Philippe
tu sera sans doute heureux d'apprendre que tu n'est pas que l'esclave de ta boite mais aussi du forum
car ce soir je l'ai lancé pour contrôlé les doublons sur mon serveur de fichiers. enfin une partie de environ 90 000 fichiers je crois
ça fait du boulot pour powershell B)

je verrais demain matin ce que ça donne !!! :)

et gare à toi si les résultats ne sont pas bon ! :blink: ;) :woohoo:
je plaisante bien sûr

correction 175 milles fichiers pour 45 Go :ohmy:
bon il aura fini demain j'espere ! :whistle:<br><br>Message édité par: 6ratgus, à: 17/06/15 18:36

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

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