Question [Résolu] Objet COM Network list manager

Plus d'informations
il y a 15 ans 5 mois #8282 par JoJo
Bonjour,

Je cherche à utiliser l'API introduite dans windows vista \"Network List Manager\", afin de determiner les propriétés de connexion des cartes réseaux (Type de réseau, Connectivité). Je cherche notamment à récupérer le GUID de la carte en question. j'utilise le script suivant sur un windows 7 entreprise

[code:1]$NLMType = [Type]::GetTypeFromCLSID(‘DCB00C01-570F-4A9B-8D69-199FDBA5723B’)
$INetworkListManager = [Activator]::CreateInstance($NLMType)

$INetworkConnections=$INetworkListManager.GetNetworkconnections()

foreach($network in $INetworkConnections){
$network.GetAdapterID()
}[/code:1]

Quand je fais un get-member sur l'objet $network, la méthode GetAdapterID() est listée comme une de ces methodes...

Malheuresement le script me retourne une exception sur la methode GetAdapterID().

je ne sais pas comment faire...

Merci

Message édité par: crousti, à: 12/12/10 13:57

Message édité par: crousti, à: 12/12/10 13:58<br><br>Message édité par: Arnaud, à: 5/01/11 10:12

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

Plus d'informations
il y a 15 ans 5 mois #8288 par JoJo
Réponse de JoJo sur le sujet Re:Objet COM Network list manager
L'exception que j'obtiens :

Exception calling \&quot;GetAdapterId\&quot; with \&quot;0\&quot; argument(s): \&quot;Value does not fall within the expected range.\&quot;
At C:\Untitled3.ps1:7 char:26
+ $network.GetAdapterID &lt;&lt;&lt;&lt; ()
+ CategoryInfo : NotSpecified: (: ) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
<br><br>Message édité par: crousti, à: 13/12/10 09:31

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

Plus d'informations
il y a 15 ans 5 mois #8290 par Jacques Barathon
D'après la documentation que j'ai trouvé sur la méthode GetAdapterId(), sa valeur de retour est simplement un Ok ou non; l'ID à proprement parlé est stocké dans la variable passée en paramètre.


msdn.microsoft.com/en-us/library/aa370757(v=vs.85).aspx


Dans la définition de la méthode, la variable est de type [out], c'est-à-dire qu'elle sera modifiée par la méthode. Pour passer une telle variable dans PowerShell, il faut utiliser le type [ref]. J'utilise un poste XP donc je ne peux pas illustrer [ref] avec la méthode en question, mais le principe est le suivant :

[code:1]
PS&gt; function maj ([ref]$s) {$s.Value = $s.Value.ToUpper()}
PS&gt; $text = \&quot;Hello\&quot;
PS&gt; maj ([ref]$text)
PS&gt; $text
HELLO
[/code:1]

En clair dans le texte, la fonction maj modifie directement la variable $text, sans qu'il y ait besoin de réaffecter son résultat à la variable comme on le ferait d'habitude.

Tu noteras la syntaxe pour passer la variable en paramètre à la fonction : ([ref]$mavariable).

Je dirais que dans ton script ça donne quelque chose comme ça :

[code:1]
foreach($network in $INetworkConnections){
$guid = ''
$network.GetAdapterID(([ref]$guid))
$guid
}
[/code:1]

Pas sûr à 100% que le deuxième jeu de parenthèses soit nécessaire dans le passage du paramètre, à toi de tester.

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

Plus d'informations
il y a 15 ans 5 mois #8291 par JoJo
Réponse de JoJo sur le sujet Re:Objet COM Network list manager
Merci pour ta réponse et le temps que tu y as consacré Janel.

Lorsque j'execute le script, j'ai toujours une exception :


Cannot find an overload for \&quot;GetAdapterId\&quot; and the argument count: \&quot;1\&quot;.
At Untitled3.ps1:9 char:26
+ $network.GetAdapterID &lt;&lt;&lt;&lt; (([ref]$guid))
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest


:unsure:

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

Plus d'informations
il y a 15 ans 5 mois #8292 par Jacques Barathon
Tu peux redonner le code complet que tu utilises ?

J'essaierai ce soir de tester sur mon poste à la maison, il est sous Windows 7.

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

Plus d'informations
il y a 15 ans 5 mois #8293 par JoJo
Réponse de JoJo sur le sujet Re:Objet COM Network list manager
Le script renvoie bien tout sauf l'AdapterID

[code:1]$NLMType = [Type]::GetTypeFromCLSID(‘DCB00C01-570F-4A9B-8D69-199FDBA5723B’)
$INetworkListManager = [Activator]::CreateInstance($NLMType)
$INetworkConnections=$INetworkListManager.GetNetworkConnections()
function getconnectivity {
param($network1)
switch ($network1.GetConnectivity()) {
0x0000 { 'disconnected' }
{ $_ -band 0x0001 } { 'IPV4_NOTRAFFIC' }
{ $_ -band 0x0002 } { 'IPV6_NOTRAFFIC' }
{ $_ -band 0x0010 } { 'IPV4_SUBNET' }
{ $_ -band 0x0020 } { 'IPV4_LOCALNETWORK' }
{ $_ -band 0x0040 } { 'IPV4_INTERNET' }
{ $_ -band 0x0100 } { 'IPV6_SUBNET' }
{ $_ -band 0x0200 } { 'IPV6_LOCALNETWORK' }
{ $_ -band 0x0400 } { 'IPV6_INTERNET' }
}
}
function getcategory {
param($network1)
switch ($network1.GetNetwork().GetCategory()) {
2 { 'Domain' }
1 { 'Private' }
0 { 'Public' }
}
}


foreach($connection in $INetworkConnections){

$guid = ''
$name=$connection.GetNetwork().GetName()
$description=$connection.GetNetwork().GetDescription()
$category=getcategory $connection
$connection.GetAdapterID(([ref]$guid))
$connectivity=getconnectivity $connection
new-object PsObject -property @{Name=$name; Category=$category; Connectivity=$connectivity; Description=$description; AdapterID=$guid }

}



[/code:1]

Encore merci pour ton aide ;)<br><br>Message édité par: crousti, à: 13/12/10 15:54

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

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