Question
les bonnes quotes pour wmi -filter
- blanc
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 54
- Remerciements reçus 0
il y a 17 ans 5 mois #2959
par blanc
les bonnes quotes pour wmi -filter a été créé par blanc
bonjour,
Pour me faire la main, je tente de simuler \"ipconfig\".
J'utilise get-wmibject avec les 2 principales classes win32_Net...
Je voudrais énumérer les objets de la première classe pour lesquels IpEnabled = true. Puis les passer dans le pipeline pour lire l'objet de la seconde classe qui fournit les informations associées. Déjà en vbs, c'était pas facile. Je n'ai jamais rien compris à l'emploi de la classe de type \"associator\" Win32_NetworkAdapterSetting. Donc je voulais faire simple.
#énumérer les cartes ayant ipenabled
$AdaptersConf = (Get-WmiObject -namespace \"root/cimv2\" -class Win32_NetworkAdapterConfiguration) | Where-Object {$_.IPEnabled -eq 1}
#Lire des informations dans la seconde classe
#Et ca marche bien avec le where-object:
foreach ($AdapterConf in $AdaptersConf){
$Adapter=Get-WmiObject -namespace \"root/cimv2\" -class Win32_NetworkAdapter | where {$_.index -eq $AdapterConf.index}
#un affichage d'une propriété
Adapter.NetConnectionStatus
}
J'ai voulu tester le paramètre -filter de get-wmiobject mais je n'arrive pas à trouver la combinaison des quotes
foreach ($AdapterConf in $AdaptersConf){
$Adapter=Get-WmiObject -namespace \"root/cimv2\" -class Win32_NetworkAdapter -filter \"index=$AdapterConf.index\" <
quel formalisme?
Adapter.NetConnectionStatus
}
Le formalisme est correct avec :
$Adapter=Get-WmiObject -namespace \"root/cimv2\" -class Win32_NetworkAdapter -filter index='1'
Mais comment remplacer '1' par la valeur tirée de la variable $AdapterConf.index ?
C'est un détail, certes. Et bien justement, un détail, ca devrait se comprendre facilement. Mais je n'y arrive pas. GGGrrrr.
En imaginant qu'un jour je trouve le bon formalisme, Je ne vois pas comment manipuler les 2 objets au bout du pipeline :
$colobjs = get-wmiobject .... | where...
$colobjs | foreach-object get-wmiobject ....-filter $_.index | write-host obj1.IPAddress obj2.MACAddress
J'ai bien un \"comme ipconfig\".ps1 mais il est \"rustique\" malgré les couleurs. Et ne me satisfait pas \"intellectuellement\". Je le joins quand même au cas où qq'un pourrait me faire une leçon.
Merci.
Pour me faire la main, je tente de simuler \"ipconfig\".
J'utilise get-wmibject avec les 2 principales classes win32_Net...
Je voudrais énumérer les objets de la première classe pour lesquels IpEnabled = true. Puis les passer dans le pipeline pour lire l'objet de la seconde classe qui fournit les informations associées. Déjà en vbs, c'était pas facile. Je n'ai jamais rien compris à l'emploi de la classe de type \"associator\" Win32_NetworkAdapterSetting. Donc je voulais faire simple.
#énumérer les cartes ayant ipenabled
$AdaptersConf = (Get-WmiObject -namespace \"root/cimv2\" -class Win32_NetworkAdapterConfiguration) | Where-Object {$_.IPEnabled -eq 1}
#Lire des informations dans la seconde classe
#Et ca marche bien avec le where-object:
foreach ($AdapterConf in $AdaptersConf){
$Adapter=Get-WmiObject -namespace \"root/cimv2\" -class Win32_NetworkAdapter | where {$_.index -eq $AdapterConf.index}
#un affichage d'une propriété
Adapter.NetConnectionStatus
}
J'ai voulu tester le paramètre -filter de get-wmiobject mais je n'arrive pas à trouver la combinaison des quotes
foreach ($AdapterConf in $AdaptersConf){
$Adapter=Get-WmiObject -namespace \"root/cimv2\" -class Win32_NetworkAdapter -filter \"index=$AdapterConf.index\" <
quel formalisme?
Adapter.NetConnectionStatus
}
Le formalisme est correct avec :
$Adapter=Get-WmiObject -namespace \"root/cimv2\" -class Win32_NetworkAdapter -filter index='1'
Mais comment remplacer '1' par la valeur tirée de la variable $AdapterConf.index ?
C'est un détail, certes. Et bien justement, un détail, ca devrait se comprendre facilement. Mais je n'y arrive pas. GGGrrrr.
En imaginant qu'un jour je trouve le bon formalisme, Je ne vois pas comment manipuler les 2 objets au bout du pipeline :
$colobjs = get-wmiobject .... | where...
$colobjs | foreach-object get-wmiobject ....-filter $_.index | write-host obj1.IPAddress obj2.MACAddress
J'ai bien un \"comme ipconfig\".ps1 mais il est \"rustique\" malgré les couleurs. Et ne me satisfait pas \"intellectuellement\". Je le joins quand même au cas où qq'un pourrait me faire une leçon.
La pièce jointe ip.ps1 est absente ou indisponible
Merci.
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Grégory
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 49
- Remerciements reçus 0
il y a 17 ans 5 mois #2960
par Grégory
Réponse de Grégory sur le sujet Re:les bonnes quotes pour wmi -filter
Je dirais une simple concaténation
[code:1]-filter \"index=\" + $AdapterConf.index[/code:1]
il me semble que j'ai fait comme ça dernièrement pour créer des Users dans l'AD avec un .csv
[code:1]-filter \"index=\" + $AdapterConf.index[/code:1]
il me semble que j'ai fait comme ça dernièrement pour créer des Users dans l'AD avec un .csv
Connexion ou Créer un compte pour participer à la conversation.
- blanc
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 54
- Remerciements reçus 0
il y a 17 ans 5 mois #2961
par blanc
Réponse de blanc sur le sujet Re:les bonnes quotes pour wmi -filter
J'ai trouvé sur thepowershellguy.com/blogs/posh/archive/...on-ars-technica.aspx

C'est pas aujourd'hui que je vais comprendre les dix premières lignes
Mais cela me permet d'écrire correctement les 2 lignes suivantes (bien inutiles je l'avoue mais les qoutes sont au bon endroit):
$AdaptersConf = (Get-WmiObject -namespace \"root/cimv2\" -class Win32_NetworkAdapterConfiguration) | where-object {$_.IPEnabled -eq 1}
Get-WmiObject -namespace \"root/cimv2\" -class Win32_NetworkAdapter -filter \"index='$($AdaptersConf[0].index)'\"
Je ne prends que le premier élément pour ne pas faire un foreach-object
C'est pas aujourd'hui que je vais comprendre les dix premières lignes
Mais cela me permet d'écrire correctement les 2 lignes suivantes (bien inutiles je l'avoue mais les qoutes sont au bon endroit):
$AdaptersConf = (Get-WmiObject -namespace \"root/cimv2\" -class Win32_NetworkAdapterConfiguration) | where-object {$_.IPEnabled -eq 1}
Get-WmiObject -namespace \"root/cimv2\" -class Win32_NetworkAdapter -filter \"index='$($AdaptersConf[0].index)'\"
Je ne prends que le premier élément pour ne pas faire un foreach-object
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 5 mois #2963
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:les bonnes quotes pour wmi -filter
noel écrit:
A propos des associators voir ASSOCIATORS OF Statement
Tu peux les visualiser avec WMI CIM Studio, dispo ici .
Un exemple retrouver les dispositifs binder sur ethernet:
[code:1]
get-wmiobject -query 'Select * from Win32_NetworkAdapter where AdapterType=\"Ethernet 802.3\"'
[/code:1]
Ensuite on rechercher les noms de classe de ces associations :
[code:1]
get-wmiobject -query 'Select * from Win32_NetworkAdapter where AdapterType=\"Ethernet 802.3\"'|`
foreach {Write-host \"
$($_.Name)
\";([WmiSearcher] \"Associators of {Win32_NetworkAdapter.deviceID=$($_.DeviceID)}\"«»).get()}|%{$_.__class}
[/code:1]
On peut voir que tous les dispositifs réseau n'ont pas les mêmes associations. Et elles sont déclarées dans la classe MOF, voir Declaring an Association Class , ensuite c'est le référentiel WMI qui les renseigne.
On associe donc des informations qui peuvent être interrogées de différentes manières, non pas dans un objet mais dans +.
Une association est en quelque sorte un pointeur.
L'exemple cité, dans le premier lien, peut être lu comme cela :
Au disque C correspond 1 ou + partitions. Et bien évidement une partition doit être associé à un disque.
On peut soit interroger les instances de la classe partitions et ensuite retrouver le disque associé soit faire l'inverse.
Pour les cartes réseaux elles possédent plusieurs type d'association et chacune d'entre elle porte des informations et peut à son
tour posséder plusieurs type d'association, etc.
Il faut le voir comme une naviguation au sein du référentiel WMI à partir d'un point d'entré, par exemple une instance de la classe Win32_NetworkAdapter.
Mais pour naviguer encore faut-il avoir une carte : www.dmtf.org/standards/cim/cim_schema_v2..._Network28-Final.pdf
Ensuite on voit que le nom de la classe WMI sous Windows différe du modéle ...
noel écrit:
Je n'ai pas compris.En imaginant qu'un jour je trouve le bon formalisme, Je ne vois pas comment manipuler les 2 objets au bout du pipeline
A propos des associators voir ASSOCIATORS OF Statement
Tu peux les visualiser avec WMI CIM Studio, dispo ici .
Un exemple retrouver les dispositifs binder sur ethernet:
[code:1]
get-wmiobject -query 'Select * from Win32_NetworkAdapter where AdapterType=\"Ethernet 802.3\"'
[/code:1]
Ensuite on rechercher les noms de classe de ces associations :
[code:1]
get-wmiobject -query 'Select * from Win32_NetworkAdapter where AdapterType=\"Ethernet 802.3\"'|`
foreach {Write-host \"
$($_.Name)
\";([WmiSearcher] \"Associators of {Win32_NetworkAdapter.deviceID=$($_.DeviceID)}\"«»).get()}|%{$_.__class}
[/code:1]
On peut voir que tous les dispositifs réseau n'ont pas les mêmes associations. Et elles sont déclarées dans la classe MOF, voir Declaring an Association Class , ensuite c'est le référentiel WMI qui les renseigne.
On associe donc des informations qui peuvent être interrogées de différentes manières, non pas dans un objet mais dans +.
Une association est en quelque sorte un pointeur.
L'exemple cité, dans le premier lien, peut être lu comme cela :
Au disque C correspond 1 ou + partitions. Et bien évidement une partition doit être associé à un disque.
On peut soit interroger les instances de la classe partitions et ensuite retrouver le disque associé soit faire l'inverse.
Pour les cartes réseaux elles possédent plusieurs type d'association et chacune d'entre elle porte des informations et peut à son
tour posséder plusieurs type d'association, etc.
Il faut le voir comme une naviguation au sein du référentiel WMI à partir d'un point d'entré, par exemple une instance de la classe Win32_NetworkAdapter.
Mais pour naviguer encore faut-il avoir une carte : www.dmtf.org/standards/cim/cim_schema_v2..._Network28-Final.pdf
Ensuite on voit que le nom de la classe WMI sous Windows différe du modéle ...
noel écrit:
En décomposant cela devient plus digesteC'est pas aujourd'hui que je vais comprendre les dix premières lignes
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.097 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- les bonnes quotes pour wmi -filter