Question [Résolu]analyse des fichiers par taille

Plus d'informations
il y a 10 ans 11 mois #20139 par Axel
Réponse de Axel sur le sujet Re:analyse des fichiers par taille
je fais pleins de test, je cherche et je suis toujours bloqué sur le même truc. Cette histoire de conversion me \"gave\" :blush: .De plus au début du stage j'avais juste une mission et pas vraiment d'indication, je ne savais pas où j'allai, j'ai pu avancer grâce à vous et comprendre des choses mais je suis limité tout de même à un niveau.

De plus j'ai fait un bilan et j'ai expliqué ce code pour connaitre l'avis des futurs utilisateurs :

[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 OuiNon{
param(
$Caption,
$Message,
[ValidateSet(\"Oui\",\"Non\"«»)]
$DefaultChoice=\"Non\"
)
Clear-KeyboardBuffer
$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\"«»)))
}

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;
#MD5 = (Get-FileHash $fichier.FullName).MD5
}#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
}

$Oui = 0
$Non = 1

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

if ($Choice -eq $Oui)
{
$rapport | format-table
$Choice = OuiNon -message \"`n$j fichiers retenus , voulez-vous calculer leur MD5 ?\"
if ($Choice -eq $Oui)
{
$d_debut = get-date
$rapport | Get-FileHash
$d_fin = get-date
$d_result = $d_fin - $d_debut
write-host \"$d_result\"
$Choice = OuiNon -message \"`nVoulez-vous exporter les informations ?\"
if ($Choice -eq $Oui)
{
$rapport | export-csv \"C:\Temp\RapportFiles.csv\" -NoTypeInformation -Delimiter ';'
write-host \"Les informations ont été enregistrées dans C:\Temp\RapportFiles.csv\"
}
}
}
[/code:1]
ils ont donc conclut des nouvelles demandes que je dois faire en 5jours:

• Toutes les variables configurables (taille de recherche, chemin de recherche, chemin d’enregistrement du fichier résultat, algorithme, …) doivent être rassemblées au début du fichier et commentées (EN MAJUSCULE)
• La taille des fichiers recherchés doit pouvoir être exprimée en Kb ou Mb…. La valeur par défaut doit être affichée et proposée à la modification
•Le chemin par défaut de la recherche doit être affiché et proposé à la modification
• Afin de garantir un temps d’exécution optimisé, seules les informations nécessaires doivent être extraites sur les fichiers
• L’affichage des fichiers dont la taille est identique est inutile, on souhaite juste savoir (et le voir clairement) combien de fichiers identiques au niveau de la taille ont été trouvés
• Les réponses aux questions sont faites en français : Oui/Non à la place de Yes/No
• L’outil ne doit pas mélanger interface graphique et mode texte
• Le fichier de sortie des résultats doit être nommé avec la date et l’heure, exemple : rapport_12062015-1345.csv
• N’exporter dans le fichier de résultat uniquement les informations utiles (les doublons) et pas les fichiers suspectés d’être des doublons

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

Plus d'informations
il y a 10 ans 11 mois #20140 par xyz
Réponse de xyz sur le sujet Re:analyse des fichiers par taille
Harcide écrit:

Cette histoire de conversion me \"gave\" :blush: .

C'est un passage obligé, comme tout le reste : La fabrication du pain( pourquoi est-il friable ?), le tricot( ne rigolez pas c'est pas si facile), la mécanique( Ha! j'ai une vis en trop, c'est bizarre.), la physique nucléaire et les scoubidous ...
Harcide écrit:

je suis limité tout de même à un niveau.

Si tu parles de ton niveau de compétences sur Powershell, tu dois le rappeler à tes commanditaires.
Tu n'es pas limité, tu débutes. On confie donc à des débutants des tâches de débutant ! Les autres tâches demande plus de temps.
C'est comme dans les jeux de rôles, tu ne combats pas un monstre level 50 avec un bâton...
Harcide écrit:

ils .. conclut ..je ..5jours

Bonne chance !
C'est ce que je te disais, 'je' n'est pas le forum. Là tu détournes un système d'entraide gratuit à des fins mercantile.
La majorité des utilisateurs le font, mais sur un point particulier, cela ne pose pas de problème.
Le plus important pour toi est que tu n'apprends pas, tu progresses dans la tâche que l'on t'as confié, mais ce n'est pas toi qui la réalise.

Avec mon expérience dans le développement, j'ai débuté par la réalisation d'un script Powershell d'une dizaine de lignes, cela m'a pris 5 jours.
Certes, je cherchais à comprendre avant de faire et j'avais le temps, mais toi ?
Harcide écrit:

Toutes les variables configurables (taille de recherche, chemin de recherche, chemin d’enregistrement du fichier résultat, algorithme, …) doivent être rassemblées au début du fichier et commentées (EN MAJUSCULE)

Pourquoi pas. Une convention de nommage en vaut une autre, mais ici cela n'apporte rien à part te contraindre à un style.
Surtout que sous Powershell on utilise des paramètres pas 'des variables configurables', sinon cela sous entend que l'utilisateur modifie le code selon ces besoins ou un fichier de config.
Allo le support ?
De plus il y a une confusion entre le code et sa documentation. La bonne nouvelle est que tu as un livrable en moins, réjouis-toi Jésus t'aime.
Harcide écrit:

