Question
[Résolu] Libérer des fichiers verrouillés SMBShare
- Toper
- Auteur du sujet
- Hors Ligne
- Membre premium
-
- Messages : 145
- Remerciements reçus 0
je n'arrive pas à transformer ça:
[code:1]$pathSource = \"\\serveur\partage\dossier\" #Chemin de travail
$DateLimit = (Get-Date).Adddays(-1)
$gcifiles = @(Get-ChildItem -path $pathSource -Recurse -Include \"file*.pdf\" -Force | Where-Object { $_.LastWriteTime -lt $DateLimit }).count
clear-content \"C:\DeletedFiles.txt\" -ErrorAction SilentlyContinue
write-output \"$gcifiles Fichiers PDF à supprimer\" >> C:\DeletedFiles.txt
$gcifiles = @(Get-ChildItem -path $pathSource -Recurse -Include \"file*.pdf\" -Force | Where-Object { $_.LastWriteTime -lt $DateLimit }) | remove-item -force
$gcifiles = @(Get-ChildItem -path $pathSource -Recurse -Include \"file*.pdf\" -Force | Where-Object { $_.LastWriteTime -lt $DateLimit }).count
write-output \"$gcifiles Fichiers PDF nommés Files trouvés après suppression, en date du $DateLimit ou antérieur\" >> C:\DeletedFiles.txt
[/code:1]
En une seule instruction \"suivie\"... Enfin je m'explique:
Je souhaite checker si des fichiers \"files*.pdf\" en date d'hier sont présent, les compter, vider le fichier TXT puis envoyer le count dans ce fichier txt, les supprimer du serveur, puis vérifier qu'ils ont bien été supprimés et envoyer cette vérification dans le fichier TXT.
Mais la façon dont je l'écris est trop lourde car je lance un gci à chaque fois (sur des milliers de fichiers pdf....)
Donc j'ose faire appel à votre savoir faire
Powershell: la vie est belle
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 69
pour ceci :
[code:1]clear-content \"C:\DeletedFiles.txt\" -ErrorAction SilentlyContinue[/code:1]
Tu ne devrais pas utiliser SilentlyContinue mais une gestion d'erreur.
Tu peux effectuer une seule lecture des fichiers, obtenir leur nombre, puis les supprimer. Pour limiter la taille tu peux mémoriser uniquement le path.
Ton dernier contrôle indique que tu ne fais pas confiance à Remove-Item. Une gestion d'erreur devrait suffire à connaitre le nb de fichier qui ne serait pas supprimé. De plus tu peux les lister dans le fichier résultat ou un fichier de log et ainsi connaitre la raison de l'échec de la suppression.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Toper
- Auteur du sujet
- Hors Ligne
- Membre premium
-
- Messages : 145
- Remerciements reçus 0
Comme ceci ?Tu peux effectuer une seule lecture des fichiers, obtenir leur nombre, puis les supprimer
[code:1]$gci123soleil = @(Get-ChildItem -path $pathSource -Recurse -Include \"*.pdf\" -Force | Where-Object { $_.LastWriteTime -lt $DateLimit } | remove-item -Force).count
[/code:1]
J'ai second soucis qui est le suivant: lorsque quelqu'un est sur un des fichiers que je souhaite supprimer, il me met une erreur lors du remove-item (normal me direz-vous), et c'est ce que je cherche à forcer.
D'où ma question: est-il possible de forcer le remove-item lorsqu'un fichier est déjà en cours d'utilisation ?
Ou seconde question: comment fait-on via PSH pour fermer toutes les sessions de partages de fichiers sur un serveur ?
Powershell: la vie est belle
Connexion ou Créer un compte pour participer à la conversation.
- Toper
- Auteur du sujet
- Hors Ligne
- Membre premium
-
- Messages : 145
- Remerciements reçus 0
Powershell: la vie est belle
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 69
Pas tout à fait car tu n'as pas le compte des fichiers trouvé , le compte de ceux qui ont été supprimés et enfin ceux en erreur.Comme ceci ?
gregmurf écrit:
Non, -Force supprime les fichiers Hidden ou ReadOnly.D'où ma question: est-il possible de forcer le remove-item lorsqu'un fichier est déjà en cours d'utilisation ?
Si le fichier est verrouillé c'est justement pour éviter que qq d'autre le supprime ou le modifie.
Tu n'as pas d'autre choix que faire en + passes, une sorte de reste à faire. Mais cela demandera plus de code.Et ici c'est aussi une question relative au fonctionnel.
gregmurf écrit:
ça doit être possible faut regarder les API.Ou seconde question: comment fait-on via PSH pour fermer toutes les sessions de partages de fichiers sur un serveur ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Toper
- Auteur du sujet
- Hors Ligne
- Membre premium
-
- Messages : 145
- Remerciements reçus 0
J'ai trouvé ceci qui a l'air de faire ce que je cherche:ça doit être possible faut regarder les API.
[code:1]Get-SmbOpenFile | Where-Object {($_.Path -like \"\\serveur\partage*\"«») -and ($_.ClientUserName -eq \"DOMAINE\utilisateur\"«»)} | Close-SmbOpenFile –Force[/code:1]
Powershell: la vie est belle
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu] Libérer des fichiers verrouillés SMBShare