Question
Variable fichier .inf
- LePatriot
- Auteur du sujet
- Hors Ligne
- Membre junior
- Messages : 31
- Remerciements reçus 0
Je cherche à récupérer des variables dans les fichiers inf. ClassGUID, DriverVer, Class, et la platform (x86 ou x64 si possible).
Y-a t'il une façon de les récupérer facilement en powershell ou il faut lire ligne par ligne?
Merci!
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
il faut une fonction spécialisée qui analyse la structure.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- LePatriot
- Auteur du sujet
- Hors Ligne
- Membre junior
- Messages : 31
- Remerciements reçus 0
Quelqu'un saurait comment on peut récupérer l'information pour savoir si le pilote est pour x86, x64 ou les 2? Du même genre que MDT.
J'ai cru lire sur Internet que nous pourrions le savoir en regardant dans Manufacturer, mais je ne sais pas comment récupérer cette information.
[Manufacturer]
%AMD%=AMD,NTx86.6.2,NTx86.6.0
Je sais que l'info est du x86 mais j'obtiens: System.Collections.DictionaryEntry
Je voudrais faire une match dans cette collection mais je ne comprend pas comment le faire.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
Il nous faut le code et un exemple de fichier .ini que tu utilises.mais je ne comprend pas comment le faire.
Là, le lecteur est dans la même impasse
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- LePatriot
- Auteur du sujet
- Hors Ligne
- Membre junior
- Messages : 31
- Remerciements reçus 0
function Parse-IniFile
{
[CmdletBinding()]
Param
(
[Parameter(mandatory=$true,ValueFromPipeline=$true)]
[Alias(\"Fichier\"«»)]
[string]$fic
)
begin {}
Process
{
$ini = @{}
switch -regex -file $fic
{
\"^\[(.+)\]$\"
{
$section = $matches[1]
$ini[$section] = @{}
}
\"(.+)=(.+)\"
{
$name,$value = $matches[1..2]
$ini[$section][$name] = $value
}
}
return $ini
}
end {}
}
$file = \"c:\fichier.inf\"
$result = Parse-IniFile \"$file\"
$ClassINF = $result.version.class
$ClassGUID = $result.version.ClassGUID
$platform = $result.manufacturer
[/code:1]
Voici une parti du INF:
;
; Copyright (c) 2008-2012 AMD
;
[Version]
Signature=\"$Windows NT$\"
Provider=%AMD%
Class=HDC
ClassGUID={4d36e96a-e325-11ce-bfc1-08002be10318}
DriverVer=09/02/2012,1.3.001.0048
CatalogFile=amd_sata.cat
;- Files ---
[SourceDisksNames]
1 = %DiskId%,,,
[SourceDisksFiles]
amd_sata.sys = 1
amd_xata.sys = 1
[DestinationDirs]
DefaultDestDir = 12
;- PNP ---
[Manufacturer]
%AMD% = AMD,NTx86.6.2
[AMD.NTx86.6.2]
%AMDSATA.DeviceDesc% = amd_sata_inst, PCI\VEN_1002&DEV_4391&CC_0106
%AMDSATA.DeviceDesc% = amd_sata_inst, PCI\VEN_1002&DEV_4394&CC_0106
%AMDSATA.DeviceDesc% = amd_sata_inst, PCI\VEN_1022&DEV_7801&CC_0106
%AMDSATA.DeviceDesc% = amd_sata_inst, PCI\VEN_1022&DEV_7804&CC_0106
Je dois récupérer ce qu'il y à dans Version et dans Manufacturer. Version ça va mais Manufacturer je n'obtient que System.Collections.DictionaryEntry
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
Ensuite $result.manufacturer renvoie une hashtable:
[code:1]
$Result.Manufacturer.'%AMD%'
#AMD,NTx86.6.2
[/code:1]
Pour extraire les informations il faut une regex qui suit les spécifications de INF Manufacturer Section .
A partir de ton exemple :
[code:1][Manufacturer]
%AMD% = AMD,NTx86.6.2
[AMD.NTx86.6.2]
%AMDSATA.DeviceDesc% = amd_sata_inst, PCIVEN_1002&DEV_4391&CC_0106
$regexINfArchitecture='^(?<ManufacturerName>.*?),nt(?<Architecture>.*?)\.(?<OSMajorVersion>.*?)\.(?<OSMinorVersion>.*?)((\.(?<ProductType>.*?))?(\.(?<SuiteMask>.*?))?)$'
$Manufacturer='AMD,NTx86.6.2'
$Manufacturer -match $regexINfArchitecture
$Matches
$Matches.Architecture
#x86
#Tests de la regex
# rv matches
# $Manufacturer='AMD,NTx86.6.2.5'
# $Manufacturer -match $regexINfArchitecture
# $Matches
#
# rv matches
# $Manufacturer='AMD,NTx86.6.2.5.9'
# $Manufacturer -match $regexINfArchitecture
# $Matches
#
#
# rv matches
# $Manufacturer='AMD,NTx86.6.2.0x0000001'
# $Manufacturer -match $regexINfArchitecture
# $Matches
#
# rv matches
# $Manufacturer='AMD,NTx86.6.2.0x0000001.0x00000002'
# $Manufacturer -match $regexINfArchitecture
# $Matches
[/code:1]
On peut aussi utiliser ceci pour créer un objet à partir de la string contenue dans $Result.Manufacturer.'%AMD%' :
[code:1]
$INfArchitecture=@{
TypeName='INF.Architecture'
Regex='^(?<ManufacturerName>.*?),nt(?<Architecture>.*?)\.(?<OSMajorVersion>.*?)\.(?<OSMinorVersion>.*?)((\.(?<ProductType>.*?))?(\.(?<SuiteMask>.*?))?)$'
Keys=0,1,2,3,4
}
$Manufacturer='AMD,NTx86.6.2'
$o=New-MatchesObject $Manufacturer @INfArchitecture
$o|gm
$O
# Architecture : x86
# ManufacturerName : AMD
# OSMajorVersion : 6
# OSMinorVersion : 2
[/code:1]
Avec une limite : les captures nommées optionnelles ?<ProductType> et ?<SuiteMask> si elles n'existent pas n'ont pas de correspondance dans l'objet généré.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Variable fichier .inf