Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: palophp en 17 Octubre 2016, 20:54 PM

Título: Campo managedby sin CN
Publicado por: palophp en 17 Octubre 2016, 20:54 PM
Estoy realizando un script para sacar los nombres de los Equipos y por quien esta administrado.
Pero al sacar la consulta me sale por ejemplo:
Equipo1 CN=Elena
Equipo2 CN=Pepe

Como podria quitar el CN, y que aparezca solamente el nombre?
Estoy poniendo:
obj.managedby y asi es como saco los nombres de las personas
Título: Re: Campo managedby sin CN
Publicado por: okik en 18 Octubre 2016, 20:10 PM
Ejemplo1:
Código (vb) [Seleccionar]
Dim Nombre As String
Nombre = "Equipo1 CN=Elena"

Dim sN() As String
sN = Split(Nombre, "=")
MsgBox (sN(1))




Ejemplo2:
Código (vb) [Seleccionar]
Dim sN() As String
sN = Split(CStr(obj.managedby), "=")
MsgBox (sN(1))
Título: Re: Campo managedby sin CN
Publicado por: palophp en 18 Octubre 2016, 20:35 PM
Me sale error...

Tengo puesto:
For Each obj In usuarioEquipo
   
   objConsulta_PING2.WriteLine (StrEquipo & TabStop & obj.managedby & TabStop     &"APAGADO")

Next
   

Y claro me sale luego en el txt
Equipo1 CN=PEPE, DC=..
Título: Re: Campo managedby sin CN
Publicado por: okik en 18 Octubre 2016, 20:54 PM
Cita de: palophp en 18 Octubre 2016, 20:35 PM
Me sale error...

Tengo puesto:
For Each obj In usuarioEquipo
   
  objConsulta_PING2.WriteLine (StrEquipo & TabStop & obj.managedby & TabStop     &"APAGADO")

Next
   

Y claro me sale luego en el txt
Equipo1 CN=PEPE, DC=..

no dice que obj.managedby  devuelve  esto Equipo1 CN=PEPE?

Necesitaría saber la cadena complenta. esto no me sirve

Equipo1 CN=PEPE, DC=..

En un principio dijiste: Equipo1 CN=Elena

para extraer "Elena" usas lo que he puesto. No entiendo el problema. Lo que hace SPLIT es obtener el valor de cada lado distinto de "=", el lado izquierdo de la cadena será (0) y el derecho (1)



usa:

object.name

y para quitar el "CN="
Código (vb) [Seleccionar]
Dim N As String
N = "CN=HOla"
MsgBox (Right(N, Len(N) - 3))



Código (vb) [Seleccionar]
(Right(obj.Name, Len(N) - 3))
Título: Re: Campo managedby sin CN
Publicado por: palophp en 18 Octubre 2016, 21:52 PM
Lo siento, me he debido de explicar mal.
Estoy hablando contigo en otro foro referido a lo de eliminar un fichero txt.
Ahi he pegado todo el codigo.
Lo que quiero es que me saque como resultado final un unico fichero con:
Equipo1 Pepe Apagado
Equipo2 Elena No se ha podido apagar
....
Y lo que quiero es borrar el otro fichero donde he guardado la consulta LDAP con todos los nombres de los equipos.
Gracias!!!
Título: Re: Campo managedby sin CN
Publicado por: okik en 18 Octubre 2016, 22:14 PM
a ver esto:

Añade VbNewLine

Código (vb) [Seleccionar]
For Each obj In ou
        objConsulta_PING2.WriteLine (StrEquipo & TabStop & obj.managedby & " " & "Hace PING" & vbNewLine)
    Next
Título: Re: Campo managedby sin CN
Publicado por: palophp en 18 Octubre 2016, 22:30 PM
Tampoco jajaja me sigue apareciendo esto, ademas no se porque me sale tantas veces el Equipo IMIO

MIO   CN=paloma,CN=Users,DC=palo,DC=age Hace PING
MIO    Hace PING
MIO   CN=Dani ,CN=Users,DC=palo,DC=age Hace PING
MIO1    No se ha podido apagar
MIO2    No se ha podido apagar
Título: Re: Campo managedby sin CN
Publicado por: okik en 18 Octubre 2016, 22:43 PM
Cita de: palophp en 18 Octubre 2016, 22:30 PM
Tampoco jajaja me sigue apareciendo esto, ademas no se porque me sale tantas veces el Equipo IMIO

MIO   CN=paloma,CN=Users,DC=palo,DC=age Hace PING
MIO    Hace PING
MIO   CN=Dani ,CN=Users,DC=palo,DC=age Hace PING
MIO1    No se ha podido apagar
MIO2    No se ha podido apagar



