Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - efer27

#1
Scripting / Resolucion de IP DNS VBSCRIPT
4 Abril 2013, 16:48 PM
Buenas tardes,

Tengo un problema, bueno uno de muchos. Ahora el problema va por VBSCRIPT planteo el requerimiento.

Tengo que realizar informacion de un una relacion de maquinas las cuales tengo que hacr ping y tengo que resolver el IP y que resuelve el DNS.

Hostname        IP       PING            DNS
MyPc          127.0.0.1  OK          MyPC.Dominio.com
Mypc2        127.0.0.2   NO_OK   No register host

Esta  informacion pasarlo a un CSV.

Pero tambien necesito trabajar con los equipos por separado es decir que me saque un log por separado de los equipos que hacen ping y los que no. esto esta en un TXT.

si alguien me puede ayudar se lo agradecería adjunto el codigo.



Dim strComputerName, ScriptPath, OnlineFileName, OfflineFileName
Dim ArgObj, OnlineFile, OfflineFile, oInputFile, InputFileName
Dim ReadLineArray(3000), a, b, c, Temp

Const ForAppending = 8
Const ForReading = 1
Const ForWriting = 2
Const ReadTheFile = False
Const CreateTheFile = True

' Valores de Formato
Const ASCII = 0
Const UniCode = -1
Const Default = -2

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = WScript.CreateObject("WScript.Shell")

' ********************   Declaracion de Varibles  ********************

' Declaracion de nombre de archivos
'*********************************************************************
FilePath=CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")


Set ArgObj = WScript.Arguments
If WScript.Arguments.count > 0 Then
  InputFileName = UCase(ArgObj(0))
Else
  InputFileName = FilePath & "\IP_List.txt"
End If

OnlineFileName = FilePath & "\OnlineSystems.txt"
OfflineFileName = FilePath & "\OfflineSystems.txt"


' Elimina los arhivos TXT Online y Offline si es que existe
'*********************************************************************
If oFSO.FileExists(OfflineFileName) = True Then
  oFSO.deletefile OfflineFileName, force
End If
If oFSO.FileExists (OnlineFileName)  Then
  oFSO.deletefile OnlineFileName, force
End If

' Crea los Archivos Online y Offline
'*********************************************************************
oFSO.CreateTextFile OnlineFileName, CreateTheFile
oFSO.CreateTextFile OfflineFileName, CreateTheFile

' Abre el archivo y lee el contenido
'*********************************************************************
Set OnlineFile=oFSO.OpenTextFile(OnlineFileName, ForWriting, ReadTheFile)
Set OfflineFile=oFSO.OpenTextFile(OfflineFileName, ForWriting, ReadTheFile)
Set oInputFile=oFSO.OpenTextFile(InputFileName, ForReading, ReadTheFile)

' Loop through the InputFile to get all the computer names and then check to see if they are online or not.

' Importa la informacion del archivo en el array
'*********************************************************************
Do while not oInputFile.AtEndOfStream
  a = a + 1
  ReadLineArray(a) = Trim(oInputFile.ReadLine) ' Reads the line of text
Loop

' Busca duplicaciones
'*********************************************************************
For b = 1 To a
  ' If data matches, then set the duplicates in the array to "" (blank)
  For c = (b + 1) To a
    If trim(ReadlineArray(b)) <> "" And trim(ReadLineArray(b)) = trim(ReadLineArray(c)) Then
      ' Found a duplicate!  Set it to blank
      ReadLineArray(c) = ""
    End If
  Next
Next

' Copy information into "output.txt" text file (exclude blank lines).
'*********************************************************************
For b = 1 To a
  If trim(ReadlineArray(b)) <> "" Then
    strComputerName = trim(ReadlineArray(b))
    IsConnectible
  End If
Next

' Cierra todos los archivos abiertos
'*********************************************************************
OnlineFile.close
OfflineFile.close

' Let user know the program has completed its operation.
wscript.echo "Finished"
'*********************************************************************

Function IsConnectible

  Dim objPing,objStatus
   
  ' Test to see if the remote machine is online or offline
'*********************************************************************
  Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
  ExecQuery("select Replysize from Win32_PingStatus where address = '" & strComputerName & "'")
   
  ' Test for the status.  If the system is Null or if its offline or does not exist on the network,
  ' then dump the results to "Offline.txt", else, dump it to "online.txt"
'*********************************************************************
  For Each objStatus in objPing
    If  IsNull(objStatus.ReplySize) Then
      ' Machine is offline --> dump the results to "Offline.txt"
      OfflineFile.Writeline strComputerName
    Else
      ' Machine is online  --> dump the results to "Online.txt"
      OnlineFile.Writeline strComputerName
    End If
  Next
   
  ' Destruye las variable de memoria
'*********************************************************************
  Set objPing=Nothing
  Set objStatus=Nothing

End Function



