Comparer taille dun dossier à intervalle de temps Powershell
Fermé
Adlp
-
15 mars 2022 à 11:37
choubaka Messages postés 39399 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 3 août 2024 - 15 mars 2022 à 18:00
choubaka Messages postés 39399 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 3 août 2024 - 15 mars 2022 à 18:00
A voir également:
- Comparer taille deux personnes
- Comment réduire la taille d'un fichier - Guide
- Deux comptes whatsapp - Guide
- Supprimer une conversation messenger pour les deux personnes ✓ - Forum Facebook Messenger
- Jeux animation soirée groupe 30 personnes - Forum Loisirs / Divertissements
- J'ai deux compte facebook avec la meme adresse mail ✓ - Forum Facebook
8 réponses
choubaka
Messages postés
39399
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
3 août 2024
2 101
15 mars 2022 à 12:20
15 mars 2022 à 12:20
Bonjour
$Size et $Size1 correspondent à quoi ? Quel est le type des variables ? Des objets ? des integers ? des valeurs ?
$Size et $Size1 correspondent à quoi ? Quel est le type des variables ? Des objets ? des integers ? des valeurs ?
choubaka
Messages postés
39399
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
3 août 2024
2 101
Modifié le 15 mars 2022 à 13:03
Modifié le 15 mars 2022 à 13:03
non, utilise les comparaisons pour des valeurs numériques et caractères, chaînes de caratères
match et notmatch sont pour les strings ou caractères
exemple
match et notmatch sont pour les strings ou caractères
-eq equals -ne not equals -gt greater than -ge greater than or equal -lt less than -le less than or equal
exemple
2 -eq 2 # Output: True 2 -eq 3 # Output: False
choubaka
Messages postés
39399
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
3 août 2024
2 101
>
Adlp
15 mars 2022 à 13:10
15 mars 2022 à 13:10
pas de soucis, n'hésite pas à revenir...
Adlp
>
choubaka
Messages postés
39399
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
3 août 2024
Modifié le 15 mars 2022 à 14:12
Modifié le 15 mars 2022 à 14:12
Je reviens vers toi j'ai essayé
Cela donne une somme de la taille du dossier C:\TEMP\
moi j'ai besoin du détail de chaque taille des sous dossier du répertoire (1er niveau de sous dossier uniquement)
j'ai donc essayé ceci
Ceci me liste bien la taille de chaque sous dossier
Je fais donc ensuite la pause
calcul de nouveau la taille
J'ai ensuite essayé
Dans la console cela me donne :
6,4296875
6,4296875
7,783203125
fin de la pause
12,859375
6,4296875
7,783203125
True
J'aimerais qu'il y ai False pour le sous-dossier qui passe de "6,4296875" à "12,859375" et True pour les autres qui n'ont pas grossit
J'espère que mes explications sont assez claire..
(Get-ChildItem "C:\TEMP\" -Recurse | Measure-Object -Property Length -Sum).Sum / 1Mb
Cela donne une somme de la taille du dossier C:\TEMP\
moi j'ai besoin du détail de chaque taille des sous dossier du répertoire (1er niveau de sous dossier uniquement)
j'ai donc essayé ceci
Get-ChildItem -Force $path -ErrorAction SilentlyContinue -Directory | foreach{
$FolderSize = (Get-ChildItem $_.fullname -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum/ 1Kb
($FolderSize)
}
Ceci me liste bien la taille de chaque sous dossier
Je fais donc ensuite la pause
Start-Sleep -Seconds 30
write-host( "fin de la pause")
calcul de nouveau la taille
Get-ChildItem -Force $path -ErrorAction SilentlyContinue -Directory | foreach{
$FolderSize1 = (Get-ChildItem $_.fullname -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum/ 1Kb
($FolderSize1)
}
J'ai ensuite essayé
$FolderSize -eq $FolderSize1
Dans la console cela me donne :
6,4296875
6,4296875
7,783203125
fin de la pause
12,859375
6,4296875
7,783203125
True
J'aimerais qu'il y ai False pour le sous-dossier qui passe de "6,4296875" à "12,859375" et True pour les autres qui n'ont pas grossit
J'espère que mes explications sont assez claire..
Je me suis trompé de variable dans mon post pour le compare-object c'est plutôt
Compare-Object -ReferenceObject $FolderSize -DifferenceObject $FolderSize1
$FolderSize et $FolderSize1 donnent la taille du sous-dossier en Kb ce sont donc j'imagine des integers
Compare-Object -ReferenceObject $FolderSize -DifferenceObject $FolderSize1
$FolderSize et $FolderSize1 donnent la taille du sous-dossier en Kb ce sont donc j'imagine des integers
choubaka
Messages postés
39399
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
3 août 2024
2 101
Modifié le 15 mars 2022 à 12:32
Modifié le 15 mars 2022 à 12:32
Pour inclure les sous-dossiers ...
Tu obtiens une valeur à X décimales, dans cas ici en Mb.. mais, c'est idem en Kb saux qu'il n'y aura pas décimales...
tu peux également arrondir à trois décimales si tu le fais en Mb..
Il te suffit donc de créer une variable de début et une variable après 30 secondes.. de faire la différence entre les deux, donc une variable pour ça aussi.
Si tu effectues le calcul toutes les trentes secondes .. prévoir de réiniatiliser la variable de début ou de prévoir une variable intermédiaire.
(Get-ChildItem "C:\TEMP\" -Recurse | Measure-Object -Property Length -Sum).Sum / 1Mb
Tu obtiens une valeur à X décimales, dans cas ici en Mb.. mais, c'est idem en Kb saux qu'il n'y aura pas décimales...
tu peux également arrondir à trois décimales si tu le fais en Mb..
[math]::Round((Get-ChildItem "C:\TEMP\" -Recurse | Measure-Object -Property Length -Sum).Sum / 1Mb,3)
Il te suffit donc de créer une variable de début et une variable après 30 secondes.. de faire la différence entre les deux, donc une variable pour ça aussi.
Si tu effectues le calcul toutes les trentes secondes .. prévoir de réiniatiliser la variable de début ou de prévoir une variable intermédiaire.
choubaka
Messages postés
39399
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
3 août 2024
2 101
15 mars 2022 à 12:35
15 mars 2022 à 12:35
du coup, pas besoin du Compare-Object
Adlp
>
choubaka
Messages postés
39399
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
3 août 2024
15 mars 2022 à 12:56
15 mars 2022 à 12:56
D'accord merci,
utiliser -match -notmatch pour voir si les 2 tailles sont égales peut-être une bonne solution ?
utiliser -match -notmatch pour voir si les 2 tailles sont égales peut-être une bonne solution ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
choubaka
Messages postés
39399
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
3 août 2024
2 101
15 mars 2022 à 14:21
15 mars 2022 à 14:21
il te suffit d'utiliser la condition "if" avec la comparaison -eq et /ou -gt à la fin de chaque bloc de code ou d'écrire une fonction qui l'exécute que tu appelles au bon moment....
Si c'est égal, tu renvoie "true", sinon si c'est plus grand "false" .. il n'y a que deux conditions donc un simple "if" suffit...
exemple
Si c'est égal, tu renvoie "true", sinon si c'est plus grand "false" .. il n'y a que deux conditions donc un simple "if" suffit...
exemple
Function Test-FolderSize{ param ( $FolderSize $FolderSize1 if ( $FolderSize -eq $FolderSize1 ) { Write-Output $True } Else{ Write-Output $False} }
Merci, je sens que je touche au but mais les résultats de la condition if sont pas logique..
1er essai :
Ma console :
6,4296875
6,4296875
7,783203125
fin de la pause
6,4296875
False
6,4296875
False
7,783203125
True
La taille des dossiers de "6,4296875" ne bouge pas avant et après la pause, malgré cela j'ai "False" de retourné.
2ème essai :
Ma console :
6,4296875
6,4296875
7,783203125
fin de la pause
12,859375
True
6,4296875
True
7,783203125
True
La taille du 1er dossier change 6,4296875 => 12,859375 pourtant ça me renvoie True...
1er essai :
$path = "C:\TEMP"
Get-ChildItem -Force $path -ErrorAction SilentlyContinue -Directory | foreach{
$FolderSize = (Get-ChildItem $_.fullname -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum/ 1Kb
($FolderSize)
}
Start-Sleep -Seconds 30
write-host( "fin de la pause")
Get-ChildItem -Force $path -ErrorAction SilentlyContinue -Directory | foreach{
$FolderSize1 = (Get-ChildItem $_.fullname -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum/ 1Kb
($FolderSize1)
if ( $FolderSize -eq $FolderSize1 )
{
Write-Output $True
}
Else
{
Write-Output $False
}
}
Ma console :
6,4296875
6,4296875
7,783203125
fin de la pause
6,4296875
False
6,4296875
False
7,783203125
True
La taille des dossiers de "6,4296875" ne bouge pas avant et après la pause, malgré cela j'ai "False" de retourné.
2ème essai :
$path = "C:\TEMP"
Function Test-FolderSize{
param (
$FolderSize,
$FolderSize1)
if ( $FolderSize -eq $FolderSize1 )
{
Write-Output $True
}
Else{ Write-Output $False}
}
Get-ChildItem -Force $path -ErrorAction SilentlyContinue -Directory | foreach{
$FolderSize = (Get-ChildItem $_.fullname -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum/ 1Kb
($FolderSize)
}
Start-Sleep -Seconds 20
write-host( "fin de la pause")
Get-ChildItem -Force $path -ErrorAction SilentlyContinue -Directory | foreach{
$FolderSize1 = (Get-ChildItem $_.fullname -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum/ 1Kb
($FolderSize1)
(Test-FolderSize)
}
Ma console :
6,4296875
6,4296875
7,783203125
fin de la pause
12,859375
True
6,4296875
True
7,783203125
True
La taille du 1er dossier change 6,4296875 => 12,859375 pourtant ça me renvoie True...
choubaka
Messages postés
39399
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
3 août 2024
2 101
Modifié le 15 mars 2022 à 16:00
Modifié le 15 mars 2022 à 16:00
essaye en foçant le type de variables ...
[decimal] ou [long]
petit truc en powershell, lorsque tu fais appel à un "Get" .. prends l'habitude de l'associer à une variable.
ex:
Ce qui économise pas mal de lignes de codes et rend ton script plus lisible .. n'hésite pas à mettre des commentaires pour expliquer ce que tu fais.
[decimal] ou [long]
param ( [long] $FolderSize, [long] $FolderSize1)
petit truc en powershell, lorsque tu fais appel à un "Get" .. prends l'habitude de l'associer à une variable.
ex:
$FolderToTest = Get-ChildItem -Force $path -ErrorAction SilentlyContinue -Directory | foreach{ $FolderSize = (Get-ChildItem $_.fullname -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum/ 1Kb ($FolderSize) }
Ce qui économise pas mal de lignes de codes et rend ton script plus lisible .. n'hésite pas à mettre des commentaires pour expliquer ce que tu fais.
# Ici je mets mon commentaire, ce ne sera pas exécuté
choubaka
Messages postés
39399
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
3 août 2024
2 101
15 mars 2022 à 16:17
15 mars 2022 à 16:17
sinon, tester la condition avec d'autres possibilités...
choubaka
Messages postés
39399
Date d'inscription
jeudi 4 avril 2002
Statut
Modérateur
Dernière intervention
3 août 2024
2 101
15 mars 2022 à 18:00
15 mars 2022 à 18:00
pas de soucis