Question [Résolu]unique et non unique

Plus d'informations
il y a 10 ans 11 mois #20018 par Axel
Réponse de Axel sur le sujet Re:unique et non unique
j'ai pas compris la question :blush:

je ferais une proposition de mon nouveau programme demain ça marche ?

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

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

j'ai pas compris la question :blush:

Ton pb actuel est-il le dernier ou tu dois ajouter d'autres traitement ?

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 11 mois #20020 par Axel
Réponse de Axel sur le sujet Re:unique et non unique
oui je pense que c'est le dernier traitement, j'aurais fait le plus gros ensuite j'aurai surement des réglages à faire, des améliorations, des ptits truc.

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

Plus d'informations
il y a 10 ans 11 mois #20021 par Axel
Réponse de Axel sur le sujet Re:unique et non unique
mais même si je modifie la fonction, j'obtiendrai toujours les 3 différents non ?

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

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

mais même si je modifie la fonction, j'obtiendrai toujours les 3 différents non ?

Les trois quoi ??

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 11 mois #20023 par xyz
Réponse de xyz sur le sujet Re:unique et non unique
Une solution, je n'ai laissé que le minimum pour le traitement :
[code:1]
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

$length = read-host \"`nIndiquez la taille minimum en octet utilisé lors de l'analyse des fichiers \"
$taille = $length

$folderpath = 'C:\temp'

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

#$Choice = YesNo -message \"Voulez-vous calculer le MD5 des fichiers retenus ?\"
#$isMD5=$Choice -eq $Yes
$isMD5=$true

#Contient les fichiers de même taille
$doublons = $files |
Sort-Object length |
Foreach {
Write-Warning \"file : $($_.fullname)\"
if ($isMD5)
{
try {
$Hash=(Get-FileHash $_.FullName).MD5
Write-Warning \"file : $($_.fullname) $hash\"
} 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}

#En deux passes, car le MD5 est nécessaire pour ce traitement
if ($isMD5)
{
#Contient les fichiers de même taille ayant un MD5 identique
$Identiques= $doublons|
Where-Object {
#Fichiers de même taille
$Current=$_.Group
#Mémorise un MD5, le premier
$FileHash=$Current[0].MD5
#Tous les MD5 doivent être identique
$Current.Count -eq ($Current.MD5 -eq $FileHash).Count
}
}
else
{
#Contient les fichiers de même taille
#peut importe leur MD5
#La propriété MD5 n'est donc pas créée
$Identiques=$Doublons
}

$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 $_
}#file
}#group
[/code:1]
Pour info, la fonction Get-FileHash ne gère pas les fichiers comportant les caractères '' ( jokers spécifiques à Powershell).

Dans ce cas le MD5, s'il est demandé vaut $null, donc tous les fichiers de même taille dont le MD5 est $null seront sélectionnés dans le rapport final.

Je n'ai pas le temps d'adapter le code de la fonction Get-FileHash.
Enfin je te laisse tester, je te dirais bien d'automatiser ces tests, mais je vais m'arrêter là :whistle:

Tutoriels PowerShell

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

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