#2
Hola, alguien me pueda ayudar. el problema es el siguiente que una no puedo resolverlo estoy un poco estancado.
Tengo que realizar un script que me resuleva el PING y DNS y toso esto escrtibirlo en un CSV. tengo hasta al momento el codigo pero aun no puedo armarlo dando tantas vueltas ya me quede un poco bloqueado. a ver si alguien mepuede ayudar gracias por todo.


Saludos


Clear
$log = "C:\log.log"
$output = @()
## Validar si el equipo hace PING
$PingMachines = Get-Content "C:\sql.txt"

ForEach($MachineName In $PingMachines){

    $PingStatus = Get-WmiObject Win32_PingStatus -Filter "Address = '$MachineName'" | Select-Object StatusCode
    #$tmp = New-Object Psobject -Property @{Name = $MachineName; Status = $PingStatus.StatusCode}
If ($PingStatus.StatusCode -eq 0){
$output += = "$machines - OK"
    }
Else{
    $output += = "$machines - NO_OK"
        }

## Validar si el equipo resuelve el DNS

$result = $null
    $currentEAP = $ErrorActionPreference
    $ErrorActionPreference = "silentlycontinue"
    $result = [System.Net.Dns]::GetHostbyName($MachineName)
    $ErrorActionPreference = $currentEAP
     
If($Result){
    $output += [string]$Result.HostName
}
Else{
    $output += = "$machines - No HostNameFound"
    }
}
$output | Export-csv c:\export.csv -NoTypeInformation

#3
Hola a todos,

tengo un problema que aun no me puedo aclarar debe ser algo simple pero no da mi cabeza para mas, estoy bloqueado. El problema que tengo es el siguiente.
tengo un Script que realiza lo siguiente.

instala un programa el ejecutable es un .exe
una vez termine de ejecutar como no te hace una acceso directo, lo genero yo. pero el problema es que realiza la primera instruccion y a la misma vez la instruccion del acceso directo. pero como aun no termina la ejecucion del .exe no puede generar el acceso directo. solo me hace la primera parte.
este es el script. alguien me puede dar alguna orientacion

Código (VB) [Seleccionar]


********************************************************************
Option Explicit ' Declaracion de las variables

Dim Wshshell, Command
Dim objShell, objDesktop, objLink 'Variables
Dim strAppPath, strWorkDir, strIconPath 'Variables

' ----------------------------------------------------------'
' Ejecuta el .EXE

Set Wshshell = Wscript.createObject("WScript.Shell")
Command = "mozilla.exe" ' Mozilla.exe es un ejemplo como puede ser cualquier .EXE
WshShell.Run Command ' Ejecuta el comando


' Creación de Acceso Directo Aplicación

' --------------------------------------------------


strWorkDir ="z:\mozilla.exe" ' Directorio donde esta la aplicacion
strAppPath = "d:\mozilla.exe" 'Ruta de la aplicación

Set objShell = CreateObject("WScript.Shell")
objDesktop = objShell.SpecialFolders("D:\Users\Public\Desktop") ' Acceso directo en el escritorio
Set objLink = objShell.CreateShortcut(objDesktop & "\COP - Comptabilitat Organisme Pagador.lnk") ' Nombre del acceso directo

' ---------------------------------------------------
'Propiedades acceso ridercto

objLink.Description = "mozilla"   ' Comentario
'objLink.HotKey = "CTRL+SHIFT+X" ' Teclado de método abreviado
objLink.TargetPath = strAppPath 'Ruta de la aplicación  (Destino)
objLink.WindowStyle = 3
objLink.WorkingDirectory = strWorkDir ' Directorio donde esta la aplicacion (Iniciar en)
objLink.Save ' Guardar

WScript.Quit ' Salir


********************************************************************

Saludos y espero alguna orientacion
#4
Un saludo para todos,

espero que alguien me pueda ayudar soy nuevo en el mundo de script y me gustaria aprender.

bueno mi pregunta es la siguiente. Tengo un servidor de impresoras con mas de 100  impresoras y lo migre a otro servidor, ahora necesito que los usuario se les mapee las impresoras al nuevo servidor, revisando encontre este script que lee desde un excel y mapea las impresoras, mi problema es como puedo cambiar la instruccion del excel para que me lea de una archivo CSV o TXT, adjunto el script para que alguien me pueda ayudar

si se puede reducir el codigo seria excelente.


Saludo

Código (vb) [Seleccionar]
#############################################333
Dim ObjNet,ObjGroup                                  
Dim ComputerName,UserNamedim,CompType                

'###Fin declaración variables#####################################################################

'###creación objetos    

Set OBJnet = CreateObject("WScript.Network")           'crea el objeto net

'###fin creación objetos###########################################################################


'####inicialización  variables#####################################################################

  ComputerName = ObjNet.ComputerName             'no necesita explicación...
  UserName = ObjNet.username                     'coje el nombre
 

