Question [Résolu]pour connaître une durée

Plus d'informations
il y a 10 ans 9 mois #19972 par Axel
bonjour,

j'ai un bout de code qui permet d'identifier des doublons, je voudrais avoir le temps de l'analyse de mes doublons à la fin.

est-ce que new-timespan peut être utile ?

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

$chemin = read-host \"`nIndiquer la localisation du répertoire pour lancer l'analyse: \"
#recherche des fichiers par rapport à la taille
$files = gci $chemin * -recurse -force |
where-object {$_.length -gt $taille}

#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 trouvé
$rapport | foreach {
$i = $i + 1
}

$Yes = 0
$No = 1

if ($i -gt 1)
{
$Choice = YesNo -message \"`n$i fichiers trouvé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 \"`nVoulez-vous calculer leur MD5 ?\"
if ($Choice -eq $Yes)
{
$rapport | Get-FileHash
$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]

Message édité par: Harcide, à: 9/06/15 14:56

Message édité par: Harcide, à: 9/06/15 14:59

Message édité par: Harcide, à: 9/06/15 15:10<br><br>Message édité par: Harcide, à: 10/06/15 10:05

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

Plus d'informations
il y a 10 ans 9 mois #19974 par Richard Lazaro
Dans le script en lui même, tu as simplement a mettre en mémoire la date de début du script et faire une différence avec la date de fin du script.

Cela me semble logique pour calculer une durée :whistle:

Think-MS : (Get-Life).Days | %{ Learn-More }

\\&quot;Problems cannot be solved by the same level of thinking that created them.\\&quot; - Albert Einstein

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

Plus d'informations
il y a 10 ans 9 mois #19975 par Axel
Réponse de Axel sur le sujet Re:pour connaître une durée
bonjour, je ne peux pas faire ça car mon script marche en 2 temps, ils trouvent les doublons en fonction de la taille, ( la j'aimerais connaitre le temps ) et puis seulement aprés il demande si je veux calculer le md5 et si je dis oui lorsqu'il aura terminé les calculs j'aimerais avoir le temps aussi des calculs

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

Plus d'informations
il y a 10 ans 9 mois #19976 par Delestre
Réponse de Delestre sur le sujet Re:pour connaître une durée
Et si tu fais un Get-date enregistré dans une variable au début du script et a la fin de la recherche de doublon tu en fais un deuxième, toujours dans une variable et tu fait la différence des deux.

Et tu fais la même manœuvre pour ta deuxième partie de calculs.<br><br>Message édité par: Saniboulak, à: 10/06/15 08:36

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

Plus d'informations
il y a 10 ans 9 mois #19977 par Axel
Réponse de Axel sur le sujet Re:pour connaître une durée
merci, je vais voir ce que ça donne

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

Plus d'informations
il y a 10 ans 9 mois #19978 par Axel
Réponse de Axel sur le sujet Re:pour connaître une durée
merci, ça marche super bien, je ne pensais pas du tout à ça, je pensais plus compliqué :D comme d'hab :blush:

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

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