Question [Résolu]unique et non unique

Plus d'informations
il y a 10 ans 11 mois #19979 par Axel
[Résolu]unique et non unique a été créé par Axel
bonjour, désolé si je poste beaucoup en ce moment :laugh: , j'avance assez difficilement seul mais je fais quelque truc assez facilement.

Mais ici j'ai un petit soucis et je n'y arrive pas pourtant je me creuse la tête, j'analyse les fichiers susceptibles d'être des doublons par la taille, je me fiche de toutes les autres tailles unique, ensuite j'analyse leur MD5 et donc parfois j'obtiens des fichiers qui ont la même taille mais qui n'ont pas le même md5 (c'est normal je sais pourquoi).

j'aimerais donc savoir comment faire en sorte de n'obtenir que les fichiers identiques avec leur md5 ?

je suis en V2

voici mon code :

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

#Déclaration de la Fonction : Select-Folder
function Select-Folder($message = 'Selectionner un répertoire à analyser', $path = 0)
{
$object = new-object -comObject Shell.Application
$folder = $object.BrowseForFolder(0, $message, 0, $path)
if ($folder -ne $null)
{
$folder.self.Path
}
}
#Fin de la déclaration

$folderpath = Select-Folder -path \"C:\\"

$datedebut = get-date

#recherche des fichiers par rapport à la taille
$files = gci $folderpath * -recurse -force |
where-object {$_.length -gt $taille}

$datefin = get-date
$dateresult = $datefin - $datedebut

#création
$doublons = $files |
sort-object length |
group-object length |
where-object {$_.count -gt 1}

function Clear-KeyboardBuffer {
while ($Host.UI.RawUI.KeyAvailable)
{$null = $Host.UI.RawUI.ReadKey(\"NoEcho,IncludeKeyDown,IncludeKeyUp\"«»)}
}

function YesNo {
param(
$Caption,
$Message,
[ValidateSet(\"Yes\",\"No\"«»)]
$DefaultChoice=\"No\"
)
Clear-KeyboardBuffer
$Yes = New-Object System.Management.Automation.Host.ChoiceDescription \"&Yes\"
$No = New-Object System.Management.Automation.Host.ChoiceDescription \"&No\"
$Choices = [System.Management.Automation.Host.ChoiceDescription[]]($Yes,$No)
$Host.UI.PromptForChoice($Caption,$Message,$Choices,([byte]($DefaultChoice -eq \"no\"«»)))
}

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:«»X0}\" -f $_ })
$null = $stream.Seek(0,0)
$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;
}#new-object
}#new-rapport

#affichage
#boucle sur la collection principale
$rapport = $doublons |
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

$i = 0
#calcul le nombre de fichiers suspectés
$rapport | foreach {
$i = $i + 1
}

$Yes = 0
$No = 1

if ($i -gt 1)
{
write-host \"$dateresult\"
$Choice = YesNo -message \"`n$i fichiers suspectés, voulez-vous les afficher ?\"
}
else
{
write-host \"`nIl n'y a pas de doublon`n\"
}

if ($Choice -eq $Yes)
{
$rapport | format-table
$Choice = YesNo -message \"`n$j fichiers retenus , voulez-vous calculer leur MD5 ?\"
if ($Choice -eq $Yes)
{
$d_debut = get-date
$rapport | Get-FileHash
$d_fin = get-date
$d_result = $d_fin - $d_debut
write-host \"$d_result\"
$Choice = YesNo -message \"`nVoulez-vous exporter les informations ?\"
if ($Choice -eq $Yes)
{
$rapport | export-csv \"C:\Temp\RapportFiles.csv\" -NoTypeInformation -Delimiter ';'
write-host \"Les informations ont été enregistrées dans C:\Temp\RapportFiles.csv\"
}
}
}
[/code:1]

PS : j'espère être compréhensible dans ma description<br><br>Message édité par: Harcide, à: 18/06/15 09:42

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

Plus d'informations
il y a 10 ans 11 mois #19990 par xyz
Réponse de xyz sur le sujet Re:unique et non unique
Harcide écrit:

PS : j'espère être compréhensible dans ma description

Spécifier correctement n'est pas donné à tout le monde, t'inquiète :)
Harcide écrit:

j'aimerais donc savoir comment faire en sorte de n'obtenir que les fichiers identiques avec leur md5 ?

Tu veux dire ceux dont la taille ET le md5 sont identique ?
Le soucis est que ton objet ne porte pas cette information...

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 11 mois #19992 par Axel
Réponse de Axel sur le sujet Re:unique et non unique

Tu veux dire ceux dont la taille ET le md5 sont identique ?


c'est exact, oui je sais que mon objet n'apporte pas cette information, je suis perdu et submergé par mon code en réalité :blush:

d'ailleurs je suis en train de lire votre tuto sur les objets<br><br>Message édité par: Harcide, à: 10/06/15 14:11

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

Plus d'informations
il y a 10 ans 11 mois #19995 par xyz
Réponse de xyz sur le sujet Re:unique et non unique
Harcide écrit:

c'est exact, oui je sais que mon objet n'apporte pas cette information

Alors ajoute la comme indiqué dans un de mes posts d'hier concernant la fonction new-rapport.
Vérifie le résultat pour qq fichiers.
Une fois ceci fait, tu repostes uniquement le code de la fonction modifiée.
Harcide écrit:

je suis perdu et submergé par mon code en réalité

'Perdu' je veux bien le croire pour un débutant, 'submergé' je te conseille l'achat d'une bouée, insubmersible tu seras.<br><br>Message édité par: Laurent Dardenne, à: 10/06/15 14:40

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 11 mois #19998 par Axel
Réponse de Axel sur le sujet Re:unique et non unique
je dois faire une nouvelle fonction ou modifié celle déjà créée ?<br><br>Message édité par: Harcide, à: 10/06/15 14:46

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

Plus d'informations
il y a 10 ans 11 mois #19999 par xyz
Réponse de xyz sur le sujet Re:unique et non unique
Harcide écrit:

je dois faire une nouvelle fonction ou modifié la même ?

Modifie celle existante.
Par principe on défini une fonction par objet à créer, d'où l'existence du cmdlet New-Object.

Tutoriels PowerShell

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

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