'### fin de inicialización variables ##################################################################

'### MAIN ############################################################################################

if not existe then 'Comprueba que existe el fichero c:\temp\existe.txt. si no existe, es la primera vez que se ha entrado
   WScript.Echo "User Name:        " & UserName
   WScript.Echo "computername:     " & ComputerName
   wscript.echo "tipo de máquina : " & tipoMaquina(ComputerName)'Por el tipo de letra del nombre, determina tipo de máquina.

    RemoveAllPrinters 'LAS BORRA TODAS BIEN BORRADAS.
    wscript.echo excel
   createafile 'crea el archivo para no ejecutar más el script.
end if

'###END MAIN ############################################################################################


'###FUNCIONES y RUTINAS ##############################################################################################

Function TipoMaquina(strcomputername)
on error resume next
CompType = ucase(mid(StrComputerName,6,1))                'determina que tipo de maquina es por la letra del nombre                                                                     'Desktop(D),Laptop(L) o server(0)
        select case CompType
case "D" TipoMaquina = "desktop"
case "N" TipoMaquina = "Laptop"
case "0" TipoMaquina= "servidor"
case else TipoMaquina = "error"
       end select

End Function



sub MapDrive(strDrive,strShare)                           'intenta mapear la unidad vía funcion y devuelve error false o true
on error resume next                              ' si no se pone, para en el error y no comprueba el condicinoal del Err
ObjNet.MapNetworkDrive strDrive,strShare
       If Err  Then
ObjNet.RemoveNetworkDrive strDrive
              ObjNet.MapNetworkDrive strDrive,strShare
       End If
End sub



function  Getgroup(user,group) 'devuelve true or false dpendiendo si es del grupo o no. No hay otra manera de hacerlo
Dim DomainName
DomainName = "WinNT://MIDOMINIO/" 'cambiar al dominio propio.
   
         on error resume next

         Set ObjGroup = GetObject(DomainName &group)
          if err then
          wscript.echo "No existe el grupo : "&group
          GetGroup = False
          else
              If ObjGroup.IsMember(DomainName&user) = true Then
        wscript.Echo "si, pertenece al grupo "&group
                    Getgroup = True
              Else
                wscript.Echo "No pertenece al grupo "&group
                Getgroup = False
                End If
                end if
end function

Function Excel

ArrayCols = Array ("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O","P","Q", "R", "S", "T", "U","V","W","X","Y","Z")
                        'Define la tabla con letras, para hacer búsquedas secuenciales en el excel.
 Dim libro
 dim Intfil,Intcol
 dim RutaExcel
 RutaExcel = "\\RUTA_AL_EXCEL"
 set libro = Wscript.CreateObject("Excel.Application")
 call libro.Workbooks.Open(RutaExcel,0)

  libro.Sheets(1).Activate
       Intcol = 0                                 'esto es un hack, para no declarar más veces la variable
do
               IntFil = 1
               if Getgroup (Username,libro.Range(ArrayCols(Intcol) & Intfil).Text) = True then 'Comprueba si el usuario pertenece al grupo 'Recorre las columnas y luego las filas, comparando si es distinto de espacio en blanco, en caso negativo, si la fi
Do while libro.Range(ArrayCols(Intcol) & Intfil+1).Text <>  ""
                              wscript.echo "Instalando la impresora : " & libro.Range(ArrayCols(Intcol) & Intfil+1).Text & " espere... "
                              Objnet.AddWindowsPrinterConnection libro.Range(ArrayCols(Intcol) & Intfil+1).Text  'instala impresora
                              IntFil = IntFil + 1
Loop
                       intfil = 1 'Para volver a la primera fila otra vez y comparar
end if
               Intcol = Intcol + 1
loop while  libro.Range(ArrayCols(Intcol) & Intfil).Text <> ""
       libro.Quit 'IMPORTANTÍSIMOOOOOOOOO. es como los accesos via ADOdb. Se ha de cerrar conexion sino queda zombi
end function

Function RemoveAllPrinters
On Error Resume Next
set objNetwork = CreateObject("wscript.network")
Set objPrinters = objNetwork.EnumPrinterConnections
For i = 0 to objPrinters.Count - 1 Step 2
   PrinterPath = objPrinters.Item(i+1)
   wscript.echo  "eliminando impresora : " & printerpath & " Espere..."
   objNetwork.RemovePrinterConnection PrinterPath, true, true
Next

end function

Function existe
Dim Exist
  Set Exist = CreateObject("Scripting.FileSystemObject")
  If (Exist.FileExists("c:\temp\existe.txt")) Then
   existe = True
  Else
    existe = False
  End If

End Function


Sub CreateAfile
  Dim fso, MyFile
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set MyFile = fso.CreateTextFile("c:\temp\existe.txt", True)
  MyFile.Close
End Sub