Question
[RESOLU] Fermer tous les fichier ouverts
- LAFFONT
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 15
- Remerciements reçus 0
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
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.
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
llaffont écrit:
Avec le code et le message d'erreur retournée, faut voir...Avez-vous une idée ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- LAFFONT
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 15
- Remerciements reçus 0
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 = \"\\192.168.42.151\"
$cible = \"archives_studio\";
$templateDossier = \"_*_ARCHIVES\"
$logDir = \"logs\";
$diskbegin = Get-WmiObject Win32_LogicalDisk -Filter \"DeviceID='$drivearchive'\" | Select-Object Size,FreeSpace
$taillebegin = $diskbegin.freespace / (1024*1024*1024)
$taillebegin = [math]::round($taillebegin, 1)
$resultCible = Test-Path -Path \"$pathBackup\$cible\"
if ($resultCible -ne $true){
Write-host -foregroundcolor 'green' \"Création de $pathBackup\$cible \" ;
New-Item -ItemType directory -Name \"$cible\" -Path \"$pathBackup\\"
}
$resultLog = Test-Path -Path \"$pathBackup\$cible\$logDir\"
if ($resultLog -ne $true){
Write-host -foregroundcolor 'green' \"Création de $pathBackup\$cible\$logDir \" ;
New-Item -ItemType directory -Name \"$logDir\" -Path \"$pathBackup\$cible\\"
}
$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 \"$pathBackup\$cible\$logDir\Logs.log\" -Destination \"$pathBackup\$cible\$logDir\Log_$dt.log\"
$foldersources= @(Get-ChildItem -Path \"$patharchive\" | where {$_.PsIsContainer})
foreach ($sources in $foldersources){
$folderArchives= @(Get-ChildItem -Path \"$patharchive\$sources\\" -Name \"$templateDossier\"«»)
write-host \"Nombre de dossier d archive sous $patharchive\$sources\ : \" @($folderArchives).Count
if (@($folderArchives).Count -gt 0){ #On vérifie que nous avons trouvé des dossier $templateDossier
foreach ($archives in $folderArchives){
$patharchiveFull=\"$patharchive\$sources\$archives\"
$pathCibleFull=\"$pathBackup\$cible\$sources\$archives\"
$resultPathCibleFull=Test-Path -Path \"$pathCibleFull\"
if ($resultPathCibleFull -ne $true){ #On vérifie que la destination existe sinon on la crée
New-Item -ItemType directory -Name \"$archives\" -Path \"$pathBackup\$cible\$sources\"
}
$folderArchive=@(Get-ChildItem -Path \"$patharchiveFull\"«»)
$nbArchive = @($folderArchive).Count
\"Nombre de dossier à archiver dans $patharchiveFull : $nbArchive\" | Out-File \"$pathBackup\$cible\$logDir\Logs.log\" -encoding utf8 -Append
if (@(Get-ChildItem -Path \"$patharchiveFull\" | 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 \"$pathCibleFull\$archive\\"
if ($resultPathArchive -ne $true){
Write-host -foregroundcolor 'green' \"Déplacement des dossier de $patharchiveFull\$archive vers $pathCibleFull\" ;
Copy-Item \"$patharchiveFull\$archive\" -Destination \"$pathCibleFull\" -Recurse -ErrorAction SilentlyContinue -ErrorVariable Copyerror
$Date = Get-Date -Format G
if ($?){
$Date + \" : Dossier(s) $patharchiveFull\$archive archivé(s) en $pathCibleFull\" | Out-File \"$pathBackup\$cible\$logDir\Logs.log\" -encoding utf8 -Append
\" \" | Out-File \"$pathBackup\$cible\$logDir\Logs.log\" -encoding utf8 -Append
Remove-Item \"$patharchiveFull\$archive\" -Recurse -ErrorAction SilentlyContinue -ErrorVariable Removerror
if ($?){
$Date + \" : Dossier(s) $patharchiveFull\$archive supprimé(s).\" | Out-File \"$pathBackup\$cible\$logDir\Logs.log\" -encoding utf8 -Append
\" \" | Out-File \"$pathBackup\$cible\$logDir\Logs.log\" -encoding utf8 -Append
}else{
\"Err - $Date - : La suppression de(s) dossier(s) $patharchiveFull\$archive a échouée(s).\" | Out-File \"$pathBackup\$cible\$logDir\Logs.log\" -encoding utf8 -Append
\" \" + $Removerror| Out-File \"$pathBackup\$cible\$logDir\Logs.log\" -encoding utf8 -Append
}
}else{
\"Err - $Date - : L'archivage dossier(s) $patharchiveFull\$archive a échoué.\" | Out-File \"$pathBackup\$cible\$logDir\Logs.log\" -encoding utf8 -Append
\" \" + $Copyerror | Out-File \"$pathBackup\$cible\$logDir\Logs.log\" -encoding utf8 -Append
}
}else{
Write-host -foregroundcolor 'red' \"Destination $pathCibleFull\$archive a déjà été archivé\"
\"Err - $Date - Destination $pathCibleFull\$archive a déjà été archivé\" | Out-File \"$pathBackup\$cible\$logDir\Logs.log\" -encoding utf8 -Append
}
}
}
}
}else{
Write-host -foregroundcolor 'red' \"Aucune Archive à déplacer de $patharchive\$sources\\" ;
\"Bizz - Aucune Archive à déplacer de $patharchive\$sources\\" | Out-File \"$pathBackup\$cible\$logDir\Logs.log\" -encoding utf8 -Append
}
}
$diskafter = Get-WmiObject Win32_LogicalDisk -Filter \"DeviceID='$drivearchive'\" | Select-Object Size,FreeSpace
$tailleafter = $diskafter.freespace / (1024*1024*1024)
$tailleafter = [math]::round($tailleafter, 1)
\" - $Date - : Espace disque avant l'opération : $taillebegin Go\" | Out-File \"$pathBackup\$cible\$logDir\Logs.log\" -encoding utf8 -Append
\" - $Date - : Espace disque après l'opération : $tailleafter Go\" | Out-File \"$pathBackup\$cible\$logDir\Logs.log\" -encoding utf8 -Append
Write-host -foregroundcolor 'green' \"Sauvegarde OK ! :«»)\";
[/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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
llaffont écrit:
Je n'ai pas parlé de ça, il me semble.Mais je n'ai pas de problème avec mon code
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:
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.Mais voici quand même mon code :
Donc
llaffont écrit:
On a bien compris.je cherche juste à fermer tous les fichiers ouverts.
A mon avis, le compte rendu d'erreurs n'est pas suffisamment explicite, un export-clixml sur $Removerror peut être utile :
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.Autorisation insuffisante pour effectuer l'opération.
Cdt.
Laurent
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
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 ...
tu a peut etre un probleme de droit ?Impossible de supprimer l'élément D:... : Autorisation insuffisante
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.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
- Messages : 968
- Remerciements reçus 0
Au sujet de ce message d'erreur \"cannot .. delete... because it is not empty...\" 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.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [RESOLU] Fermer tous les fichier ouverts