Flash info

"Si vous vivez chaque jour comme si c'était le dernier, un jour vous aurez probablement raison."

Steve Jobs (1955-2011)

 
Accueil arrow Forum

Bienvenue sur le forum PowerShell-Scripting.com

 
franconero
Utilisateur

PowerShelleur Débutant
Messages: 11
graphgraph
Karma: 1  
LastAccessTime "par qui"? (Résolu) - 11/04/07 23:04 Tout d'abord, BONJOUR!!

Je me presente "franck" je suis news ici et news aussi dans le powershell.
Et aussi un grand merci pour ce forum en french.

Aprés une bonne lecture sur la présentation de PowerShell. Qui finalement démystifie pas mal l'environnement. Je suis avec assiduitée celle-ci d'ou ma première question.

Dans la commande : "$b = Get-childitem monfichier.txt; $b.LastAccessTime"

Y a t'il possibilité de savoir QUI a accédé le dernier?

Par exemple obtenir une sorte de log.

Merci pour votre aide

Message édité par: Arnaud, à: 17/07/07 17:31
  | | L'administrateur a désactivé l'accés public en écriture.
Robin
Admin

Administrateur
Messages: 262
graphgraph
Karma: 8  
Re:LastAccessTime "par qui"? - 12/04/07 07:39 Salut Franck et bienvenue

Pour repondre à ta question ...
à ma connaissance il n'y a pas de propriétés de la classe "FileSystemInfo" pour connaitre le nom de l'utilisateur qui a accédé le dernier au ficher.


tu peux voir la liste des propriétés disponibles ici :

http://msdn2.microsoft.com/en-us/library/system.io.filesysteminfo_properties.aspx

Message édité par: robin, à: 12/04/07 08:41
Robin MVP PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
franconero
Utilisateur

PowerShelleur Débutant
Messages: 11
graphgraph
Karma: 1  
Re:LastAccessTime "par qui"? - 13/04/07 14:32 Hello Robin et enchanté

OK et merci pour ta réponse. La liste de "classfilesystem" et encore pour moi à mille lieux et de par ce fait j'y retournerais dans quelques temps avec j'espère plus de facilitées.

Et oui! chaque chôse en son temps. Still thank-you

Message édité par: franconero, à: 13/04/07 15:32
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1319
graphgraph
Karma: 45  
Re:LastAccessTime "par qui"? - 15/04/07 21:26 Rebonjour Franck,

Etant donné que cette information n'est pas stockée dans le système de fichiers NTFS, il n'est pas possible de savoir qui a accédé en dernier à un fichier.

Par contre, Windows possède un journal d'audit qu'il te suffit d'activer pour obtenir cette information.
Et une fois cette information stockée dans ton journal d'évènements tu peux y avoir accès avec PowerShell...

Avec un peu de courage, il te serait même possible de faire un script qui surveillerait l'arrivée (en quasi temps réel) d'un événement particulier dans le journal d'audit (ou autres) et d'exécuter une action en suivant comme un envoi de mail par exemple.

Cela est un peu hardu mais ça peut très bien se faire. On peut en rediscuter si cela t'intéresses.

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

PowerShelleur Débutant
Messages: 11
graphgraph
Karma: 1  
Re:LastAccessTime "par qui"? - 16/04/07 16:03 Hello Arnaud

C'est un grand oui que je te dit pour ta proposition.
Mais dans un premier temps je vais essayer seul déja pour ma progression personnelle.
Et si l'envie de jeter le PC par la fenêtre me prends je ne manquerais pas de penser à toi avant de passer à l'acte.

Encore merci et certainement à bientôt

++++++++
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1319
graphgraph
Karma: 45  
Re:LastAccessTime "par qui"? - 16/04/07 17:36 Ok pas de problème mais tiens nous au courant de ta progression car la suite nous intéresse aussi.

Juste une piste en dehors de Powershell. Il existe un utilitaire qui fait ce que tu cherches à faire mais ce n'est pas un freeware, mais un shareware Ceci dit il ne coute pas cher.

En tout cas je l'ai essayé et il fonctionne très bien : il s'appelle EvenTrigger http://www.isdecisions.com/fr/logiciels/eventrigger/

A très bientôt

Arnaud

Message édité par: Arnaud, à: 16/04/07 18:37
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
Laurent Dardenne
Utilisateur

PowerShelleur Platinum
Messages: 5724
graph
Karma: 209  
Re:LastAccessTime "par qui"? - 16/04/07 21:24 Le framework DotNet (System.IO.FileSystemWatcher) ainsi que WMI, un peu plus corsé à coder sous PowerShell, propose ce type de "supervision".

Si vous voulez un coup de main pour réaliser ce type de script n'hésitez pas à me solliciter, je trouve l'idée intéressante.

