Pb entre version 4 et 5 de powershell
Résolu/FerméWhismeril Messages postés 18800 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 6 décembre 2023 - 24 févr. 2023 à 13:05
- Pb entre version 4 et 5 de powershell
- Chatgpt 4 - Guide
- Windows 10 version 22h2 - Guide
- Version windows - Guide
- Code gta 4 - Guide
- Nouvelle version outlook - Guide
2 réponses
17 déc. 2022 à 01:44
Bonjour, il me semble que vous rencontrez un problème lorsque vous essayez d'écrire dans le fichier de log "C:\Sauvegardes\log_Gestion_Historique_$varDate.txt" en utilisant la commande Add-Content
.
Le message d'erreur indique que le fichier est déjà en cours d'utilisation par un autre processus et ne peut pas être modifié. Cela peut être dû à plusieurs causes possibles :
-
Le fichier de log est déjà ouvert dans un éditeur de texte ou un autre programme. Dans ce cas, vous devrez fermer le programme utilisant le fichier avant de pouvoir écrire dedans.
-
Le script lui-même essaie d'accéder au fichier de log plusieurs fois simultanément. Vous pouvez essayer d'utiliser le verrou de fichier
System.IO.FileStream
pour empêcher plusieurs threads d'accéder au fichier simultanément. -
Le fichier de log est situé dans un répertoire qui n'est pas accessible en écriture par l'utilisateur qui exécute le script. Vérifiez les autorisations d'accès au répertoire et assurez-vous que l'utilisateur a les permissions nécessaires pour écrire dans le fichier.
Je vous suggère de vérifier ces points et de vous assurer que le fichier de log est accessible en écriture avant d'essayer de l'utiliser dans votre script. Si le problème persiste, vous pouvez essayer de déboguer le script en ajoutant des appels à la commande Write-Output
pour afficher les valeurs des variables et comprendre ce qui peut être à l'origine de l'erreur. En espérant vous avoir aidé !
Bonjour NewStax,
Avant toute chose, ce n'est pas un reproche mais une constatation, il vous faut apprendre à utiliser le PowerShell correctement. Vous mélanger de la syntaxe batch, PowerShell, C# et rien n'est homogène et ne respecte les normes de programmation.
Je répète ce n'est pas un reproche. Mais vous allez droit vers des problèmes en fonctionnant avec des script qui s'emmêlent et dont les principes même de PowerShell ne sont pas respectés.
Essayer aussi de comprendre les fonctionnement du Windows PowerShell et PowerShell, car vous etes passé du .Net Framework au .Net (anciennement .Net Core).
N'ayant pas les vrai données, je n'ai fait qu'une simulation chez moi en corrigeant votre code (A savoir que l'on pourrait encore le rendre plus conforme et propre, je n'ai fait que le brut). Voici ce que ca donne, et chez moi je n'ai pas de problème de handle de fichier.
# Variables $HistoryFile = "C:\Sauvegardes\Historique.csv" $Date = Get-Date -Format yyyy-MM-dd $SavePath = "C:\Sauvegardes" $LogsFile = "$SavePath\log_Gestion_Historique_$Date.txt" Set-Location -Path $SavePath # Activation du fichier de log Start-Transcript -Path $LogsFile $Rows = Import-Csv $HistoryFile -Delimiter ";" foreach ($Row in $Rows) { Add-Content -Path $LogsFile -Value "Fichiers_supprimés_sur $($row.Source)" Get-ChildItem $row.Source -Directory -Recurse -Force -ea 0 | ` Where-Object -FilterScript {$_.LastwriteTime -lt (Get-Date).AddDays(-$Row.Retention_Src)} | ` ForEach-Object {Remove-Item $_.FullName -Force | ` Out-File $LogsFile -Append} Add-Content -Path $LogsFile -Value "Fichiers_supprimés_sur $($row.Destination))" Get-ChildItem $row.Destination -Directory -Recurse -Force -ea 0 | ` Where-Object -FilterScript {$_.LastwriteTime -lt (Get-Date).AddDays(-$Row.Retention_Dest)} | ` ForEach-Object {Remove-Item $_.FullName -Force | ` Out-File $LogsFile -Append} } # Désactivation des logs Stop-Transcript robocopy C:\Sauvegardes\ \\ServeurY\Dump_BDD\_Logs "deletedbackups$Date.txt" /MOV robocopy C:\Sauvegardes\ \\ServeurY\Dump_BDD\_Logs "log_Gestion_Historique_$Date.txt" /MOV
24 févr. 2023 à 13:05
Bonjour Zang,
Avant toute chose, ce n'est pas un reproche mais une constatation, la question initiale a été posée il y a presque 10 mois.
7 mois plus tard, NewStax tente une réponse, qui n'a soulevé aucune réaction du demandeur initial. Ce qui est déjà bien trop tard pour aider fr334m.
Nous voilà 2 mois après la réponse de NewStax, et cette tu réveilles cette discussion qui aurait très bien pu restée endormie.
D'autant, que tu sembles "accabler" NewStax en te basant sur le code initial qui n'est pas de lui....
Je répète ce n'est pas un reproche. Mais exhumer des vieux sujets est contraire à la charte de CCM