También se podría usar vbCrlf en lugar de vbNewline.

Ya lo tengo espera un rato...


Título: Re: Campo managedby sin CN
Publicado por: palophp en 18 Octubre 2016, 22:44 PM
Si? Espero espero jaajja
Título: Re: Campo managedby sin CN
Publicado por: okik en 18 Octubre 2016, 22:51 PM
Cita de: palophp en 18 Octubre 2016, 22:44 PM
Si? Espero espero jaajja

Vale mira reemplaza esto:

Código (vb) [Seleccionar]
For Each obj In ou
       objConsulta_PING2.WriteLine (StrEquipo & TabStop & obj.managedby & " " & "Hace PING" & vbNewLine)
  Next


Por esto otro:

Código (vb) [Seleccionar]
 
   For Each obj In ou
      Dim sN() As String
       sN = Split(obj.managedby, ",")
       sN = Split(sN(0), "=")
       If  sN(1) <> vbNullString Then '<- Si Sn es distinto de nada
           objConsulta_PING2.WriteLine (StrEquipo & TabStop & UCase(sN(1)) _
           & " " & _
           "Hace PING" & vbNewLine)
       End If
   Next


y me cuentas q tal

El UCase es para que el nombre se vea en mayúsculas

Título: Re: Campo managedby sin CN
Publicado por: palophp en 18 Octubre 2016, 23:01 PM
Que va, poniendo eso solo me saca:

MIO1    No se ha podido apagar
MIO2    No se ha podido apagar
Título: Re: Campo managedby sin CN
Publicado por: okik en 18 Octubre 2016, 23:05 PM
Cita de: palophp en 18 Octubre 2016, 23:01 PM
Que va, poniendo eso solo me saca:

MIO1    No se ha podido apagar
MIO2    No se ha podido apagar


claro, fallo mio

Código (vb) [Seleccionar]
 For Each obj In ou
       If obj.managedby <> vbNullString Then '<- Si obj.managedby  es distinto de nada
        Dim sN() As String
        sN = Split(obj.managedby, ",")
        sN = Split(sN(0), "=")
   
           objConsulta_PING2.WriteLine (StrEquipo & TabStop & UCase(sN(1)) _
           & " " & _
           "Hace PING" & vbNewLine)
       End If
   Next
Título: Re: Campo managedby sin CN
Publicado por: palophp en 18 Octubre 2016, 23:14 PM
Nada.
Lo he metido en el IF y no me saca los equipos a los que hace ping.
Directamente se va al ELSE y me saca los que no hace el ping.
Título: Re: Campo managedby sin CN
Publicado por: okik en 18 Octubre 2016, 23:16 PM
Cita de: palophp en 18 Octubre 2016, 23:14 PM
Nada.
Lo he metido en el IF y no me saca los equipos a los que hace ping.
Directamente se va al ELSE y me saca los que no hace el ping.

yo entiendo que  obj.managedby devuelve esto tal cual

CN=paloma,CN=Users,DC=palo,DC=age


sin espacios... ¿me lo puedes confirmar?
Título: Re: Campo managedby sin CN
Publicado por: palophp en 18 Octubre 2016, 23:19 PM
Cierto, así es.
Y quiero que me saque únicamente "paloma"
Título: Re: Campo managedby sin CN
Publicado por: okik en 18 Octubre 2016, 23:23 PM

De todos modos aunque tuviera espacios funcionaría igual. quizás es que usé vbnullstring prueba con ""

Código (vb) [Seleccionar]
If obj.managedby <> "" Then '

Fijate esta emulación devuelve el nombre.

Código (vb) [Seleccionar]
Dim managedby As String
managedby = "CN = paloma ,CN = Users, DC = palo, DC = age"
 If managedby <> vbNullString Then '<- Si Sn es distinto de nada
Dim sN() As String
sN = Split(managedby, ",")
sN = Split(sN(0), "=")

 MsgBox (UCase(sN(1)))
 End If


si obj.managedby devuelve algún valor, que entiendo que es como esto: "CN = paloma ,CN = Users, DC = palo, DC = age"

Entonces tiene que mostrar
Equipo Nombre  Hace PING
Título: Re: Campo managedby sin CN
Publicado por: palophp en 18 Octubre 2016, 23:33 PM
Lo he probado, pero es que directamente si lo meto donde el IF, no me saca ni siquiera ningún equipo al que hace PING...
Y si lo dejo como estaba, si que me saca todo pero con el CN=....

Código (vb) [Seleccionar]

