Question [Résolu] Libérer des fichiers verrouillés SMBShare

Plus d'informations
il y a 8 ans 5 mois #24632 par Toper
Bonjour @ tous,
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 :)<br><br>Message édité par: Arnaud, à: 1/12/17 17:58

Powershell: la vie est belle :)

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

Plus d'informations
il y a 8 ans 5 mois #24634 par xyz
Réponse de xyz sur le sujet Re:Plusieurs instructions enchainnées
Salut,
pour ceci :
[code:1]clear-content \&quot;C:\DeletedFiles.txt\&quot; -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.

Plus d'informations
il y a 8 ans 5 mois #24635 par Toper
Pour la gestion de l'erreur, c'est simplement au cas où le fichier txt ne serait plus présent.

Tu peux effectuer une seule lecture des fichiers, obtenir leur nombre, puis les supprimer

Comme ceci ?
[code:1]$gci123soleil = @(Get-ChildItem -path $pathSource -Recurse -Include \&quot;*.pdf\&quot; -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.

Plus d'informations
il y a 8 ans 5 mois #24636 par Toper

fermer toutes les sessions de partages de fichiers sur un serveur

Comme sur l'image

Powershell: la vie est belle :)
Pièces jointes :

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

Plus d'informations
il y a 8 ans 5 mois #24642 par xyz
Réponse de xyz sur le sujet Re:Plusieurs instructions enchainnées
gregmurf écrit:

Comme ceci ?

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.
gregmurf écrit:

D'où ma question: est-il possible de forcer le remove-item lorsqu'un fichier est déjà en cours d'utilisation ?

Non, -Force supprime les fichiers Hidden ou ReadOnly.
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:

Ou seconde question: comment fait-on via PSH pour fermer toutes les sessions de partages de fichiers sur un serveur ?

ça doit être possible faut regarder les API.

Tutoriels PowerShell

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

Plus d'informations
il y a 8 ans 5 mois #24643 par Toper

ça doit être possible faut regarder les API.

J'ai trouvé ceci qui a l'air de faire ce que je cherche:
[code:1]Get-SmbOpenFile | Where-Object {($_.Path -like \&quot;\\serveur\partage*\&quot;«») -and ($_.ClientUserName -eq \&quot;DOMAINE\utilisateur\&quot;«»)} | Close-SmbOpenFile –Force[/code:1]

Powershell: la vie est belle :)

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

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