Flash info

"Those who forget to script are doomed to repeat their work."

Jeffery Hicks (PowerShell MVP)

 
Accueil arrow Forum

Bienvenue sur le forum PowerShell-Scripting.com

 
marcci
Utilisateur

PowerShelleur Amateur
Messages: 90
graphgraph
Karma: 10  
[Résolu] Excel: lecture de métadonnées - 1/09/17 10:51 Bonjour à tous,

j'ai une liste de fichier excel et je souhaiterais récupérer la donnée "Dernier Enregistrement par: username"

Mon petit doigt me dit que l'info ce cache la dedans, mais j'avoue être perdu.

Code:

   $DelivrableFiles[0].GetAccessControl()|gm    TypeName System.Security.AccessControl.FileSecurity Name                            MemberType     Definition                                                                   ----                            ----------     ----------                                                                   Access                          CodeProperty   System.Security.AccessControl.AuthorizationRuleCollection Access{get=Get... Group                           CodeProperty   System.String Group{get=GetGroup;}                                          Owner                           CodeProperty   System.String Owner{get=GetOwner;}                                          Path                            CodeProperty   System.String Path{get=GetPath;}                                            Sddl                            CodeProperty   System.String Sddl{get=GetSddl;}                                            AccessRuleFactory               Method         System.Security.AccessControl.AccessRule AccessRuleFactory(System.Securi... AddAccessRule                   Method         void AddAccessRule(System.Security.AccessControl.FileSystemAccessRule rule) AddAuditRule                    Method         void AddAuditRule(System.Security.AccessControl.FileSystemAuditRule rule)   AuditRuleFactory                Method         System.Security.AccessControl.AuditRule AuditRuleFactory(System.Security... Equals                          Method         bool Equals(System.Object obj)                                              GetAccessRules                  Method         System.Security.AccessControl.AuthorizationRuleCollection GetAccessRules... GetAuditRules                   Method         System.Security.AccessControl.AuthorizationRuleCollection GetAuditRules(... GetGroup                        Method         System.Security.Principal.IdentityReference GetGroup(type targetType)       GetHashCode                     Method         int GetHashCode()                                                           GetOwner                        Method         System.Security.Principal.IdentityReference GetOwner(type targetType)       GetSecurityDescriptorBinaryForm Method         byte[] GetSecurityDescriptorBinaryForm()                                    GetSecurityDescriptorSddlForm   Method         string GetSecurityDescriptorSddlForm(System.Security.AccessControl.Acces... GetType                         Method         type GetType()                                                              ModifyAccessRule                Method         bool ModifyAccessRule(System.Security.AccessControl.AccessControlModific... ModifyAuditRule                 Method         bool ModifyAuditRule(System.Security.AccessControl.AccessControlModifica... PurgeAccessRules                Method         void PurgeAccessRules(System.Security.Principal.IdentityReference identity) PurgeAuditRules                 Method         void PurgeAuditRules(System.Security.Principal.IdentityReference identityRemoveAccessRule                Method         bool RemoveAccessRule(System.Security.AccessControl.FileSystemAccessRule... RemoveAccessRuleAll             Method         void RemoveAccessRuleAll(System.Security.AccessControl.FileSystemAccessR... RemoveAccessRuleSpecific        Method         void RemoveAccessRuleSpecific(System.Security.AccessControl.FileSystemAc... RemoveAuditRule                 Method         bool RemoveAuditRule(System.Security.AccessControl.FileSystemAuditRule r... RemoveAuditRuleAll              Method         void RemoveAuditRuleAll(System.Security.AccessControl.FileSystemAuditRul... RemoveAuditRuleSpecific         Method         void RemoveAuditRuleSpecific(System.Security.AccessControl.FileSystemAud... ResetAccessRule                 Method         void ResetAccessRule(System.Security.AccessControl.FileSystemAccessRule ... SetAccessRule                   Method         void SetAccessRule(System.Security.AccessControl.FileSystemAccessRule rule) SetAccessRuleProtection         Method         void SetAccessRuleProtection(bool isProtectedbool preserveInheritance)    SetAuditRule                    Method         void SetAuditRule(System.Security.AccessControl.FileSystemAuditRule rule)   SetAuditRuleProtection          Method         void SetAuditRuleProtection(bool isProtectedbool preserveInheritance)     SetGroup                        Method         void SetGroup(System.Security.Principal.IdentityReference identity)         SetOwner                        Method         void SetOwner(System.Security.Principal.IdentityReference identity)         SetSecurityDescriptorBinaryForm Method         void SetSecurityDescriptorBinaryForm(byte[] binaryForm), void SetSecurit... SetSecurityDescriptorSddlForm   Method         void SetSecurityDescriptorSddlForm(string sddlForm), void SetSecurityDes... ToString                        Method         string ToString()                                                           AccessRightType                 Property       type AccessRightType {get;}                                                 AccessRuleType                  Property       type AccessRuleType {get;}                                                  AreAccessRulesCanonical         Property       bool AreAccessRulesCanonical {get;}                                         AreAccessRulesProtected         Property       bool AreAccessRulesProtected {get;}                                         AreAuditRulesCanonical          Property       bool AreAuditRulesCanonical {get;}                                          AreAuditRulesProtected          Property       bool AreAuditRulesProtected {get;}                                          AuditRuleType                   Property       type AuditRuleType {get;}                                                   AccessToString                  ScriptProperty System.Object AccessToString {get=$toString "";...                        AuditToString                   ScriptProperty System.Object AuditToString {get=$toString "";...



Message édité par: Arnaud, à: 4/09/17 16:54

Message édité par: Arnaud, à: 27/09/17 11:29
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1319
graphgraph
Karma: 45  
Re:Dernier enregistrement par usename - 4/09/17 12:54 Bonjour Marcci,

Je pense que ton petit doigt se trompe sur ce coup-là...

L'information que tu recherches n'est pas stockée dans NTFS mais est en fait une métadonnée d'un fichier Office.

Voici une petite fonction rapide inspirée du post suivant : Hey, Scripting Guy! How Can I List All the Properties of a Microsoft Word Document?

Code:

  #Requires -Version 2 [CmdletBinding()] Param (     [Parameter(Mandatory=$true)]     [String$FilePath ) $application = New-Object -ComObject excel.application $application.Visible $false $document $application.workbooks.open($FilePath) $binding "System.Reflection.BindingFlags" -as [type] $properties $document.BuiltInDocumentProperties $hash = @{} foreach($property in $properties) {     $hash += @{                 [System.__ComObject].invokemember("name",$binding::GetProperty,$null,$property,$null) = & {                      try {                             [System.__ComObject].invokemember("value",$binding::GetProperty,$null,$property,$null)                     }                     catch 'N/A'}            }         } } $application.quit([Ref]([Microsoft.Office.Interop.Word.WdSaveOptions]::wdDoNotSaveChanges)) New-Object -TypeName PSObject -Property $hash



Exemple de résultat sur un de mes fichiers pris au hasard :

Code:

  PS > .\Get-ExcelDocumentMetadata.ps1 -FilePath 'C:\Temp\Borne_arcade.xlsx' Last author                        PETITJEAN Arnaud Category                           : Content type                       : Title                              : Format                             : Keywords                           : Number of slides                   N/A Comments                           : Security                           0 Number of characters (with spaces) : N/A Manager                            : Last print date                    N/A Number of characters               N/A Application name                   Microsoft Excel Subject                            : Language                           : Author                             PETITJEAN Arnaud   Number of notes                    N/A Creation date                      05/04/2016 15:43:51 Document version                   : Number of paragraphs               N/A Total editing time                 N/A Number of multimedia clips         N/A Template                           : Company                            POWERSHELL-SCRIPTING.COM Hyperlink base                     : Content status                     : Last save time                     05/04/2016 16:48:57 Number of bytes                    N/A Revision number                    : Number of lines                    N/A Number of pages                    N/A Number of words                    N/A Number of hidden Slides            N/A



L'information que tu recherches se trouve dans la propriété "Last author".

Ah oui j'ai oublié de te dire que pour que le script marche, il faut qu'Excel soit installé sur ta machine. En effet, le script se base sur les objets COM d'Office.

Arnaud

Message édité par: Arnaud, à: 4/09/17 16:49
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
marcci
Utilisateur

PowerShelleur Amateur
Messages: 90
graphgraph
Karma: 10  
Re:Dernier enregistrement par usename - 4/09/17 14:43 Merci Arnaud,

c'est exactement ce que je ne voulais pas, être obligé d'ouvrir le document pour regarder ce qu'il y a à l'intérieur

M'enfin s'il n'y a pas d'autre solution...
Je ferais avec.

Merci pour l'astuce !
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1319
graphgraph
Karma: 45  
Re:Dernier enregistrement par usename - 4/09/17 15:52 Eh oui, pas le choix malheureusement...

Au début, tout comme toi, j'ai pensé que c'était des attributs NTFS mais à bien y réfléchir on comprend vite que ce n'est pas le cas.

Cela dit qu'y a-t-il de gênant à ouvrir les fichiers pour lire les métadonnées ? Peut-être est-ce l'aspect performance qui te déranges ?

Arnaud
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
marcci
Utilisateur

PowerShelleur Amateur
Messages: 90
graphgraph
Karma: 10  
Re:Dernier enregistrement par usename - 5/09/17 08:27 En effet les performance sont largement diminué.

Si l'on a que quelque documents à traiter on peut s'en contenter, par contre s'il y en a plusieurs dizaines, centaines voir milliers l'exécution peut devenir extrêmement longue.

Il faut aussi penser à d'autre chose:
- Ne pas tenir compte des différents messages que Excel peut renvoyer
- Fermer le document en cours avant d'en ouvrir un autre
- Contrôler la bonne fermeture du document
- Relancer l'instance d'Excel s'il elle venait à planter

Enfin que de la joie
  | | L'administrateur a désactivé l'accés public en écriture.
© 2020 PowerShell-Scripting.com