Question Get FileVersion services

Plus d'informations
il y a 7 mois 5 jours - il y a 7 mois 5 jours #31885 par Fellerson
Get FileVersion services a été créé par Fellerson
Bonjour,

je développe un script qui permet de remonter les services AMX* :
Get-WmiObject win32_service | ?{$_.DisplayName -like '*AMX*'} | select Name, DisplayName, State, PathName

Jusqu'ici facile, tous mes services remontent 
Name             DisplayName                           State   PathName                                                                                          
----             -----------                           -----   --------                                                                                          
asAlarmMonitor   AMX Alarm Monitor                     Running C:\Alarm\Services\AlarmMonitor\AlarmMonitorSvc.exe /startedbyscm:1C165E00-40E31203-ServiceForm    
asAlarmScheduler AMX Alarm Scheduler                   Running C:\Alarm\Services\AlarmScheduler\AlarmSchedulerSvc.exe /startedbyscm:6630F9DD-40E2B94F-ServiceForm
asATTWebService  AMX ATT Web Service                   Running "C:\Alarm\Services\ATTWebService\ATTWebServiceSvc.exe"                                            
asBackup         AMX Data Backup                       Running C:\Alarm\AlarmBackup\BackupSvc.exe /startedbyscm:E93F6D65-40E31557-ServiceForm                    
asESPANet        AMX ESPA Interface                    Running "C:\Alarm\Services\ESPA\ESPASvc.exe"                                                              
asIMC            AMX IMC - Interface Monitor Connector Running C:\Alarm\Services\IMC\IMCSvc.exe                                                                  
asLogCleaner     AMX Log Cleaner                       Running "C:\Alarm\Services\LogCleaner\LogCleanerSvc.exe"                                                  
asLTCNET         AMX LTC                               Running "C:\Alarm\Services\LTC\LTCSvc.exe"                                                                
asMailCourier    AMX E-Mail Courier                    Running C:\Alarm\Services\MailCourier\MailCourierSvc.exe /startedbyscm:32964717-40E386AA-ServiceForm      
asMailReaderNET  AMX Mail Reader (POP3) - NET          Running "C:\Alarm\Services\MailReader\MailReaderSvc.exe"                                                  
asModbusADAM6000 AMX Modbus Interface (ADAM6000)       Running "C:\Alarm\Services\ADAM6000\ModbusADAM6000Svc.exe"                                                
asProgWatch      AMX Progwatch                         Running "C:\Alarm\Services\ProgWatch\ProgWatchSvc.exe"                                                    
asProgWatchGuard AMX Prog Watch Guardian               Running C:\Alarm\Services\ProgWatch\ProgWatchGuardSvc.exe                                                 
asRtxDect        AMX RTX Courier                       Running "C:\Alarm\Services\Snom\SnomSvc.exe"                                                              
asSafeGuard      AMX Safe Guard                        Running "C:\Alarm\Services\SafeGuard\SafeGuardSvc.exe"                                                    
asSMSAlarm365    AMX SMS Courier (Alarm365)            Running "C:\Alarm\Services\SMS-Alarm365\Alarm365SMSPagerSvc.exe"                                          
asVETTS          AMX Text to Speech (VE)               Stopped "C:\Alarm\Services\TTS\VETTSSvc.exe"                                                              
asWSM            AMX Web Service Manager               Running C:\Alarm\Services\WSM\WSMSvc.exe

Maintenant mon hic, c'est que j'aimerais récupérer du PathName pour chaque .exe le FileVersion, avec une boucle, et ajouter à ma liste une nouvelle colonne avec celui-ci. J'ai fait un truc comme ça mais pour l'instant sans succès :
Get-WmiObject win32_service | ?{$_.DisplayName -like '*AMX*'} | select Name, DisplayName, State, PathName | Foreach-Object {
    $version = (Get-Item $_.PathName).VersionInfo.FileVersion

}

Comme vous voyez dans la liste certain PathName sont entre guillemets et d'autres pas, certains .exe ont une option /start derrière il faudrait donc arrêter la chaîne au .exe 

Mes essais en sont à quelque chose comme ça, j'ai mis le Get-WmiObject dans un $Services 
foreach($s in $Services) { $sExe = $s.PathName $sExe.Substring(0, $s.IndexOf(' ')) $s | Add-Member -membertype NoteProperty -name 'Version' -value (Get-Item $sExe).VersionInfo.FileVersion } $s

cependant j'obtiens quelques erreurs
Merci pour l'aide.
Dernière édition: il y a 7 mois 5 jours par Fellerson.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 mois 2 jours #31920 par Philippe
Réponse de Philippe sur le sujet Get FileVersion services
salut Fellerson

je me suis basé sur ton premier code qui fonctionne bien avec la notion d'objet personnalisé dans select-objet
un petit decoupage(split) du chemin avec son nom de fichier
et bien sur comme tu l'as signalé la suppression des guillemet
j'ai reussi a faire ça qui semble fonctionner :
Get-WmiObject win32_service | where {$_.DisplayName -like '*AMX*'} | select Name, DisplayName, State, PathName, `
   @{label='Version'; expression={(Get-Item  "$(Split-Path -Path $_.PathName)\$($_.PathName.Split('\')[-1].Split(' -')[0])".Replace('"', '')).VersionInfo.FileVersion}}
 

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 mois 9 heures #31925 par ericlm128
Réponse de ericlm128 sur le sujet Get FileVersion services
Salut,

@Philippe
Ta méthode n'as pas résolu correctement le "chemin" de mon service : C:\WINDOWS\system32\dllhost.exe /Processid:{02D4B3F1-FD88-11D1-960D-00805FC79235}

Je propose ceci (je vous l'accorde ce n'est pas très jolie )
Get-WmiObject win32_service | Select-Object Name, DisplayName, State, PathName, @{label='Version'; expression={
    $PathName = $_.PathName
    if ($PathName[0] -eq '"' -and (($idx = $PathName.IndexOf('"', 1)) -ne -1))
    {
        $PathName = $PathName.Substring(1, $idx - 1)
    }
    elseif(($idx = $PathName.IndexOf(' ')) -ne -1)
    {
        $PathName = $PathName.Substring(0, $idx)
    }
    (Get-Item -LiteralPath $PathName -ErrorAction SilentlyContinue).VersionInfo.FileVersion
}}

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.065 secondes
Propulsé par Kunena