IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Appel de ma méthode FileHash de l'objet WindowsInstaller.Installer


Sujet :

Scripts/Batch

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 110
    Par défaut Appel de ma méthode FileHash de l'objet WindowsInstaller.Installer
    Bonjour à tous,

    J'ai un script vbs que je voudrais convertir en Powershell.

    Je n'arrive pas à trouver le code correspondant en PowerShell:
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Installer : Set Installer = CreateObject("WindowsInstaller.Installer")
    Dim Record : Set Record = Installer.FileHash(FilePath, 0)
    Dim FileHash : FileHash = Record.StringData(1) & vbTab & Record.StringData(2) & vbTab & Record.StringData(3) & vbTab & Record.StringData(4)

    La variable FilePath est initialisée avec le nom du fichier(avec le chemin) à traiter.

    Est-ce que quelqu'un sait comment invoquer la méthode FileHash de l'objet WindowsInstaller.Installer et récupérer les 4 enregistrements ?

    Merci d'avance.

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Hi,

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $filePath = "c:\test\file.txt"
    $installer = New-Object -ComObject WindowsInstaller.Installer
    $record = $installer.FileHash($filePath, 0)
    $fileHash = $record.StringData(1) + "`t"+ $record.StringData(2) + "`t"+ $record.StringData(3) + "`t"+ $record.StringData(4)

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 110
    Par défaut
    Hi,

    Sorry but I got an error :
    I changed $filePath = "G:\DIVERS\MIG_ORCA\MIG_ORCA.docx".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Method invocation failed because [System.__ComObject] does not contain a method named 'FileHash'.
    At G:\DIVERS\MIG_ORCA\test.ps1:3 char:1
    + $record = $installer.FileHash($filePath, 0)
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : MethodNotFound
     
    You cannot call a method on a null-valued expression.
    At G:\DIVERS\MIG_ORCA\test.ps1:4 char:1
    + $fileHash = $record.StringData(1) + "`t"+ $record.StringData(2) + "`t"+ $record. ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : InvokeMethodOnNull

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    C'est étrange.
    Le code fonctionne sur mon Windows 10, quelle est ton OS ?

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 110
    Par défaut
    Ce script est sur un Windows 2008 r2.

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Sur mon poste, si je fait un msiexec j'ai cette version de Windows Installer : Windows ® Installer version 5.0.19041.1


    Voici ce qui est dit sur le site de Microsoft pour méthode FileHash de Windows Installer (section Configuration requise) : https://docs.microsoft.com/fr-fr/win...h#requirements
    Windows Installer 5.0 sur Windows Server 2012, Windows 8, Windows Server 2008 R2 ou Windows 7. Windows Installer 4.0 ou Windows Installer 4.5 sur Windows Server 2008 ou Windows Vista. programme d’installation Windows sur Windows Server 2003 ou Windows XP

    Merci de vérifier que tu as le prérequis.

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 110
    Par défaut
    Salut et merci pour ton aide.

    La version Windows ® Installer. V 5.0.7601.24535 est installée sur le PC.
    De plus le script .vbs fonctionne correctement sur ce poste.

    Voici les seules méthodes/propriétés disponibles de l'objet Installer :
    Nom : FileHash.jpg
