Question
[Résolu]pour connaître une durée
- Axel
- Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 176
- Remerciements reçus 0
il y a 10 ans 9 mois #19972
par Axel
[Résolu]pour connaître une durée a été créé 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
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.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 10 ans 9 mois #19974
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Réponse de Richard Lazaro sur le sujet Re:pour connaître une durée
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
Cela me semble logique pour calculer une durée
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
- Axel
- Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 176
- Remerciements reçus 0
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.
- Delestre
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 17
- Remerciements reçus 0
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
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.
- Axel
- Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 176
- Remerciements reçus 0
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.
- Axel
- Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 176
- Remerciements reçus 0
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é
comme d'hab
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.050 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu]pour connaître une durée