La taille des fichiers recherchés doit pouvoir être exprimée en Kb ou Mb…. La valeur par défaut doit être affichée et proposée à la modification

Tiens, cela me dit qq choses...
Rappelle que tu utilises un shell en mode texte, pas un GUI ;-)
La réponse à ce besoin se trouve dans le code la fonction YesNo, pardon OuiNon.
Comme tu ne disposes pas de librairies (modules/fonctions/scripts) tu te retrouves à devoir tout créer, à mon avis le délai que l'on t'a donné n'en tient pas compte.
Harcide écrit:

Le chemin par défaut de la recherche doit être affiché et proposé à la modification

Bonjour la galère ! Je te rassure on peut faire plus simple, mais une gestion d'erreur s'impose.
Combien de jours au faite ?
Harcide écrit:

Les réponses aux questions sont faites en français : Oui/Non à la place de Yes/No

Facile ! yaPlusKa
Harcide écrit:

L’outil ne doit pas mélanger interface graphique et mode texte

Parfois, la vie c'est pas facile :-)
C'est déjà le cas, qu'est-ce que tu fais ? Tu veux apprendre le WPF en 5 jours ?
Harcide écrit:

Le fichier de sortie des résultats doit être nommé avec la date et l’heure, exemple : rapport_12062015-1345.csv

Recherche dans le forum contribution.

Enfin tu as le droit de dire à ton responsable 'je ne sais pas faire, mais je peux apprendre'.

Je comprends mieux ton stress, mais si tu n'as pas le temps d'apprendre tires-en les conclusions qui s'imposent.<br><br>Message édité par: Laurent Dardenne, à: 15/06/15 19:12

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 11 mois #20143 par Axel
Réponse de Axel sur le sujet Re:analyse des fichiers par taille
bonjour Laurent merci de votre aide encore une fois, il me reste 9 jours en tout c'est juste que j'ai peur d'être mal vue si je n'ai pas terminé le boulot demandé... Même si je sais que mes profs m'ont dit que ce n'était pas grave si le travail n'était pas fini...

De plus, ce que je suis en train de mettre en oeuvre ne sera pas pour des fins mercantile<br><br>Message édité par: Harcide, à: 16/06/15 09:05

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

Plus d'informations
il y a 10 ans 11 mois #20145 par xyz
Réponse de xyz sur le sujet Re:analyse des fichiers par taille
Harcide écrit:

j'ai peur d'être mal vue si je n'ai pas terminé le boulot demandé...

Allez une dernière pour la route. Le 1 juin tu indiquais ceci ;
Harcide écrit:

Bonjour, ça ne fait que 4 jours que je travail sur powershell

Aujourd'hui cela fait 16 jours, une formation de base c'est 5 jours, un livre PS pour débutant c'est 30-50 euros et avec un travail assidu en une semaine tu peux déjà aborder les bases correctement.

Tu ne penses pas que celui/celle qui t'a proposé ce stage a peut être mal jugé le risque pour ce projet ?
Est-ce que tu as un référent technique Powershell auquel soumettre tes problèmes ? Non ?

A 10 jours de la livraison, si j'ai bien compris, on te précises des points qui t'obligent à revoir ton code alors que tu en as déjà réalisé un bonne partie.
Et c'est toi qui serait mal vue ? Tu as peut être une tête de lampiste ;-)
Harcide écrit:

Même si je sais que mes profs m'ont dit que ce n'était pas grave si le travail n'était pas fini...

C'est que tu apprends qui importe. C'est sûr que dans ton cas ce n'est pas facile à vivre au quotidien.
Personne n'aime les échecs, sauf Kasparov :silly:
Harcide écrit:

De plus, ce que je suis en train de mettre en oeuvre ne sera pas pour des fins mercantile

Si tu le dis.
Donc dans l'entreprise où tu effectues ton stage personne n'utilisera ce que tu fais, c'est bien ça ?<br><br>Message édité par: Laurent Dardenne, à: 16/06/15 10:47

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 11 mois #20147 par Axel
Réponse de Axel sur le sujet Re:analyse des fichiers par taille
il sera utilisé par 2 dév de l'organisme juste sur les serveurs internes pour faire un nettoyage

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

Plus d'informations
il y a 10 ans 11 mois #20148 par xyz
Réponse de xyz sur le sujet Re:analyse des fichiers par taille
Harcide écrit:

il sera utilisé par 2 dév de l'organisme juste sur les serveurs internes pour faire un nettoyage

:)
Donc le forum t'aide à réaliser gratuitement un outil utilisé par une entreprise. A qui envoie-t-on la facture ?

Pour en revenir à ton pb, qu'est-ce que tu ne comprends pas dans cette ligne :
[code:1]
$Size=$length_definition -as [int]
[/code:1]
Selon toi où placer, dans le code cité, ce traitement de conversion ?

Tutoriels PowerShell

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

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