If responde_al_ping(StrEquipo) then
  For Each obj In ou
        If obj.managedby <> "" Then '<- Si obj.managedby  es distinto de nada
         Dim sN()
         sN = Split(obj.managedby, ",")
         sN = Split(sN(0), "=")

            objConsulta_PING2.WriteLine (StrEquipo & TabStop & UCase(sN(1)) _
            & " " & _
            "Hace PING" & vbNewLine)
        End If
    Next
else
    objConsulta_PING2.WriteLine StrEquipo & TabStop & " No se ha podido apagar"
end if
Loop

Título: Re: Campo managedby sin CN
Publicado por: palophp en 18 Octubre 2016, 23:37 PM
Código (vb) [Seleccionar]

If responde_al_ping(StrEquipo) then
'Fichero Log que almacena los Equipos que se van apagando
For Each obj In ou
objConsulta_PING2.WriteLine (StrEquipo & TabStop & obj.managedby & " " & "SIIIIII PING")
Next

 For Each obj In ou
       If obj.managedby <> "" Then '<- Si obj.managedby  es distinto de nada
        Dim sN()
        sN = Split(obj.managedby, ",")
        sN = Split(sN(0), "=")

           objConsulta_PING2.WriteLine (StrEquipo & TabStop & UCase(sN(1)) & " " & "Hace PING" & vbNewLine)
       End If
   Next
else
   objConsulta_PING2.WriteLine StrEquipo & TabStop & " No se ha podido apagar"
end if
Loop


Me saca esto directamente:
MIO   CN=paloma,CN=Users,DC=palo,DC=age SIIIIII PING
MIO   CN=Dani Alejo,CN=Users,DC=palo,DC=age SIIIIII PING
MIO   CN=Dani Alejo,CN=Users,DC=palo,DC=age SIIIIII PING
MIO1    No se ha podido apagar
MIO2    No se ha podido apagar



Ves? No hace ni siquiera tu codigo





Título: Re: Campo managedby sin CN
Publicado por: okik en 18 Octubre 2016, 23:54 PM
Cita de: palophp en 18 Octubre 2016, 23:33 PM
Lo he probado, pero es que directamente si lo meto donde el IF, no me saca ni siquiera ningún equipo al que hace PING...
Y si lo dejo como estaba, si que me saca todo pero con el CN=....

Código (vb) [Seleccionar]

If responde_al_ping(StrEquipo) then
 For Each obj In ou
       If obj.managedby <> "" Then '<- Si obj.managedby  es distinto de nada
        Dim sN()
        sN = Split(obj.managedby, ",")
        sN = Split(sN(0), "=")

           objConsulta_PING2.WriteLine (StrEquipo & TabStop & UCase(sN(1)) _
           & " " & _
           "Hace PING" & vbNewLine)
       End If
   Next
else
   objConsulta_PING2.WriteLine StrEquipo & TabStop & " No se ha podido apagar"
end if
Loop




que raro jeje.

Código (vb) [Seleccionar]
For Each obj In ou
       If obj.managedby <> vbNullString Then '<- Si Sn es distinto de nada
           Dim sN() As String
           sN = Split(obj.managedby, ",")
           sN = Split(sN(0), "=")
       End If
       Dim Nombre As String
         Nombre = UCase(sN(1))
       If Nombre = "" Then Nombre = "NULO"
   
           objConsulta_PING2.WriteLine (StrEquipo & TabStop & Nombre _
           & " " & _
           "Hace PING" & vbNewLine)
   Next


a ver que te saca esto

con el ejemplo del Split ya tienes como sacar el nombre el porqué luego no se te ve, no entiendo, no se. Ya que como he dicho si antes te salía :

MIO   CN=paloma,CN=Users,DC=palo,DC=age Hace PING
MIO    Hace PING
MIO   CN=Dani ,CN=Users,DC=palo,DC=age Hace PING
MIO1    No se ha podido apagar
MIO2    No se ha podido apagar

solo dos de estas líneas deberían devolver un nombre "paloma" y "Dani", y debería devolver
MIO   PALORMA  Hace PING
MIO   DANI Hace PING

al haber puesto la condición de solo  If obj.managedby <> "" Then solo debería escribir  en el archivo si devuelve algún valor.

solo se me ocurre quitar la codición (quitar la condición if then implica un error con el Split si obj.managedby es nulo);

Código (vb) [Seleccionar]
If responde_al_ping(StrEquipo) Then
   'Fichero Log que almacena los Equipos que se van apagando
     For Each obj In ou
      ' If CStr(obj.managedby) <> "" Then '<- Si obj.managedby  es distinto de nada
        Dim sN()
        sN = Split(obj.managedby, ",")
        sN = Split(sN(0), "=")

           objConsulta_PING2.WriteLine (StrEquipo & TabStop & UCase(sN(1)) & " " & "Hace PING" & vbNewLine)
     '  End If
   Next