Affichages : 255
Taille : 14,2 Ko

  8. #8
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Un objet com n'expose pas ses méthodes comme ceci. Aussi la liste affiché ne veux pas dire grand chose.
    Sur le même poste tu dispose bien de la méthode via le vbs c'est cela ?
    Ça me parais vraiment louche.

  9. #9
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Si tu test mon bout de script sur un poste Windows 10, tu arrive bien à le faire fonctionner ?
    Concernant le message d'erreur, il semble bien qu'il n'arrive pas à trouver l'objet com Windowsinstaller.
    Tu as quelle version de powershell ?
    Peut être que ma syntaxe est trop "moderne"...

  10. #10
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 110
    Par défaut
    Je te confirme que le script vbs fonctionne sur cette machine Windows 2008R2.
    La version Powershell de cette machine est la version 4.0.

    Effectivement ton script fonctionne sous W10.

    Il faut peut être utiliser une autre syntaxe avec la version PowerShell 4.0.

  11. #11
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Je n'ai pas ton environnement et je n'ai pas la réponse à ce dysfonctionnement.
    Tu peux essayer quelque syntaxe légèrement différente.

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $installer = New-Object -ComObject "WindowsInstaller.Installer"
    $installer = New-Object -Com WindowsInstaller.Installer

    Tu peux aussi vérifier si d'autre objet com fonctionne pour vérifier la syntaxe

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $WSH = New-Object -Com WScript.Shell
    $WSH.Run("Explorer.exe")

  12. #12
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 110
    Par défaut
    Bonjour,

    résultat des courses:
    pour les 2 syntaxes proposées aucune ne fonctionne.

    Pour le test explorer, cela fonctionne.

    En cherchant sur le net , j'ai vu que l'on pouvait appeler des méthodes d'objet Com comme ceci mais celà ne fonctionne pas :
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    $Installer.GetType().InvokeMember("FileHash", "InvokeMethod", $null, $installer, @(($filePath), 0))

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Method invocation failed because [System.__ComObject] does not contain a method named 'StringData'.
    At G:\DIVERS\MIG_ORCA\test.ps1:5 char:1
    + $fileHash = $record.StringData(1) + "`t"+ $record.StringData(2) + "`t"+ $record. ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : MethodNotFound

  13. #13
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Tu peux vérifier si WindowsInstaller est présent dans le registre

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # https://docs.microsoft.com/en-us/answers/questions/386716/powershell-list-of-object-comobject-names.html
    function Get-ProgId {
        param ($filter = '.')
        Get-ChildItem -Path 'REGISTRY::HKey_Classes_Root\clsid\*\progid' |
        foreach {if ($_.name -match '\\ProgID$') { $_.GetValue('') }} |
        Where-Object {$_ -match $filter}
    }
     
    Get-ProgId installer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WindowsInstaller.Message
    WindowsInstaller.Installer
    Workspace.Installer.1
    Microsoft.Update.Installer.1

  14. #14
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Je cherche un visualiseur d'object COM présent car malgré ce que tu dit je pense que l’objet COM WindowsInstaller n'est pas disponible.

    Sinon la je sèche sur ton problème, et je n'ai pas ce type d'OS pour enquêter. Si tu as un autre OS identique tu pourrais tester pour voir...

  15. #15
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    A si une autre idée, tu pourrais lancer le bout de code dans un processus 32 bits et un autre dans un processus 64 bits (Powershell ise, par exemple)
    Certain objet ne sont disponible que pour une architecture

    https://stackoverflow.com/questions/...008-r2-but-non

  16. #16
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 110
    Par défaut
    Bonjour,

    Voici le résultat du test:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WindowsInstaller.Message
    WindowsInstaller.Installer
    Microsoft.Update.Installer.1
    J'ai aussi lancé le test sous PowerShell(x86) mais j'ai la même erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Method invocation failed because [System.__ComObject] does not contain a method named 'FileHash'
    Maintenant , j'ai une solution en exécutant le script sous Windows 10.
    Donc encore merci pour ton aide , je laisse ce post actif si quelqu'un a une autre piste.

  17. #17
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/12/2010, 18h29
  2. Appeler des méthodes qui renvoient des objets
    Par ALeX850 dans le forum Langage
    Réponses: 4
    Dernier message: 27/03/2010, 00h49
  3. [JMX] Appel d'une méthode distante avec retour d'objet complexe
    Par hugo123 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 24/07/2009, 12h18
  4. Réponses: 7
    Dernier message: 30/08/2007, 14h17
  5. [POO] appel d'une méthode d'un autre fichier, le tout objet
    Par aaaaaaaa dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/07/2007, 18h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo