Question [RESOLU] Fermer tous les fichier ouverts

Plus d'informations
il y a 12 ans 11 mois #14498 par LAFFONT
Salut,

J'ai un script d'archivage automatisé qui se contente de copier des fichiers d'un point A à un point B puis de supprimer l'original si la copie c'est bien déroulée.

Jusque là pas de problème :) dans la majorité des transferts.

Mais j'ai quelques irréductibles Fichiers Gaulois qui ne sont pas supprimés car soit disant ouvert. 4h00 du mat j'ai des doutes.:dry:

Généralement lorsque je lance cette opération à la main je passe avant par le gestionnaire de partage de mon Windows 2008 dans le menu gérer les fichiers ouverts et je ferme tout. Ce qui me permet d'obtenir 100 % de fichier archivé.

Je me demandais s'il existait un petit bout de code me permettant de réaliser ma petite manipulation directement depuis mon script.

Avez-vous une idée ?

Merci.<br><br>Message édité par: llaffont, à: 16/04/13 10:21

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

Plus d'informations
il y a 12 ans 11 mois #14505 par Laurent Dardenne
Salut,
llaffont écrit:

Avez-vous une idée ?

Avec le code et le message d'erreur retournée, faut voir...

Tutoriels PowerShell

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

Plus d'informations
il y a 12 ans 11 mois #14507 par LAFFONT
Réponse de LAFFONT sur le sujet Re:Fermer tous les fichier ouverts
Merci pour ton retour.

Mais je n'ai pas de problème avec mon code je cherche juste à fermer tous les fichiers ouverts.

Mais voici quand même mon code :

[code:1]#
#
#
Archivage des fichiers archivés du STUDIO
#
#
Version 2.4
#
#
#

$drivearchive='D:'
$patharchive=$drivearchive + '\STUDIO';
$pathBackup = \&quot;\\192.168.42.151\&quot;
$cible = \&quot;archives_studio\&quot;;
$templateDossier = \&quot;_*_ARCHIVES\&quot;
$logDir = \&quot;logs\&quot;;

$diskbegin = Get-WmiObject Win32_LogicalDisk -Filter \&quot;DeviceID='$drivearchive'\&quot; | Select-Object Size,FreeSpace
$taillebegin = $diskbegin.freespace / (1024*1024*1024)
$taillebegin = [math]::round($taillebegin, 1)

$resultCible = Test-Path -Path \&quot;$pathBackup\$cible\&quot;
if ($resultCible -ne $true){
Write-host -foregroundcolor 'green' \&quot;Création de $pathBackup\$cible \&quot; ;
New-Item -ItemType directory -Name \&quot;$cible\&quot; -Path \&quot;$pathBackup\\&quot;
}

$resultLog = Test-Path -Path \&quot;$pathBackup\$cible\$logDir\&quot;
if ($resultLog -ne $true){
Write-host -foregroundcolor 'green' \&quot;Création de $pathBackup\$cible\$logDir \&quot; ;
New-Item -ItemType directory -Name \&quot;$logDir\&quot; -Path \&quot;$pathBackup\$cible\\&quot;
}

$dt = get-date -format dd.MM.yyyy-HH.mm ((Get-Date).addDays(-1)) #recupération de la date d'hier pour créer un fichier horodaté
Move-Item \&quot;$pathBackup\$cible\$logDir\Logs.log\&quot; -Destination \&quot;$pathBackup\$cible\$logDir\Log_$dt.log\&quot;

$foldersources= @(Get-ChildItem -Path \&quot;$patharchive\&quot; | where {$_.PsIsContainer})
foreach ($sources in $foldersources){
$folderArchives= @(Get-ChildItem -Path \&quot;$patharchive\$sources\\&quot; -Name \&quot;$templateDossier\&quot;«»)
write-host \&quot;Nombre de dossier d archive sous $patharchive\$sources\ : \&quot; @($folderArchives).Count
if (@($folderArchives).Count -gt 0){ #On vérifie que nous avons trouvé des dossier $templateDossier
foreach ($archives in $folderArchives){
$patharchiveFull=\&quot;$patharchive\$sources\$archives\&quot;
$pathCibleFull=\&quot;$pathBackup\$cible\$sources\$archives\&quot;
$resultPathCibleFull=Test-Path -Path \&quot;$pathCibleFull\&quot;
if ($resultPathCibleFull -ne $true){ #On vérifie que la destination existe sinon on la crée
New-Item -ItemType directory -Name \&quot;$archives\&quot; -Path \&quot;$pathBackup\$cible\$sources\&quot;
}
$folderArchive=@(Get-ChildItem -Path \&quot;$patharchiveFull\&quot;«»)
$nbArchive = @($folderArchive).Count
\&quot;Nombre de dossier à archiver dans $patharchiveFull : $nbArchive\&quot; | Out-File \&quot;$pathBackup\$cible\$logDir\Logs.log\&quot; -encoding utf8 -Append
if (@(Get-ChildItem -Path \&quot;$patharchiveFull\&quot; | where {$_.PsIsContainer}).Count -gt 0){ #On vérifie que les dossier $templateDossier trouvés ne soit pas vide.
foreach ($archive in $folderArchive){
$resultPathArchive = Test-Path -Path \&quot;$pathCibleFull\$archive\\&quot;
if ($resultPathArchive -ne $true){
Write-host -foregroundcolor 'green' \&quot;Déplacement des dossier de $patharchiveFull\$archive vers $pathCibleFull\&quot; ;
Copy-Item \&quot;$patharchiveFull\$archive\&quot; -Destination \&quot;$pathCibleFull\&quot; -Recurse -ErrorAction SilentlyContinue -ErrorVariable Copyerror
$Date = Get-Date -Format G
if ($?){
$Date + \&quot; : Dossier(s) $patharchiveFull\$archive archivé(s) en $pathCibleFull\&quot; | Out-File \&quot;$pathBackup\$cible\$logDir\Logs.log\&quot; -encoding utf8 -Append
\&quot; \&quot; | Out-File \&quot;$pathBackup\$cible\$logDir\Logs.log\&quot; -encoding utf8 -Append
Remove-Item \&quot;$patharchiveFull\$archive\&quot; -Recurse -ErrorAction SilentlyContinue -ErrorVariable Removerror
if ($?){
$Date + \&quot; : Dossier(s) $patharchiveFull\$archive supprimé(s).\&quot; | Out-File \&quot;$pathBackup\$cible\$logDir\Logs.log\&quot; -encoding utf8 -Append
\&quot; \&quot; | Out-File \&quot;$pathBackup\$cible\$logDir\Logs.log\&quot; -encoding utf8 -Append
}else{
\&quot;Err - $Date - : La suppression de(s) dossier(s) $patharchiveFull\$archive a échouée(s).\&quot; | Out-File \&quot;$pathBackup\$cible\$logDir\Logs.log\&quot; -encoding utf8 -Append
\&quot; \&quot; + $Removerror| Out-File \&quot;$pathBackup\$cible\$logDir\Logs.log\&quot; -encoding utf8 -Append
}
}else{
\&quot;Err - $Date - : L'archivage dossier(s) $patharchiveFull\$archive a échoué.\&quot; | Out-File \&quot;$pathBackup\$cible\$logDir\Logs.log\&quot; -encoding utf8 -Append
\&quot; \&quot; + $Copyerror | Out-File \&quot;$pathBackup\$cible\$logDir\Logs.log\&quot; -encoding utf8 -Append
}
}else{
Write-host -foregroundcolor 'red' \&quot;Destination $pathCibleFull\$archive a déjà été archivé\&quot;
\&quot;Err - $Date - Destination $pathCibleFull\$archive a déjà été archivé\&quot; | Out-File \&quot;$pathBackup\$cible\$logDir\Logs.log\&quot; -encoding utf8 -Append
}
}
}
}
}else{
Write-host -foregroundcolor 'red' \&quot;Aucune Archive à déplacer de $patharchive\$sources\\&quot; ;
\&quot;Bizz - Aucune Archive à déplacer de $patharchive\$sources\\&quot; | Out-File \&quot;$pathBackup\$cible\$logDir\Logs.log\&quot; -encoding utf8 -Append
}
}
$diskafter = Get-WmiObject Win32_LogicalDisk -Filter \&quot;DeviceID='$drivearchive'\&quot; | Select-Object Size,FreeSpace
$tailleafter = $diskafter.freespace / (1024*1024*1024)
$tailleafter = [math]::round($tailleafter, 1)

\&quot; - $Date - : Espace disque avant l'opération : $taillebegin Go\&quot; | Out-File \&quot;$pathBackup\$cible\$logDir\Logs.log\&quot; -encoding utf8 -Append
\&quot; - $Date - : Espace disque après l'opération : $tailleafter Go\&quot; | Out-File \&quot;$pathBackup\$cible\$logDir\Logs.log\&quot; -encoding utf8 -Append
Write-host -foregroundcolor 'green' \&quot;Sauvegarde OK ! :«»)\&quot;;
[/code:1]

Et voici l'erreur que me retourne mon script quand il ne parviens pas à supprimer les fichiers.

Err - 03/04/2013 02:15:56 - : La suppression de(s) dossier(s) D:\STUDIO\BRICOMARCHE\_2013_ARCHIVES\R06038_NOCTURNE_LE FENOUILLER a échouée(s).
Impossible de supprimer l'élément D:\STUDIO\BRICOMARCHE\_2013_ARCHIVES\R06038_NOCTURNE_LE FENOUILLER\.DS_Store : Autorisation insuffisante pour effectuer l'opération. Le répertoire D:\STUDIO\BRICOMARCHE\_2013_ARCHIVES\R06038_NOCTURNE_LE FENOUILLER ne peut pas être supprimé, car il n'est pas vide.

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

Plus d'informations
il y a 12 ans 11 mois #14513 par Laurent Dardenne
Salut,
llaffont écrit:

Mais je n'ai pas de problème avec mon code

Je n'ai pas parlé de ça, il me semble.
Sur ce forum il y a suffisamment de demandeurs qui balancent des briques, je tiens à rappeler que ceux qui tentent de vous aider ne sont pas maçons.
Ceci dit, je souhaitais juste avoir d'autres informations pour t'aider.
llaffont écrit:

Mais voici quand même mon code :

Toi tu connais ton code et tu l'as devant les yeux, mais nous non. Les maçons ne sont pas translucides, je sais c'est regrettable.

Donc
llaffont écrit:

je cherche juste à fermer tous les fichiers ouverts.

On a bien compris.
A mon avis, le compte rendu d'erreurs n'est pas suffisamment explicite, un export-clixml sur $Removerror peut être utile :

Autorisation insuffisante pour effectuer l'opération.

Un fichier ouvert en mode exclusif ne génère pas ce type d'erreur. Il te faut donc, à mon avis, explorer le type d'exception que ton code renvoi dans ce cas.

Cdt.
Laurent

Tutoriels PowerShell

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

Plus d'informations
il y a 12 ans 11 mois #14537 par Philippe
Réponse de Philippe sur le sujet Re:Fermer tous les fichier ouverts
pas d'idee ??

parce que moi aussi j'aimerai pouvoir fermer des fichiers bloquer ouvrerts

j'ai deja la liste des fichiers ouverts sur cette page ou ici (tiens un nom connue ...;))

Impossible de supprimer l'élément D:... : Autorisation insuffisante

tu a peut etre un probleme de droit ?
mais non vu que tu arrive a debloquer les fichiers par le gestionnaire de partage, et donc a voir l'ordi et peut etre l'appli qui bloque tes fichiers. car dans tous les cas faut trouver pourquoi le fichier reste ouvert. (enfin si possible) et fermé cette aplli ou la tué<br><br>Message édité par: 6ratgus, à: 9/04/13 19:13

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

Plus d'informations
il y a 12 ans 11 mois #14538 par Matthew BETTON
Salut,

Au sujet de ce message d'erreur \&quot;cannot .. delete... because it is not empty...\&quot; avec Remove-Item et le paramètre -recurse, une possible réponse ici .

help Remove-Item says:

The Recurse parameter in this cmdlet does not work properly.

and

Because the Recurse parameter in this cmdlet is faulty, the command uses the Get-Childitem cmdlet to get the desire d files, and it uses the pipeline operator to pass them to the Remove-Item cmdlet.

and proposes this alternative as an example:

get-childitem * -include *.csv -recurse | remove-item

So you should pipe get-childitem -recurse into remove-item.


Après, je ne sais pas sous quelle version de PowerShell (le message date un peu maintenant) et je n'ai pas le temps de faire des tests.

Donc à voir et à tester ...

@ +

Matthew<br><br>Message édité par: Matthew BETTON, à: 9/04/13 20:25

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

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