Question
Exclure des dossiers
- Leharivel
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 17
- Remerciements reçus 0
il y a 14 ans 10 mois #9845
par Leharivel
Exclure des dossiers a été créé par Leharivel
Bonjour,
Mon script me permet de supprimer des fichiers dans une arborescence avec des dossiers et sous-dossiers en fonction du nombre de jours inscrit
Le problème que je rencontre c'est que je dois supprimer des fichiers de plus de 365 jours et d'autres de 180 jours.
Comment je pourrais exclure des répertoires dans mon script
En langage français :
je veux supprimer tout les fichiers des dossiers qui sont inférieur à 180 jours sauf pour les dossiers et sous-dossier c:\\test\\toto et c:\\test\\tata
Mon script :
$jour = Get-Date
$lastmod = $jour.AddDays(-180)
$mydata = c:\test
Get-Childitem $mydata -recurse -force | Where {$_.LastWriteTime -le \"$lastmod\"} | Foreach {
If (($_.extension -eq \".txt\") -or ($_.extension -eq \".log\"))
}
Avez vous une idée ?<br><br>Message édité par: anth14, à: 29/06/11 22:02
Mon script me permet de supprimer des fichiers dans une arborescence avec des dossiers et sous-dossiers en fonction du nombre de jours inscrit
Le problème que je rencontre c'est que je dois supprimer des fichiers de plus de 365 jours et d'autres de 180 jours.
Comment je pourrais exclure des répertoires dans mon script
En langage français :
je veux supprimer tout les fichiers des dossiers qui sont inférieur à 180 jours sauf pour les dossiers et sous-dossier c:\\test\\toto et c:\\test\\tata
Mon script :
$jour = Get-Date
$lastmod = $jour.AddDays(-180)
$mydata = c:\test
Get-Childitem $mydata -recurse -force | Where {$_.LastWriteTime -le \"$lastmod\"} | Foreach {
If (($_.extension -eq \".txt\") -or ($_.extension -eq \".log\"))
}
Avez vous une idée ?<br><br>Message édité par: anth14, à: 29/06/11 22:02
Connexion ou Créer un compte pour participer à la conversation.
- Leharivel
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 17
- Remerciements reçus 0
il y a 14 ans 10 mois #9849
par Leharivel
Réponse de Leharivel sur le sujet Re:Exclure des dossiers
Bonjour,
J'ai trouvé la fonction exclude à la commande Get-chilitem mais cela concerne seulement les fichiers
mais pas les dossiers quelqu'un a une idée ?
J'ai trouvé la fonction exclude à la commande Get-chilitem mais cela concerne seulement les fichiers
mais pas les dossiers quelqu'un a une idée ?
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 14 ans 10 mois #9853
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Exclure des dossiers
anth14 écrit:
Sinon tu peux coder un filtre (Filter) ayant comme paramètre un tableau de nom de répertoire :
[code:1]Get-Childitem $mydata -recurse -force |
Skip-Container @(\"C:\X\Y\Z\",\"D:\zz\aa\"«»)|
etc[/code:1]
Un lien déjà .quelqu'un a une idée ?
Sinon tu peux coder un filtre (Filter) ayant comme paramètre un tableau de nom de répertoire :
[code:1]Get-Childitem $mydata -recurse -force |
Skip-Container @(\"C:\X\Y\Z\",\"D:\zz\aa\"«»)|
etc[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Leharivel
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 17
- Remerciements reçus 0
il y a 14 ans 10 mois #9856
par Leharivel
Réponse de Leharivel sur le sujet Re:Exclure des dossiers
Bonjour,
Cela fonctionne avec :
Get-Childitem $mydata -recurse -force |where {$_.fullname -notmatch 'c:\\test\\1234'}
Le problème j'ai plusieurs dosssier à exclure, comment je peux faire avec la commande ci-dessus ou comment faire un filtre avec votre ligne de commande
Get-Childitem $mydata -recurse -force |
Skip-Container @(\"C:\X\Y\Z\",\"D:\zz\aa\")|
Merci de ta réponse
Cela fonctionne avec :
Get-Childitem $mydata -recurse -force |where {$_.fullname -notmatch 'c:\\test\\1234'}
Le problème j'ai plusieurs dosssier à exclure, comment je peux faire avec la commande ci-dessus ou comment faire un filtre avec votre ligne de commande
Get-Childitem $mydata -recurse -force |
Skip-Container @(\"C:\X\Y\Z\",\"D:\zz\aa\")|
Merci de ta réponse
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 14 ans 10 mois #9860
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Exclure des dossiers
anth14 écrit:
Une solution :
[code:1]
Filter Skip-Container{
Param ($Containers)
begin {
#Construit, avec le tableau de nom de chemin, une regex.
#Celle-ci est basée sur une alternative
$OFS='|'
#où on recherchera le nom de chemin débutant par C:\temp (^c:\temp)
$RegEx=\"($($Containers|% {\"^$([regex]::Escape($_))\"}))\"
#Pour @(\"C:\Temp\",\"C:\Windows\"«») on aura la regex : (^C:\\Temp|^C:\\Windows)
#On pointe directement sur l'objet,
#au lieu de le faire à chaque itération
$SSP=$ExecutionContext.SessionState.Path
Write-Debug $RegEx
}
Process {
#Tous les objets issu d'un provider PowerShell dispose de la propriété PSPath
#Celle-ci contenant le nom du provider, on doit tansformer le chemin PowerShell
#en un chemin normé.
If (-not ($SSP.GetUnresolvedProviderPathFromPSPath($_.PSPath) -Match $RegEx))
{ $_ }
}
}
[/code:1]
Quelques tests :
[code:1]
cd C:
Get-Childitem c:\temp\test -recurse -force |
#Provider FileSystem, on précise le nom du drive
Skip-Container @(\"C:\Temp\Test\Word8\",\"C:\temp\Test\VWDWebCache\"«»)
cd Wsman:
Get-Childitem WSMan:\localhost -recurse -force |
#Autre provider, on ne précise pas le nom du drive
Skip-Container @(\"localhost\Client\",\"localhost\Service\"«»)
cd Feed:
Get-Childitem Feed:\ -recurse -force |
#Autre provider, on ne précise pas le nom du drive
Skip-Container @(\"Dev\"«»)
cd hklm:
Get-Childitem Hklm:\ -force |
#Autre provider, on ne précise pas le nom du drive
#Ici on précise le nom de la ruche portée par le drive,
#car il constitue une partie du path
Skip-Container @(\"HKEY_LOCAL_MACHINE\SOFTWARE\"«»)
[/code:1]
Ce n'est pas très performant, attention donc aux arborescences conséquentes.
L'idée de départ était d'exclure des noms de chemin de tout provider PowerShell.comment je peux faire avec la commande ci-dessus ou comment faire un filtre avec votre ligne de commande
Une solution :
[code:1]
Filter Skip-Container{
Param ($Containers)
begin {
#Construit, avec le tableau de nom de chemin, une regex.
#Celle-ci est basée sur une alternative
$OFS='|'
#où on recherchera le nom de chemin débutant par C:\temp (^c:\temp)
$RegEx=\"($($Containers|% {\"^$([regex]::Escape($_))\"}))\"
#Pour @(\"C:\Temp\",\"C:\Windows\"«») on aura la regex : (^C:\\Temp|^C:\\Windows)
#On pointe directement sur l'objet,
#au lieu de le faire à chaque itération
$SSP=$ExecutionContext.SessionState.Path
Write-Debug $RegEx
}
Process {
#Tous les objets issu d'un provider PowerShell dispose de la propriété PSPath
#Celle-ci contenant le nom du provider, on doit tansformer le chemin PowerShell
#en un chemin normé.
If (-not ($SSP.GetUnresolvedProviderPathFromPSPath($_.PSPath) -Match $RegEx))
{ $_ }
}
}
[/code:1]
Quelques tests :
[code:1]
cd C:
Get-Childitem c:\temp\test -recurse -force |
#Provider FileSystem, on précise le nom du drive
Skip-Container @(\"C:\Temp\Test\Word8\",\"C:\temp\Test\VWDWebCache\"«»)
cd Wsman:
Get-Childitem WSMan:\localhost -recurse -force |
#Autre provider, on ne précise pas le nom du drive
Skip-Container @(\"localhost\Client\",\"localhost\Service\"«»)
cd Feed:
Get-Childitem Feed:\ -recurse -force |
#Autre provider, on ne précise pas le nom du drive
Skip-Container @(\"Dev\"«»)
cd hklm:
Get-Childitem Hklm:\ -force |
#Autre provider, on ne précise pas le nom du drive
#Ici on précise le nom de la ruche portée par le drive,
#car il constitue une partie du path
Skip-Container @(\"HKEY_LOCAL_MACHINE\SOFTWARE\"«»)
[/code:1]
Ce n'est pas très performant, attention donc aux arborescences conséquentes.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Leharivel
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 17
- Remerciements reçus 0
il y a 14 ans 10 mois #9873
par Leharivel
Réponse de Leharivel sur le sujet Re:Exclure des dossiers
Merci de ton aide
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.043 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Exclure des dossiers