Question
Server 2003 list Add/rem Program
- Spama
- Auteur du sujet
- Visiteur
-
il y a 13 ans 5 mois #13199
par Spama
Server 2003 list Add/rem Program a été créé par Spama
Bonjour tout le monde,
Le but de la manip est de récupérer la version d'un programme installé sur une machine distante.
Alors avec un serveur 2008 pas de soucis,
il suffit de faire appel à la class WIN32_Product du cmdlet Get-WMIObject.
Le soucis c'est que cette classe n'existe pas sur l'oS server 2003..
Je me résouds donc à attaque la base de registre à distance avec d'autres moyens. Je vais aller chercher les clés présentes dans \"HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" et trier l'affichage sur la valeur DisplayName.
Comme :
[code:1]foreach ($server in $servers){
$app= ( dir \"HKLM:«»SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" | % { get-itemproperty $_.pspath } | where {$_.DisplayName -eq \"Symantec Scan Engine\"})
Write-host $server \" Scan engine version :\" $app.DisplayVersion
} [/code:1]
Le problème c'est que faire un DIR à distance c'est pas facile. j'essaye donc le code suivant :
[code:1]foreach ($srv in Get-Content $ServerFile)
{
Write-Host \"********************************************\"
Write-Host \"Server Name:\" + $srv
$type = \"LocalMachine\"
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$srv)
$regkey=$reg.OpenSubKey(HKLM:«»SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall)
# $sav=$regkey.getvalue(\"Symantec Scan Engine\"«»)
$srv + \";\" + $sav |Out-File -append $OutputFile
Write-host $srv + \";\" + $sav
}[/code:1]
mais impossible de faire l'équivalent du 1er exemple, en fait il m'est même impossible de récupérer le contenu de la clé registre HKML:Software....\Uninstall
Bien sur j'ai essayé différentes commandes a la place de [code:1]$sav=$regkey.getvalue(\"Symantec Scan Engine\"«»)[/code:1] ainsi que pour la variable $regkey... (commandes trouvées avec un get-member )
Auriez vous une idée de comment procéder ?
merki !
Le but de la manip est de récupérer la version d'un programme installé sur une machine distante.
Alors avec un serveur 2008 pas de soucis,
il suffit de faire appel à la class WIN32_Product du cmdlet Get-WMIObject.
Le soucis c'est que cette classe n'existe pas sur l'oS server 2003..
Je me résouds donc à attaque la base de registre à distance avec d'autres moyens. Je vais aller chercher les clés présentes dans \"HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" et trier l'affichage sur la valeur DisplayName.
Comme :
[code:1]foreach ($server in $servers){
$app= ( dir \"HKLM:«»SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" | % { get-itemproperty $_.pspath } | where {$_.DisplayName -eq \"Symantec Scan Engine\"})
Write-host $server \" Scan engine version :\" $app.DisplayVersion
} [/code:1]
Le problème c'est que faire un DIR à distance c'est pas facile. j'essaye donc le code suivant :
[code:1]foreach ($srv in Get-Content $ServerFile)
{
Write-Host \"********************************************\"
Write-Host \"Server Name:\" + $srv
$type = \"LocalMachine\"
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$srv)
$regkey=$reg.OpenSubKey(HKLM:«»SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall)
# $sav=$regkey.getvalue(\"Symantec Scan Engine\"«»)
$srv + \";\" + $sav |Out-File -append $OutputFile
Write-host $srv + \";\" + $sav
}[/code:1]
mais impossible de faire l'équivalent du 1er exemple, en fait il m'est même impossible de récupérer le contenu de la clé registre HKML:Software....\Uninstall
Bien sur j'ai essayé différentes commandes a la place de [code:1]$sav=$regkey.getvalue(\"Symantec Scan Engine\"«»)[/code:1] ainsi que pour la variable $regkey... (commandes trouvées avec un get-member )
Auriez vous une idée de comment procéder ?
merki !
Connexion ou Créer un compte pour participer à la conversation.
- SiSMik
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 492
- Remerciements reçus 0
il y a 13 ans 5 mois #13201
par SiSMik
Réponse de SiSMik sur le sujet Re:Server 2003 list Add/rem Program
Salut,
Tu as quelle version de Powershell installé sur tes servers ?
Tu as quelle version de Powershell installé sur tes servers ?
Connexion ou Créer un compte pour participer à la conversation.
- Spama
- Auteur du sujet
- Visiteur
-
il y a 13 ans 5 mois #13202
par Spama
Réponse de Spama sur le sujet Re:Server 2003 list Add/rem Program
La version 2 , sur les 2K3 comme sur les 2K8
Connexion ou Créer un compte pour participer à la conversation.
- SiSMik
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 492
- Remerciements reçus 0
il y a 13 ans 5 mois #13203
par SiSMik
Réponse de SiSMik sur le sujet Re:Server 2003 list Add/rem Program
Ok, c'est nickel, dans ce cas, tu peux utiliser les fonctionnalités de remoting.
Des explications ici
Des explications ici
Connexion ou Créer un compte pour participer à la conversation.
- Spama
- Auteur du sujet
- Visiteur
-
il y a 13 ans 5 mois #13204
par Spama
Réponse de Spama sur le sujet Re:Server 2003 list Add/rem Program
Pour ceux que ca interesse, j'ai trouvé une solution, peut etre pas tres jolie mais ça marche.
Ca fait un petit moment que je suis dessus et le fait de l'avoir posté sur le forum, m'a ouvert un peu plus les yeux.
Pour lire la clé de registre a distance il faut d'abord la stocker dans une variable
[code:1]$reg_apps = get-childitem \"HKLM:«»SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"[/code:1]
Ensuite, pour aller lire les infos sur des serveurs distants, serveurs dont les noms sont stocvkés dans un fichier
[code:1]foreach ($srv in Get-Content $ServerFile)
{
Write-Host \"********************************************\"
Write-Host \"Server Name:\" + $srv
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$srv)
#la ligne suivante va enregistrer dans la variable toutes les informations concernant l'application spécifiée
$regkey= ($reg_apps | % { get-itemproperty $_.pspath } | where {$_.DisplayName -eq \"Symantec Scan Engine\"})
#$sav=$regkey.getvalue(\"Symantec Scan Engine\"«»)
#$srv + \";\" + $sav |Out-File -append $OutputFile
Write-host $srv + \";\" + $regkey.DisplayVersion
}[/code:1]
Il faut travailler la sortie d'affichage, là c'est un peu brouillon. Faut que je m'y mette.
Pour cloturer ce topic, je poste lle script complet pour ceux que ca interesse.
Actions :
Il va aller chercher tous les objets COMPUTEr dans une OU précise
Il va stocker tous les noms de serveur dans un fichier au format CSV
Il va ensuite aller chercher l'information voulue dans la base de registre du serveur distant (ici la version du logiciel Scan engine de Symantec
le resultat sera le nom du serveur et la version du logiciel
[code:1]
#Récupération des serveurs dans une OU spécifique et enregistrement dans un fichier CSV
$strCategory = \"computer\"
$objDomain = New-Object System.DirectoryServices.DirectoryEntry(\"LDAP://OU=etc...,OU=3memeNiveau,OU=2eme niveau,OU=1erniveau, DC=microsoft,DC=com\"«»)
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.Filter = (\"(objectCategory=$strCategory)\"«»)
$colProplist = \"name\"
foreach ($i in $colPropList){
$objSearcher.PropertiesToLoad.Add($i)
}
$colResults = $objSearcher.FindAll()
Write-Host \"Store all Servernames in a file...\"
foreach ($objResult in $colResults){
$objComputer = $objResult.Properties; $objComputer.name >> $ServerFile
}
Write-Host \"Retrieving Scan Engine Version : \"
\"ServerName\" + \";\" + \"Version of Scan Engine \" >> $OutputFile
foreach ($srv in Get-Content $ServerFile)
{
Write-Host \"********************************************\"
Write-Host \"Server Name:\" + $srv
$type = \"LocalMachine\"
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($type,$srv)
$regkey= ($a | % { get-itemproperty $_.pspath } | where {$_.DisplayName -eq \"Symantec Scan Engine\"})
#$sav=$regkey.getvalue(\"Symantec Scan Engine\"«»)
#$srv + \";\" + $sav |Out-File -append $OutputFile
Write-host \"Serveur name\" : $srv + \"Scan Engin Version : \" + $regkey.DisplayVersion
}
[/code:1]<br><br>Message édité par: Spama, à: 4/12/12 16:53
Ca fait un petit moment que je suis dessus et le fait de l'avoir posté sur le forum, m'a ouvert un peu plus les yeux.
Pour lire la clé de registre a distance il faut d'abord la stocker dans une variable
[code:1]$reg_apps = get-childitem \"HKLM:«»SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"[/code:1]
Ensuite, pour aller lire les infos sur des serveurs distants, serveurs dont les noms sont stocvkés dans un fichier
[code:1]foreach ($srv in Get-Content $ServerFile)
{
Write-Host \"********************************************\"
Write-Host \"Server Name:\" + $srv
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$srv)
#la ligne suivante va enregistrer dans la variable toutes les informations concernant l'application spécifiée
$regkey= ($reg_apps | % { get-itemproperty $_.pspath } | where {$_.DisplayName -eq \"Symantec Scan Engine\"})
#$sav=$regkey.getvalue(\"Symantec Scan Engine\"«»)
#$srv + \";\" + $sav |Out-File -append $OutputFile
Write-host $srv + \";\" + $regkey.DisplayVersion
}[/code:1]
Il faut travailler la sortie d'affichage, là c'est un peu brouillon. Faut que je m'y mette.
Pour cloturer ce topic, je poste lle script complet pour ceux que ca interesse.
Actions :
[code:1]
#Récupération des serveurs dans une OU spécifique et enregistrement dans un fichier CSV
$strCategory = \"computer\"
$objDomain = New-Object System.DirectoryServices.DirectoryEntry(\"LDAP://OU=etc...,OU=3memeNiveau,OU=2eme niveau,OU=1erniveau, DC=microsoft,DC=com\"«»)
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.Filter = (\"(objectCategory=$strCategory)\"«»)
$colProplist = \"name\"
foreach ($i in $colPropList){
$objSearcher.PropertiesToLoad.Add($i)
}
$colResults = $objSearcher.FindAll()
Write-Host \"Store all Servernames in a file...\"
foreach ($objResult in $colResults){
$objComputer = $objResult.Properties; $objComputer.name >> $ServerFile
}
Write-Host \"Retrieving Scan Engine Version : \"
\"ServerName\" + \";\" + \"Version of Scan Engine \" >> $OutputFile
foreach ($srv in Get-Content $ServerFile)
{
Write-Host \"********************************************\"
Write-Host \"Server Name:\" + $srv
$type = \"LocalMachine\"
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($type,$srv)
$regkey= ($a | % { get-itemproperty $_.pspath } | where {$_.DisplayName -eq \"Symantec Scan Engine\"})
#$sav=$regkey.getvalue(\"Symantec Scan Engine\"«»)
#$srv + \";\" + $sav |Out-File -append $OutputFile
Write-host \"Serveur name\" : $srv + \"Scan Engin Version : \" + $regkey.DisplayVersion
}
[/code:1]<br><br>Message édité par: Spama, à: 4/12/12 16:53
Connexion ou Créer un compte pour participer à la conversation.
- Spama
- Auteur du sujet
- Visiteur
-
il y a 13 ans 5 mois #13205
par Spama
Réponse de Spama sur le sujet Re:Server 2003 list Add/rem Program
benduru écrit:
Merci je vais aller voir ça
Ok, c'est nickel, dans ce cas, tu peux utiliser les fonctionnalités de remoting.
Des explications ici
Merci je vais aller voir ça
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.044 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Server 2003 list Add/rem Program