Question Pb sur utilisation Fonction pour suppimer fichiers

Plus d'informations
il y a 15 ans 9 mois #2565 par Gabriel
:blush:
Bon moi petit scarabé demande humblement l'aide d'un grand scarabé...

J'ai recuperer une fonction que j'ai adapté pour l'utiliser dans mes scripts. Mais il me sort un mechant message d'erreur.

[code:1]
## Author = Tonic8
## Version = 0.4

## on set les variables nécessaires à l'execution du script
$cheminLogs = 'c:\Program Filesdev\LicSrv\logs'

##################################################
## Liste des fonctions utilisées dans le script

function DeleteOldFiles($dayNumber, $targetFolder, $fileToDelete)
{
$now = Get-Date
$lastWrite = $now.AddDays(-$dayNumber)

# /!\ commande recursive
$Files = get-childitem $targetFolder -include $fileToDelete -recurse |where {$_.LastWriteTime -le \"$lastWrite\"}
# /!\ commande non-recursive
# $Files = get-childitem $targetFolder -include $fileToDelete |Where {$_.LastWriteTime -le \"$lastWrite\"}

foreach ($File in $Files)
# Si Whatif il affiche ce qui pourrai se passer...
# {Remove-Item $File -force -Whatif | out-null}
{Remove-Item $File -force | out-null}
}

## Fin de la liste des fonction
##################################################

## on nettoie les logs pour ne conserver que les N derniers jours...
DeleteOldFiles 5 $cheminLogs *.log
[/code:1]

Bon il me sort alors le message suivant
Remove-Item : Cannot bind argument to parameter 'Path' because it is null.
At C:\Program Files\LicSrv\test_del.ps1:29 char:14
+ {Remove-Item <<<< $File -force | out-null}


Dans le style malpoli si je comprend bien il veut pas de ma variable $File qui contient le chemin et le nom du fichier a supprimer...

ma question :blink: : \"mais pourquoi? nondedju de Rogntudju!!!\"

Question subsidiaire, j'arrive pas a retrouvé le post ou il est question d'appeler un fichier PS1 contenant des fonctions pour les inclure et appeler les fonctions dans le fichier script (genre \"using System;\" en csharp...)

Merci d'avance...:lol:

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

Plus d'informations
il y a 15 ans 9 mois #2566 par Patrick Berthon
Salut,

pour appeler le fichier qui contient les autres fonctions powershell, il faut utiliser :

. ./MonFichier.ps1

bien sûr, tu remplaces ./MonFichier.ps1 par le chemin d'accès et le nom de ton fichier à toi.

fais gaffe, y'a 2 '.' : . ./

Pour le reste, je vais réfléchir :)

++, Zylwee

Message édité par: Zylwee, à: 9/07/08 21:49<br><br>Message édité par: Zylwee, à: 9/07/08 21:50

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

Plus d'informations
il y a 15 ans 9 mois #2567 par Patrick Berthon

$cheminLogs = 'c:\Program Filesdev\LicSrv\logs'



C'est normal qu'il manque un 'antislash' entre Files et dev ?

pasque si le rep n'existe pas, il trouve pas de fichier, et PowerShell a peut-être un comportement bizarre avec un foreach($null).

Message édité par: Zylwee, à: 9/07/08 21:55

Message édité par: Zylwee, à: 9/07/08 21:56<br><br>Message édité par: Zylwee, à: 9/07/08 21:56

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

Plus d'informations
il y a 15 ans 9 mois #2568 par Robin Lemesle
Salut tonic,

Bon il me sort alors le message suivant
Remove-Item : Cannot bind argument to parameter 'Path' because it is null.
At C:Program FilesLicSrvtest_del.ps1:29 char:14
+ {Remove-Item &lt;&lt;&lt;&lt; $File -force | out-null}


Je vois que tu fais un Get-ChildItem recursif, comment se présente ton arborescence ? Car il se peut que lorsque tu supprimes un répertoire qui contient des fichiers, ton foreach veuille supprimer d'autres fichiers qui le sont déjà via la première suppression récursive.

Sinon, essaies d'ajouter une condition -ne \&quot;\&quot;

Robin

Robin MVP PowerShell

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

Plus d'informations
il y a 15 ans 9 mois #2571 par Gabriel
Salut
Zylwee

. ./MonFichier.ps1
bien sûr, tu remplaces ./MonFichier.ps1 par le chemin d'accès et le nom de ton fichier à toi.

fais gaffe, y'a 2 '.' : . ./


Merci :-) la je vois que tu as mis 2 points separé par un espace, j'imagine que ca a son importance (sinon ca lui fait remonter l'arborescence dans le repertoire au dessus...

C'est normal qu'il manque un 'antislash' entre Files et dev ?


:blush: Ben faute de typo pendant la saisie dans le forum (le chemin est legerement different, je l'ai donc modifier apres le copier/coller dans la page web j'ai oublié un antislash, mais dans le fichier code qui renvoie le message d'erreur, il y a le antislash qui va bien.

Robin

Je vois que tu fais un Get-ChildItem recursif, comment se présente ton arborescence ? Car il se peut que lorsque tu supprimes un répertoire qui contient des fichiers, ton foreach veuille supprimer d'autres fichiers qui le sont déjà via la première suppression récursive.


L'idee de départ de la fonction est de supprimer tous les fichiers plus vieux de N jours a partir du chemin indiqué et si il y a des sous-répertoires de les parcourir pour les nettoyer (si on active le recursif, comme c'est une fonction que je veux pouvoir réutiliser ailleurs, je commence a avoir des reflexe de faign... euh de developpeur :laugh: ).

La fonction n'est pas de supprimer le repertoire indiqué en parametre si il est plus vieux de n jours, j'ai une appli qui popule les fichiers dans ce repertoire si je le degage, l'appli part en erreur (pour ceux qui ont suivit c'est celle qui lit le fichier de conf traité dans le post suivant , l'appli etant pas mal pourrite -et non modifiable- on essaie d'ameliorer les choses tout en apprenant un nouveau langage :-)

Quand a la condition -ne \&quot;\&quot; (si je traduit c'est not equal à rien) je vois pas trop. tu veux que je le mette dans la ligne de commande de remove-item, comme ca il ne sort pas de message d'erreur... mais dans tous les cas j'ai alors un autre soucis... il supprime aucun fichier quand meme ...
Merci<br><br>Message édité par: tonic8, à: 10/07/08 11:22

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

Plus d'informations
il y a 15 ans 9 mois #2573 par Gabriel
:blush: :blush: :blush: :blush: :blush:

Ok c'est la journee, ca fait 2 jours que je cherches pour rien. C'est normal qu'il me sorte ce message.

Je lui demande de supprimer les fichier.log + vieux de n jours

Ben dans le repertoire c'est des log nommées 20080706.txt.

Donc je m'excuse humblement de vous avoir embeter avec ca ...

Par contre en cherchant je suis tomber sur une ligne de commande qui fait la meme chose mais pas de la \&quot;meme facon\&quot;:
[code:1]
#file extension to look for
$param1 = *.log

#comment this if you don't want subdirectories to be affected
$param2 = -recurse

#Days after which files should be deleted
$param3 = 10

$now = get-date
dir *.$param1$ $param2$ | where-object {($now - $_.LastWriteTime).Days -lt $param3$} | remove-item
[/code:1]

c'est marrant comme facon de faire mais bon c'est plus mode objet peut etre...
Merci quand meme...

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

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