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

Questions about WAPT Packaging / Requêtes et aides autour des paquets Wapt.
Règles du forum
Règles du forum communautaire
* English support on www.reddit.com/r/wapt
* Le support communautaire en français se fait sur ce forum
* Merci de préfixer le titre du topic par [RESOLU] s'il est résolu.
* Merci de ne pas modifier un topic qui est taggé [RESOLU]. Ouvrez un nouveau topic en référençant l'ancien
* Préciser version de WAPT installée, version complète ET numéro de build (2.2.1.11957 / 2.2.2.12337 / etc.) AINSI QUE l'édition Enterprise / Discovery
* Les versions 1.8.2 et antérieures ne sont plus maintenues. Les seules questions acceptées vis à vis de la version 1.8.2 sont liés à la mise à jour vers une version supportée (2.1, 2.2, etc.)
* Préciser OS du serveur (Linux / Windows) et version (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019)
* Préciser OS de la machine d'administration/création des paquets et de la machine avec l'agent qui pose problème le cas échéant (Windows 7 / 10 / 11 / Debian 11 / etc.)
* Eviter de poser plusieurs questions lors de l'ouverture de topic, sinon il risque d'être ignorer. Si plusieurs sujet, ouvrir plusieurs topic, et de préférence les uns après les autres et pas tous en même temps (ie ne pas spammer le forum).
* Inclure directement les morceaux de code, les captures d'écran et autres images directement dans le post. Les liens vers les pastebin, les bitly et autres sites tierces seront systématiquement supprimés.
* Comme tout forum communautaire, le support est fait bénévolement par les membres. Si vous avez besoin d'un support commercial, vous pouvez contacter le service commercial Tranquil IT au 02.40.97.57.55
alex_30
Messages : 14
Inscription : 08 juil. 2020 - 17:33

07 févr. 2024 - 17:08

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.
Avatar de l’utilisateur
dcardon
Expert WAPT
Messages : 1412
Inscription : 18 juin 2014 - 09:58
Localisation : Saint Sébastien sur Loire
Contact :

08 févr. 2024 - 12:41

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
Denis Cardon - Tranquil IT
Communiquez autour de vous sur WAPT! Envoyez nous vos url de blog et d'articles dans la catégorie votre avis du forum, nous les mettrons en avant sur le site WAPT
alex_30
Messages : 14
Inscription : 08 juil. 2020 - 17:33

13 févr. 2024 - 13:39

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'
alex_30
Messages : 14
Inscription : 08 juil. 2020 - 17:33

13 févr. 2024 - 14:00

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.
Avatar de l’utilisateur
dcardon
Expert WAPT
Messages : 1412
Inscription : 18 juin 2014 - 09:58
Localisation : Saint Sébastien sur Loire
Contact :

15 févr. 2024 - 16:57

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': ''}
Denis Cardon - Tranquil IT
Communiquez autour de vous sur WAPT! Envoyez nous vos url de blog et d'articles dans la catégorie votre avis du forum, nous les mettrons en avant sur le site WAPT
Verrouillé