Page 1 sur 1

[RESOLU] Création d'un paquet permettant de rechercher un fichier sur les postes

Publié : 07 févr. 2024 - 17:08
par alex_30
Bonjour à tous,

La version de mon serveur WAPT est WAPT Server 2.4.0.14143 Edition Entreprise sous Windows Server 2019 Standard.
Je créé les paquet depuis mon poste sous Microsoft Windows 11 Professionnel Version 10.0.22631 Build 22631 avec WAPT Agent en V2.4.0.14143-4

Je m'excuse par avance si la question a déjà été posée, mais je n'ai pas trouvé de paquet sur le store ou d'information sur le forum.

Je souhaite créer un paquet me permettant de trouver si un fichier existe sur les postes.

J'ai tenté le code suivant :

Code : Tout sélectionner

# -*- coding: utf-8 -*-
from setuphelpers import *

def install():
    for fn in find_all_files('c:\\','*nomdufichier'):
            print(fn)
Mais le paquet est en erreur dès qu'il y a des permissions refusées, je n'arrive pas à exclure non plus c'est chemins :

Code : Tout sélectionner

File "C:\Program Files (x86)\wapt\common.py", line 4083, in install_wapt
    exitstatus = setup.install()
  File "C:\windows\TEMP\wapt4h6awkg2\setup.py", line 6, in install
  File "C:\Program Files (x86)\wapt\waptutils.py", line 1403, in find_all_files
    for f in do_find_all_files(rootdir):
  File "C:\Program Files (x86)\wapt\waptutils.py", line 1384, in do_find_all_files
    for fn in do_find_all_files(full_fn):
  File "C:\Program Files (x86)\wapt\waptutils.py", line 1384, in do_find_all_files
    for fn in do_find_all_files(full_fn):
  File "C:\Program Files (x86)\wapt\waptutils.py", line 1384, in do_find_all_files
    for fn in do_find_all_files(full_fn):
  [Previous line repeated 1 more time]
  File "C:\Program Files (x86)\wapt\waptutils.py", line 1379, in do_find_all_files
    for fn in os.listdir(absolute_rootdir):
PermissionError: [WinError 5] Accès refusé: 'c:\\users\\admaz\\AppData\\Local\\Application Data'

13 : Accès refusé

Pouvez-vous m'assister ?

Eventuellement il faudrait que je vois pour une fonction d'audit mais je n'ai pas encore utilisé cette partie.
La plupart du temps on utilise les paquets du store.

En vous remerciant.

Re: Création d'un paquet permettant de rechercher un fichier sur les postes

Publié : 08 févr. 2024 - 12:41
par dcardon
Bonjour Alexandre,

deux choses :

* pour le problème de droit, si vous avez lancé la commande dans PyScripter, c'est normal d'avoir des access denied, Administrator n'est pas pas root, il est juste "sudoer" et n'a pas accès par défaut à tous les répertoires. Vous pouvez essayer de le lancer en compte LOCAL SYSTEM si ça correspond mieux

* pour filter les répertoires, vous pouvez utiliser des fonctions plus génériques de python comme os.walk ou glob.glob. Les fonctions setuphelpers essaye d'être facile d'utilisation et donc n'a pas toutes les options possibles.

Cordialement,

Dneis

Re: Création d'un paquet permettant de rechercher un fichier sur les postes

Publié : 13 févr. 2024 - 13:39
par alex_30
Merci pour le retour.

Pour le premier point la commande n'était pas lancée par le PyScripter.

Les erreurs étaient lors de l'installation du paquet.

Au final j'ai réussi avec pathlib voici le code :

Code : Tout sélectionner

# -*- coding: utf-8 -*-
from setuphelpers import *
import pathlib

def install():
    pass

def audit():
    #Emplacement de la recherche
    fileDir = r'C:\\'
    #Partie du nom de fichier à rechercher
    fileExt = r"**\*nomdufichier*"
    liste_fichiers = list(pathlib.Path(fileDir).glob(fileExt))
    if liste_fichiers:
        print('Fichiers trouvés: %s ' %liste_fichiers)
        return 'WARNING'
    print('Aucun fichiers trouvés')
    return 'OK'

Re: Création d'un paquet permettant de rechercher un fichier sur les postes

Publié : 13 févr. 2024 - 14:00
par alex_30
Le but était de pouvoir rechercher des fichiers sur les postes.

Plus précisément des applis portables qui ne remonteraient pas dans l'inventaire. Et souvent non mise à jour, donc potentiellement vulnérables

Le code précédent fonctionne mais j'aurais aimé l'optimiser en remontant aussi la version du fichier .exe

Voici ce que j'ai testé :

Code : Tout sélectionner

# -*- coding: utf-8 -*-
from setuphelpers import *
import pathlib
import win32api

def install():
    pass

