Question
[Résolu]analyse des fichiers par taille
- Axel
- Auteur du sujet
- Hors Ligne
- Membre elite
-
- Messages : 176
- Remerciements reçus 0
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.
- xyz
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 69
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 ...Cette histoire de conversion me \"gave\"
.
Harcide écrit:
Si tu parles de ton niveau de compétences sur Powershell, tu dois le rappeler à tes commanditaires.je suis limité tout de même à un niveau.
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:
Bonne chance !ils .. conclut ..je ..5jours
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:
Pourquoi pas. Une convention de nommage en vaut une autre, mais ici cela n'apporte rien à part te contraindre à un style.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)
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:
Tiens, cela me dit qq choses...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
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:
Bonjour la galère ! Je te rassure on peut faire plus simple, mais une gestion d'erreur s'impose.Le chemin par défaut de la recherche doit être affiché et proposé à la modification
Combien de jours au faite ?
Harcide écrit:
Facile ! yaPlusKaLes réponses aux questions sont faites en français : Oui/Non à la place de Yes/No
Harcide écrit:
Parfois, la vie c'est pas facileL’outil ne doit pas mélanger interface graphique et mode texte
C'est déjà le cas, qu'est-ce que tu fais ? Tu veux apprendre le WPF en 5 jours ?
Harcide écrit:
Recherche dans le forum contribution.Le fichier de sortie des résultats doit être nommé avec la date et l’heure, exemple : rapport_12062015-1345.csv
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.
- Axel
- Auteur du sujet
- Hors Ligne
- Membre elite
-
- Messages : 176
- Remerciements reçus 0
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.
- xyz
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 69
Allez une dernière pour la route. Le 1 juin tu indiquais ceci ;j'ai peur d'être mal vue si je n'ai pas terminé le boulot demandé...
Harcide écrit:
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.Bonjour, ça ne fait que 4 jours que je travail sur powershell
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:
C'est que tu apprends qui importe. C'est sûr que dans ton cas ce n'est pas facile à vivre au quotidien.Même si je sais que mes profs m'ont dit que ce n'était pas grave si le travail n'était pas fini...
Personne n'aime les échecs, sauf Kasparov
Harcide écrit:
Si tu le dis.De plus, ce que je suis en train de mettre en oeuvre ne sera pas pour des fins mercantile
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.
- Axel
- Auteur du sujet
- Hors Ligne
- Membre elite
-
- Messages : 176
- Remerciements reçus 0
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 69
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.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu]analyse des fichiers par taille