Question [Résolu]question sur mon code

Plus d'informations
il y a 10 ans 11 mois #20189 par Axel
héhé, Ah mais il est pas tout à fait bon encore ! :p la je ne recherche que les fichiers suspectés d'etre des doublons par taille ! donc il se peut que tu trouve des fichiers ayant la même taille mais pas le même MD5 et merci pour votre aide

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

Plus d'informations
il y a 10 ans 11 mois #20192 par Philippe
106 000 sur 175 000 suspects. y a beaucoup de fichier de même taille mais je mis attendais un peu !
mais que 1 h de travail en réseau vers un serveur !!

Ah mais il est pas tout à fait bon encore !

je sais qu'il n'est pas fini mais il fonctionne à cette étape et donne une idée

je vais rajouter la partie comparaison du MD5 et attendre ta version, pour la comparé !! ;)
ta presque tout de prêt pour ça ! :)

ma modif du code t'a aidé pour le moment du calcul du MD5 ?
.<br><br>Message édité par: 6ratgus, à: 18/06/15 10:02

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

Plus d'informations
il y a 10 ans 11 mois #20195 par Axel
oui si j'ai bien compris elle se fait dès le début :/ c'est pas ce qu'on me demande &gt;&lt;, merci pour la structure du code je comprends mieux enfin j'espère avoir compris :p.

Justement je voulais faire cette structure à la fin quand mon programme serai presque complet mais je remarque que c'est mieux de le faire pas à pas.

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

Plus d'informations
il y a 10 ans 11 mois #20204 par Philippe
oui
le MD5 est donc calculé avant que tu ne pose la question \&quot;voulez vous calculé ...\&quot;
ici exactement :
[code: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[/code:1]

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

Plus d'informations
il y a 10 ans 11 mois #20264 par Axel
coucou 6ratgus voici ma nouvelle version ( toujours pas terminée, je galère avec l'interaction de l'utilisateur lorsqu'il souhaite rentrer la taille et oui si il veut mettre 1GB il ne va pas mettre 1 000 000 000 Octets, ça à l'air pourtant simple mais je ne trouve pas de solution, je n'ai pas trouvé comment on appel la solution que tu m'as donné $() j'ai essayé mais ça ne marche pas, c'est le read host qui doit poser problème )

[code:1]
# Déclaration des variables

# Choix de l'algorithme
$ALGO = 'MD5'
# Répertoire par défaut pour le rapport
$CHEMIN_RAPPORT = \&quot;C:\temp\&quot;
# Répertoire par défaut pour l'analyse
$DEFAULT_PATH = \&quot;C:\\&quot;

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

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

# Calcul du MD5
function Get-FileHash {
[CmdletBinding()]
Param(
[Parameter(Position=0,Mandatory=$true, ValueFromPipelineByPropertyName=$true,ValueFromPipeline=$True)]
[Alias(\&quot;PSPath\&quot;,\&quot;FullName\&quot;«»)]
[string[]]$Path,
[Parameter(Position=1)]
[string[]]$Algorithm = $ALGO
)

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 {\&quot;{0:«»X}\&quot; -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 {

$Oui = 0
$Non = 1

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

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

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

$datedebut = get-date

# Recherche des fichiers supérieur à la taille demandé
$files = Get-ChildItem $search * -recurse -force | where-object {$_.length -gt $taille}

$datefin = get-date
$dateresult = $datefin - $datedebut
$k = 0 + $files.count
write-host \&quot;`n$dateresult`n\&quot;
write-warning \&quot;$k fichiers trouvés au dessus de la taille minimum indiquée précédement\&quot;
if ($files.Count -gt 0)
{
# Suivant le choix de l'utilisateur exporte les informations dans un fichier rapport daté
$Choix = OuiNon -message \&quot;`nVoulez-vous calculer le MD5 et exporter les informations ?\&quot;
$d_debut = get-date
$isMD5=$True

if ($Choix -eq $Oui) {
#Contient les fichiers de même taille
$fichiers_suspects = $files |
Sort-Object length |
Foreach {
if ($isMD5)
{
try {
$Hash=(Get-FileHash $_.FullName).MD5
} catch {
Write-error $_
$Hash=$null
}
#Si demandé, ajoute la propriété MD5 à chaque objet fichier
Add-Member -InputObject $_ -MemberType NoteProperty -Name MD5 -Value $Hash
}
Write-Output $_
}|
Group-Object length |
Where-Object {$_.count -gt 1}

# Calcul le nombre de fichiers suspectés
#$i = $fichiers_suspects.Count

#echo $fichiers_suspects
#write-warning \&quot;$i groupes de fichiers suspectés\&quot;

if ($isMD5)
{
#Contient les fichiers de même taille ayant un MD5 identique
$identiques = $fichiers_suspects|
Where-Object {
#Fichiers de même taille
$Current=$_.Group
#Mémorise un MD5, le premier
$FileHash=$Current[0].MD5
#Construit un tableau contenant tous les MD5
$AllMD5=$Current|Foreach { $_.MD5}
#Tous les MD5 doivent être identique
$Current.Count -eq ($AllMD5 -eq $FileHash).Count
}
}
else
{$Identiques=@()}

$rapport = $identiques|
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 $_
}# new-rapport
} # group
$nomfichier = get-date -format dd.MM.yyyy-HH.mm
$rapport | export-csv \&quot;$CHEMIN_RAPPORT\rapport_$nomfichier.csv\&quot; -NoTypeInformation -Delimiter ';'
write-host \&quot;`nLes informations ont été enregistrées.`n\&quot;
write-warning \&quot;$CHEMIN_RAPPORT\rapport_$nomfichier.csv\&quot;
$j = $rapport.Count
$d_fin = get-date
$d_result = $d_fin - $d_debut
write-host \&quot;`n$d_result`n\&quot;
write-warning \&quot;$j fichiers retenus\&quot;
}
}
else
{Write-Warning \&quot;La recherche n'a pas trouvée de fichier\&quot;}
}
# Fonction principale du script
main
[/code:1]

malgré ça , tout baigne mis à part quelques erreurs parfois surcharge ambigu avec le computehash

et impossible de convertir la valeur en type systemIOstreamreader car il est en cours d'utilisation par un autre processus

Message édité par: Harcide, à: 23/06/15 10:43

Message édité par: Harcide, à: 23/06/15 12:06<br><br>Message édité par: Harcide, à: 25/06/15 15:34

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

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