Página 1 de 1

[RESUELTO] Creación de un paquete que permite buscar un archivo en estaciones de trabajo

Publicado: 7 de febrero de 2024 - 17:08
por alex_30
Hola a todos,

Mi versión del servidor WAPT es WAPT Server 2.4.0.14143 Enterprise Edition bajo Windows Server 2019 Standard.
Creo los paquetes desde mi máquina con Microsoft Windows 11 Professional versión 10.0.22631 compilación 22631 con WAPT Agent versión 2.4.0.14143-4

Pido disculpas de antemano si esta pregunta ya se ha hecho, pero no pude encontrar ningún paquete en la tienda ni ninguna información en el foro.

Quiero crear un paquete que me permita saber si un archivo existe en las estaciones de trabajo.

Probé el siguiente código:

Código: Seleccionar todo

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

def install():
    for fn in find_all_files('c:\\','*nomdufichier'):
            print(fn)
Pero el paquete genera un error tan pronto como se deniegan los permisos; tampoco puedo excluir estas rutas:

Código: Seleccionar todo

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é

¿Puedes ayudarme?

Quizás necesite considerar una función de auditoría, pero aún no he utilizado esa parte.
La mayoría de las veces utilizamos los paquetes de la tienda.

Gracias.

Re: Creación de un paquete para buscar un archivo en estaciones de trabajo

Publicado: 8 de febrero de 2024 - 12:41
por dcardon
Hola Alexandre,

dos cosas:

* Respecto al problema de permisos, si ejecutaste el comando en PyScripter, es normal que aparezcan errores de "acceso denegado". El administrador no es root; solo tiene permisos de "sudo" y no tiene acceso predeterminado a todos los directorios. Puedes intentar ejecutarlo con la cuenta LOCAL SYSTEM si te resulta más conveniente.

* Para filtrar los directorios, puedes usar funciones de Python más genéricas como os.walk o glob.glob. Las funciones de setuphelper están diseñadas para ser fáciles de usar y, por lo tanto, no incluyen todas las opciones disponibles.

Saludos,

Dneis

Re: Creación de un paquete para buscar un archivo en estaciones de trabajo

Publicado: 13 de febrero de 2024 - 13:39
por alex_30
Gracias por tus comentarios.

Respecto al primer punto, el comando no fue lanzado por PyScripter.

Los errores ocurrieron durante la instalación del paquete.

Al final lo logré con pathlib; aquí está el código:

Código: Seleccionar todo

# -*- 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: Creación de un paquete para buscar un archivo en estaciones de trabajo

Publicado: 13 de febrero de 2024 - 14:00
por alex_30
El objetivo era poder buscar archivos en las estaciones de trabajo.

Más específicamente, aplicaciones móviles que no aparecen en el inventario y que, a menudo, no se actualizan, por lo que son potencialmente vulnerables

El código anterior funciona, pero me hubiera gustado optimizarlo actualizando también la versión del archivo .exe

Esto es lo que probé:

Código: Seleccionar todo

# -*- 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
El bucle for debería haber estado debajo de la declaración if, pero era para fines de depuración
Al final no pude utilizar la función def getFileProperties(fname):
Encontrar en: https://stackoverflow.com/questions/580 ... en Windows

Aquí está el resultado:

Código: Seleccionar todo

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 alguien pudiera ayudarme a optimizar el paquete para obtener la versión ejecutable, sería genial.

De lo contrario, cerraré el tema.

Gracias.

Re: Creación de un paquete para buscar un archivo en estaciones de trabajo

Publicado: 15 de febrero de 2024 - 16:57
por dcardon
Hola Alejandro,

¿Has intentado utilizar la función getfileproperties de setuphelpers?

Código: Seleccionar todo

>>> 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': ''}