Else
   objConsulta_PING2.WriteLine StrEquipo & TabStop & " No se ha podido apagar"
End If
Loop


y ya en plan desesperado, es establecer el tipo a STRING porque puede ser que no se pueda comparar el objeto como string. añade Cstr()

Código (vb) [Seleccionar]
If CStr(obj.managedby) <> "" Then

o bien
Dim objManagedby as String
objManagedby = obj.managedby



Código (vb) [Seleccionar]
If responde_al_ping(StrEquipo) Then
   'Fichero Log que almacena los Equipos que se van apagando
     For Each obj In ou
     Dim objManagedby As String
     objManagedby = obj.managedby
       If CStr(objManagedby) <> "" Then '<- Si obj.managedby  es distinto de nada
        Dim sN()
        sN = Split(objManagedby, ",")
        sN = Split(sN(0), "=")

           objConsulta_PING2.WriteLine (StrEquipo & TabStop & UCase(sN(1)) & " " & "Hace PING" & vbNewLine)
       End If
   Next
Else
   objConsulta_PING2.WriteLine StrEquipo & TabStop & " No se ha podido apagar"
End If
Loop




Se me olvidaba y también

Código (vb) [Seleccionar]
sN = Split(Cstr(obj.managedby), ",")

Es como si vb no puediera trabajar con obj.managedby  como string. Por eso te comento lo de Cstr() o meterlo en una variable String primero, antes de trabajar con su valor.


Título: Re: Campo managedby sin CN
Publicado por: palophp en 19 Octubre 2016, 19:48 PM
Hola!
He estado mirando otra vez y poniendo los codigos que me pasaste y nada.
Título: Re: Campo managedby sin CN
Publicado por: okik en 19 Octubre 2016, 20:42 PM
hola

mira yo creo que ya más no puedo aportar. Para lo de crear líneas ya te propuse VbNewLine o vbCrLf y eso funciona.pero por alguna razón que desconozco no funciona dentro de tu código. Como no puedo reproducir tu código no hay forma de que pueda encontrar la razón.

Incluso he usado un código de VBScript y un For Each y dentro de este el Split. Para comprobar que funciona.

Para sacar el nombre lo del SPLIT que ya habrás comprobado que funciona,

Este código por ejemplo lista los procesos en formato "Aplicación.exe" y se trata de listarlo quitando ".exe".

Código (vb) [Seleccionar]
Dim strComputer As String
strComputer = "."
       Dim objWMIService As Object
           Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
       Dim colProcessList As Object
           Set colProcessList = objWMIService.ExecQuery("SELECT * FROM Win32_Process")
       For Each objProcess In colProcessList
               Dim sN() As String
                   sN = Split(objProcess.Name, ".")
                   List1.AddItem (sN(0))
       Next
       
       


funciona sin problemas

Ahora vamos con tu código. Es básicamente lo mismo pero no te funciona. Lo único que se me ocurre sin poder probarlo es quitar la condición y poner On error Resume Next.

Código (vb) [Seleccionar]
 For Each obj In ou
        Dim sN() As String
             sN = Split(CStr(obj.managedby), ",")
             sN = Split(sN(0), "=")
             On Error Resume Next
           objConsulta_PING2.WriteLine (StrEquipo & TabStop & UCase(sN(1)) _
         & " " & _
           "Hace PING" & vbNewLine)
   Next



Podrías probar a usar puntos de interrupción para ver el valor de obj.managedby en tiempo de ejecución antes de escribir.

En la parte izquierda del editor, justo donde acaba lo blanco,  hay una columna vacía tipo botón que si le das aparece un punto rojo.

(https://i-msdn.sec.s-msft.com/dynimg/IC802400.jpeg)


Marca justo donde está la línea :

     objConsulta_PING2.WriteLine (StrEquipo & TabStop & obj.managedby  _
         & " " & _
           "Hace PING" & vbNewLine)


mete  obj.managedby en una variable String

Código (vb) [Seleccionar]
Dim g As String
 g = obj.managedby


y marca el el punto justo donde está   g = obj.managedby

y marca el el punto justo donde está   Next

Inicia le código y cuando se interrumpa coloca el puntero justo encima de g, debería mostrarse un texto que muestra su valor justo en ese momento. A ver que formato tiene, para poder extraer el nombre.


Título: Re: Campo managedby sin CN
Publicado por: palophp en 19 Octubre 2016, 20:51 PM
Vale voy a probarlo,y muchas gracias por tu ayuda y tu tiempo
Título: Re: Campo managedby sin CN
Publicado por: okik en 19 Octubre 2016, 20:55 PM
Perdona marca el punto de interrupción donde está el NEXT porque si no g te mostrará "".