Un exemple WMI en Delphi
Code:

  Query:='Select * from __InstanceOperationEvent within 1  where TargetInstance ISA ''CIM_DataFile'' and TargetInstance.name=''c:\\temp\\test.txt''' procedure TForm1.SWbemSink1ObjectReady(ASenderTObject;   const objWbemObjectISWbemObject;   const objWbemAsyncContextISWbemNamedValueSet); // Déclenché lorsqu'un objet fourni par l'appel asynchrone est disponible. // ObjWbemObject contient l'objet retourné Const cstWMIEvent: Array[0..2of String=('__InstanceCreationEvent','__InstanceDeletionEvent','__InstanceModificationEvent'); var WmiObjetISWbemObject;     WMIContext TSWbemNamedValueSet;     Contexte ISWbemNamedValue;     WMILastErrorTSWbemLastError;     NomFichier String;     ClassseEvenement String; begin Try   If Not VarIsEmpty(objWbemAsyncContext)    then     begin        // On utilise un TOleServer que l'on connecte à l'interface reçue en paramètre       WMIContext:=TSWbemNamedValueSet.Create(Self);       With WMIContext do        begin         AutoConnect:=False;         ConnectKind :=ckAttachToInterface;         ConnectTo(IUnknown(objWbemAsyncContext) as ISWbemNamedValueSet);        end;      try        //retrouve la collection initialisée au démarrage de l'application       Contexte:= WMIContext.Item('SinkName',0); // IFlags tjr zéro        // Si l'item n'existe pas, renvoie=wbemErrNotFound      except      on E:Exception do       begin        if (E is EOleException) or (E is EOleSysError)         then           begin            if ExistWMIErreur(WMILastError,Self)             then ShowWMIErreur('Collecteur événement onReady : Méthode Item .',WMILastError,(as EOleException));            Memo1.Lines.Add(#13#10+'Test d''item inexistant.');            Memo1.Lines.Add(StrOriginError((as EOleException).ErrorCode));            Memo1.Lines.Add('Erreur ['+IntToHex((as EOleException).ErrorCode,8)+'] '+E.Message);           end;        end;      end;        // L'objet retourné est un événement.        // Sa propriété TargetInstance, commune aux 3 classes, contient une copie de l'instance du  fichier concerné.  :       WmiObjet:=IUnknown(objWbemObject.Properties_.Item('TargetInstance',0).Get_Value) as ISWbemObject;        //Quelle requête gére-t-on ?       If Contexte.Get_Value 'Fichier'        Then         begin            //On détermine le type de l'évent d'après son nom de classe          Case AnsiIndexStr(objWbemObject.Path_.Class_,cstWMIEventof           0 Memo1.Lines.Add('Création');           Memo1.Lines.Add('Suppression');           Memo1.Lines.Add('Modification');          end;           //Affiche le nom du fichier, déjà connu dans cet exemple          NomFichier:=WMIVariantToStr(WmiObjet.Properties_.Item('Name',0).Get_Value);          Memo1.Lines.Add(#13#10+'Fichier concerné : '+WMIGetNomFichier(NomFichier)+#13#10);         end        else          begin           Memo1.Lines.Add('Contexte non géré.');           Exit;          end;        //Affiche le détail de 'l'objet fichier'       Memo1.Lines.Add(WmiObjet.Path_.path);       Memo1.Lines.Add(AdjustLineBreaks(WmiObjet.GetObjectText_(0)));     end;   // Else  Finally   // 'Contexte' est une interface ISWbemNamedValue local à cette procédure, Delphi   // se charge de décrémenter son compteur de référence.   FreeAndNil(WMIContext);  end; end;



Je ne vous cache pas que j'ai un faible pour son implémentation sous .NET
Ceci dit je ne sais si cette méthode .NET utilise en interne une API native ou si elle s'appuie sur WMI ?
Tutoriels PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1319
graphgraph
Karma: 45  
Re:LastAccessTime "par qui"? - 16/04/07 21:37 Ca pour un exemple, c'est un exemple...

Plus sérieusement il s'agit clairement de WMI, car ceci est une requête WMI:
Code:

 Query:='Select * from __InstanceOperationEvent within 1  where TargetInstance ISA ''CIM_DataFile'' and TargetInstance.name=''c:\\temp\\test.txt'''



Effectivement en PowerShell il faut ruser un peu pour y parvenir car la cmdlet Get-WmiObject ne supporte pas les évènements WMI. J'ai déjà fait un script en PowerShell qui monitore l'arrivée d'un fichier dans un répertoire. Je le posterai demain car je ne l'ai pas sous le coude...