def audit():
    fileDir = r'C:\\'
    fileExt = r"**\*nomdufichier*"
    liste_fichiers = list(pathlib.Path(fileDir).glob(fileExt))
    for fname in liste_fichiers:
        properties= getFileProperties(fname)
        print('properties =  %s ' %properties)
        print('Fichiers trouvés: %s propriétés %s' %(fname , properties))
    if liste_fichiers:
        print('Fichiers trouvés: %s ' %liste_fichiers)
        return 'WARNING'
    print('Aucun fichiers trouvés')
    return 'OK'



#==============================================================================
def getFileProperties(fname):
#==============================================================================
    """
    Read all properties of the given file return them as a dictionary.
    """
    propNames = ('Comments', 'InternalName', 'ProductName',
        'CompanyName', 'LegalCopyright', 'ProductVersion',
        'FileDescription', 'LegalTrademarks', 'PrivateBuild',
        'FileVersion', 'OriginalFilename', 'SpecialBuild')

    props = {'FixedFileInfo': None, 'StringFileInfo': None, 'FileVersion': None}

    try:
        # backslash as parm returns dictionary of numeric info corresponding to VS_FIXEDFILEINFO struc
        fixedInfo = win32api.GetFileVersionInfo(fname, '\\')
        props['FixedFileInfo'] = fixedInfo
        props['FileVersion'] = "%d.%d.%d.%d" % (fixedInfo['FileVersionMS'] / 65536,
                fixedInfo['FileVersionMS'] % 65536, fixedInfo['FileVersionLS'] / 65536,
                fixedInfo['FileVersionLS'] % 65536)

        # \VarFileInfo\Translation returns list of available (language, codepage)
        # pairs that can be used to retreive string info. We are using only the first pair.
        lang, codepage = win32api.GetFileVersionInfo(fname, '\\VarFileInfo\\Translation')[0]

        # any other must be of the form \StringfileInfo\%04X%04X\parm_name, middle
        # two are language/codepage pair returned from above

        strInfo = {}
        for propName in propNames:
            strInfoPath = u'\\StringFileInfo\\%04X%04X\\%s' % (lang, codepage, propName)
            ## print str_info
            strInfo[propName] = win32api.GetFileVersionInfo(fname, strInfoPath)

        props['StringFileInfo'] = strInfo
    except:
        pass

    return props
La boucle for aurait du être sous le if mais c'était pour le debug
Au final je n'ai pas réussi à utiliser la fonction def getFileProperties(fname):
trouver sur : https://stackoverflow.com/questions/580 ... on-windows

Voici le résultat :

Code : Tout sélectionner

Auditing XXX-searchfile
properties =  {'FixedFileInfo': None, 'StringFileInfo': None, 'FileVersion': None} 
Fichiers trouvés: C:\Users\user1\AppData\Roaming\AnyDesk propriétés {'FixedFileInfo': None, 'StringFileInfo': None, 'FileVersion': None}
properties =  {'FixedFileInfo': None, 'StringFileInfo': None, 'FileVersion': None} 
Fichiers trouvés: C:\Users\user1\Downloads\AnyDesk.exe propriétés {'FixedFileInfo': None, 'StringFileInfo': None, 'FileVersion': None}
properties =  {'FixedFileInfo': None, 'StringFileInfo': None, 'FileVersion': None} 
Fichiers trouvés: C:\Users\user1\Pictures\AnyDesk propriétés {'FixedFileInfo': None, 'StringFileInfo': None, 'FileVersion': None}
properties =  {'FixedFileInfo': None, 'StringFileInfo': None, 'FileVersion': None} 
Fichiers trouvés: C:\Windows\Prefetch\ANYDESK.EXE-0A8BB3A0.pf propriétés {'FixedFileInfo': None, 'StringFileInfo': None, 'FileVersion': None}
Fichiers trouvés: [WindowsPath('C:/Users/user1/AppData/Roaming/AnyDesk'), WindowsPath('C:/Users/user1/Downloads/AnyDesk.exe'), WindowsPath('C:/Users/user1/Pictures/AnyDesk'), WindowsPath('C:/Windows/Prefetch/ANYDESK.EXE-0A8BB3A0.pf')] 
Si quelqu'un peut pouvez m'aider en optimisant le paquet afin d'avoir la version de l'exe, ce serait sympa.

Sinon je clôturerai le sujet.

En vous remerciant.

Re: Création d'un paquet permettant de rechercher un fichier sur les postes

Publié : 15 févr. 2024 - 16:57
par dcardon
Bonjour Alexandre,

est ce que vous avez essayé d'utiliser la fonction getfileproperties de setuphelpers?

Code : Tout sélectionner

>>> get_file_properties(r'c:\\program files (x86)\\wapt\wapt-get.exe')
{'Comments': '',
 'CompanyName': 'Tranquil IT',
 'FileDescription': 'Wapt line command tool',
 'FileVersion': '2.5.4.15337',
 'InternalName': '',
 'LegalCopyright': 'Tranquil IT 2012-2024',
 'LegalTrademarks': '',
 'OriginalFilename': '',
 'PrivateBuild': '',
 'ProductName': 'WAPT',
 'ProductVersion': '2.5.4',
 'SpecialBuild': ''}