Question Sup. d'un fichier utilisé par un process (Résolu)

Plus d'informations
il y a 16 ans 5 mois #1257 par daniel soares
hello
Je tourne en rond sur un sujet que je vais tenter de vous expliquer
voila j'ai un fichier excel que je veux supprimer

[code:1]
$fichier =(new-object system.io.fileinfo nom.fichier)
if ($fichier.exists -eq $True) {$fichier.Delete()}
[/code:1]

simple sauf que si le fichier est ouvert je ne pourrais pas le supprimer
j'ai donc essayé de killer le processus

[code:1]
$excelproc = get-process | Where-Object {$_.processname -like \"excel\"}
Stop-Process -InputObject $excelproc
[/code:1]

mais le pb est que si j'ai plusieurs fichiers excel ouverts ils vont tous utiliser le meme processus et donc je vais tous les fermer meme ceux qui ne sont pas sauvegardés

dans le process j'ai bien la proprieté MainWindowTitle
mais elle me donne que le nom du fichier excel en avant plan
quand j'utilise l'objet -com excel je ne peux pas a priori retrouver les infos des processus excel deja lancés
en fait je voudrai soit fermer juste le fichier recherché sans toucher aux autres pour pouvoir le suprimer
soit killer le processus excel mais en m'assurant que tous les fichiers sont bien sauvegardés
quelqu'un a t'il une idée moi j'ai fais le tour et j'ai pas de solution<br><br>Message édité par: Arnaud, à: 30/11/07 09:59

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

Plus d'informations
il y a 16 ans 5 mois #1258 par Jacques Barathon
Pour accéder à une instance en cours d'Excel, tu peux utiliser cette syntaxe:

[code:1]$excel = [System.Runtime.InteropServices.Marshal]::GetActiveObject(“excel.application”)[/code:1]
Tu peux ensuite énumérer les fichiers Excel ouverts (propriété Worksbooks) et éventuellement fermer celui que tu veux.

Au passage, je remarque ton usage astucieux de la classe FileInfo pour tester l'existence d'un fichier. Sache quand même qu'il existe une commandelette prévue pour ça: test-path.

[code:1]if (test-path monfichier.xls) {del monfichier.xls}[/code:1]
Janel

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

Plus d'informations
il y a 16 ans 5 mois #1259 par daniel soares
Genial
en même temps powershell devient trop facile avec toi :laugh:

donc le code devient
[code:1]
$excel = [System.Runtime.InteropServices.Marshal]::GetActiveObject(“excel.application”)
$CSVexist = $excel.Workbooks | Where-Object {$_.name -eq $CsvDeCryptedList}
if ($CSVexist -ne $null){$CSVexist.close()}
if (test-path $RepMorningCheck\$CsvDeCryptedList) {del $RepMorningCheck\$CsvDeCryptedList}
[/code:1]

par contre sais tu pourquoi powershell me refuse l'access a la proprieté $excel.workbooks.name

ca m'a obligé a utiliser la commande where-object
car $excel.workbooks.name n'existe pas ??????

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

Plus d'informations
il y a 16 ans 5 mois #1260 par Jacques Barathon
$excel.Workbooks est un tableau d'objets. Il faut accéder à un des objets en particulier pour pouvoir retrouver sa propriété name, ce que tu as fait en appliquant un filtre avec \&quot;where\&quot;.

Janel

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

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