@+++ et merci de ton aide BatchMan
PS: Au fait pas mal ton intro PowerShell sur developpez.com (http://laurent-dardenne.developpez.com/articles/Windows/PowerShell/Introduction/). Tu es démasqué BatchMan...
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
Laurent Dardenne
Utilisateur

PowerShelleur Platinum
Messages: 5724
graph
Karma: 209  
Re:LastAccessTime "par qui"? - 17/04/07 11:24 Arnaud écrit:
Tu es démasqué BatchMan...
Fatalitas

J'ai regardé un peu plus le sujet, il semblerais que ce type de traitment sous PS v1 ne soit possible qu'en synchrone.

Pour de l'asynchrone ça s'annonce plus délicat à mettre en oeuvre car je n'ai pas vu de notion d'événement, hors WindowsForm, sous PS.

Pour le tuto je dois le mettre à jour, pour info j'en prépare un sur la signature de script.

Mais pour le moment je vais essayer de coder ça avec WMI.
Tutoriels PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
Laurent Dardenne
Utilisateur

PowerShelleur Platinum
Messages: 5724
graph
Karma: 209  
Re:LastAccessTime "par qui"? - 17/04/07 13:31 Un début de solution :
Code:

 $RequeteWQL="Select * from __InstanceOperationEvent within 1 where TargetInstance ISA 'CIM_DataFile' and  TargetInstance.name='c:\\temp\\test.txt'" $Requeteur= new-object Management.WQLEventQuery($RequeteWQL) $Surveillant=new-object Management.ManagementEventWatcher $Requeteur $Resultat=$Surveillant.WaitForNextEvent() $Resultat.TargetInstance


Malheureusement je viens de me souvenir que WMI permet de trapper ce type d'événement mais pas l'utilisateur le déclenchant.
Et la classe FileSystemWatcher ne porte pas non plus cette infos.
Tutoriels PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1319
graphgraph
Karma: 45  
Re:LastAccessTime "par qui"? - 17/04/07 21:16 J'ai regardé un peu plus le sujet, il semblerais que ce type de traitment sous PS v1 ne soit possible qu'en synchrone.

Pour de l'asynchrone ça s'annonce plus délicat à mettre en oeuvre car je n'ai pas vu de notion d'événement, hors WindowsForm, sous PS.


Effectivement les évènements WMI sont synchrones mais en regardant de plus près, il est possible de mettre un timeout sur l'attente d'évènements. Cela permet de faire un semblant d'asynchronisme. Cela donnerait si je reprends ton code:
Code:

  $RequeteWQL="Select * from __InstanceOperationEvent within 1 where TargetInstance ISA 'CIM_DataFile' and  TargetInstance.name='c:\\temp\\test.txt'" $Requeteur= new-object Management.WQLEventQuery($RequeteWQL) $Surveillant=new-object Management.ManagementEventWatcher $Requeteur $options = new-object system.management.EventWatcherOptions $options.TimeOut = [timespan]::FromSeconds(2) $Surveillant.options $options $Resultat=$Surveillant.WaitForNextEvent() $Resultat.TargetInstance




Malheureusement je viens de me souvenir que WMI permet de trapper ce type d'événement mais pas l'utilisateur le déclenchant.
Et la classe FileSystemWatcher ne porte pas non plus cette infos.


C'est justement la raison pour laquelle je préconisais à Franconero d'activer l'audit NTFS des fichiers et à coder un script qui surveillerait (avec les evènements WMI) le journal d'audit sur un numéro d'event particulier.

Pour le tuto je dois le mettre à jour, pour info j'en prépare un sur la signature de script.

Si tu le souhaites, nous pourrons ajouter ton tuto sur la signature des scripts dans notre rubrique "Tutoriaux". C'est d'ailleurs l'ambition de ce site : que chacun puisse apporter sa pierre afin de faire gagner à tous un temps précieux dans les tâches quotidiennes.

Que la force soit avec toi...
Arnaud
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1319
graphgraph
Karma: 45  
Re:LastAccessTime "par qui"? - 17/04/07 21:52 Chose promise, chose due. Je viens de publier le script qui permet de monitorer la création de fichiers dans un répertoire.

Il s'agit juste d'un exemple pour illuster le monitoring WMI en PowerShell. Ca ne résouds pas le problème de Franconero mais ça va le mettre sur la voie pour détecter l'arrivée d'un évènement d'audit dans le journal.

L'exemple est ici : http://powershell-scripting.com/index.php?option=com_content&task=view&id=129&Itemid=71

Allez Franck on compte sur toi...

@++

Arnaud

Message édité par: Arnaud, à: 17/04/07 22:52
MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
franconero
Utilisateur

PowerShelleur Débutant
Messages: 11
graphgraph
Karma: 1  
Re:LastAccessTime "par qui"? - 18/04/07 17:50 hello tous

Moi qui ai quelques petits problêmes de santé en ce moment "d'ou le retard de ma réponse" Je vois que vous prenez soins de moi En tous cas dés que je sort sans soucis de ce C.... de lit, je me jette corp et âme dans le sable mouvant ci-dessus

@@@@+++++ et encore merci.

Message édité par: franconero, à: 18/04/07 18:51
  | | L'administrateur a désactivé l'accés public en écriture.
Laurent Dardenne
Utilisateur

PowerShelleur Platinum
Messages: 5724
graph
Karma: 209  
Re:LastAccessTime - 18/04/07 20:05 franconero écrit:

Moi qui ai quelques petits problêmes de santé en ce moment

Prompt rétablissement.
Tutoriels PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
Arnaud
Admin

Administrateur
Messages: 1319
graphgraph
Karma: 45  
Re:LastAccessTime - 18/04/07 20:13 Bon rétablissement Franconero, et donne nous vite de tes nouvelles !!! MVP PowerShell (depuis 2007)
Suivez moi sur Twitter !
  | | L'administrateur a désactivé l'accés public en écriture.
© 2020 PowerShell-Scripting.com