J'écris actuellement un script assez simple pour gérer l'installation d'un programme réseau. Dans le cadre de cette installation, j'ai besoin de lire les adresses IP actuellement attribuées à tous les adaptateurs en direct.

Je peux lire les adresses IP sans problème, mais j'ai maintenant du mal à lire les adresses trouvées dans le tableau dans lequel je les ai chargées. Je fais cela dans plusieurs autres scripts sans problème, donc je suis vraiment perplexe quant à ce que j'ai fait de mal. Mon script est comme ci-dessous:

'Object declarations
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colIPConf = objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = 'True'")

'Check local IP addresses
Z = 0
Dim arrAdapters()

For Each objIPConf In colIPConf
    ReDim Preserve arrAdapters(Z)
    arrAdapters(Z) = objIPConf.IpAddress
    test = arrAdapters(Z) 
    msgbox test ' TYPE MISMATCH HERE
    Z = Z+1 
Next

Je ne comprends pas pourquoi ma variable "test" donne une incompatibilité de type pour une utilisation dans une MsgBox? Lorsque je place un point d'arrêt dans VbsEdit et inspecte ma variable de test - il n'affiche pas une seule valeur de chaîne, mais un tableau avec la position 0 et une valeur attachée. Pourquoi est-ce le cas lorsque je spécifie

test = arrAdapters(Z)

Sûrement, il devrait simplement arracher la chaîne du tableau?

-2
Sam H 17 janv. 2017 à 18:58

2 réponses

Meilleure réponse

La propriété IpAddress est un tableau déjà dans VBScript. Vous pouvez le vérifier en utilisant VarType et / ou TypeName fonctions, par exemple comme suit:

Option Explicit
On Error GoTo 0
Dim sResult: sResult = Wscript.ScriptName

'Object declarations
Dim objFSO, objWMIService, colIPConf
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject( _
    "winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colIPConf = objWMIService.ExecQuery( _
    "Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = 'True'")

'Check local IP addresses
Dim ii, arrAdapters, objIPConf

For Each objIPConf In colIPConf
    sResult = sResult & vbNewLine & objIPConf.Description
    arrAdapters = objIPConf.IpAddress
    sResult = sResult _
              & vbTab & VarType( arrAdapters) & vbTab & TypeName( arrAdapters)
    For ii = 0 To UBound(arrAdapters)
        sResult = sResult & vbNewLine & arrAdapters( ii) 
    Next
Next
Wscript.Echo sResult
Wscript.Quit
1
JosefZ 17 janv. 2017 à 16:30

C'est parce que arrAdapters(Z) = objIPConf.IpAddress peut renvoyer un tableau et non une chaîne.

Changez votre code en arrAdapters(Z) = objIPConf.IpAddress(0) et cela devrait fonctionner. Ou vous pouvez rechercher un tableau en utilisant IsArray(objIPConf.IpAddress) avant de faire une affectation.

0
Pankaj Jaju 17 janv. 2017 à 16:18