Crear y Eliminar fichero txt en el mismo script

Iniciado por palophp, 17 Octubre 2016, 20:29 PM

0 Miembros y 1 Visitante están viendo este tema.

palophp

Hola.
He creado un script para realizar una consulta LDAP para obtener todos los equipos y me los escribe en un fichero txt.
Luego voy recorriendo equipo por equipo para ver si hace ping. Aquellos que me hace ping los escribo en otro txt.
Ahora lo que quiero es borrar el fichero txt del principio donde he guardado la consulta al Directorio Activo pero no lo consigo.

He probado a borrar ficheros y si que lo consigo, pero no cuando los creo y elimino en el mismo script.

Set fso = CreateObject("Scripting.FileSystemObject")
... y todo el codigo
y al finalizar pongo:
fso.DeleteFile "C:\rutaDelFichero.txt"

Y no me lo borra, me lo sigue manteniendo....

okik

Hazlo  así
Código (vb) [Seleccionar]

Set delFile = fso.GetFile(FileName)
delFile.Delete



ejemplo
Código (vb) [Seleccionar]
Dim FilenName As String
Dim fso As Object
Dim MyFile As Object
Dim delFile As Object
FileName = "D:\testfile.txt"

Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("D:\testfile.txt", True)
MyFile.WriteLine "Hello world!"
MyFile.Close


Set delFile = fso.GetFile(FileName)
delFile.Delete

palophp

#2
Hola, muchísimas gracias por tu aportación. Lo he probado pero no hay manera.
Seguro que mi codigo tiene muchos errores, porque estoy iniciándome.
Te pongo mi código por si lo pudieras mirar:

Código (vb) [Seleccionar]

'------------------------SCRIPT APAGADO EQUIPOS
Dim FicheroOriginal
Dim objFSO_Lista_Equipos_LDAP
Dim objLista_Equipos
Dim delFile
FicheroOriginal = "C:\Users\toshiba\Desktop\apagadoEquipos.txt"

Set objFSO_Lista_Equipos_LDAP=CreateObject("Scripting.FileSystemObject")

'-----------------------CONSULTA LDAP PARA OBTENER LOS NOMBRES DE LOS EQUIPOS

'Comprobación de la existencia del Fichero
If  objFSO_Lista_Equipos_LDAP.FileExists (FicheroOriginal) Then
Set objLista_Equipos = objFSO_Lista_Equipos_LDAP.CreateTextFile (FicheroOriginal) ' Se machaca automaticamente cada vez
Else
Set objLista_Equipos = objFSO_Lista_Equipos_LDAP.CreateTextFile (FicheroOriginal) ' Creación del Fichero
End If

On Error Resume Next
'Conectar con LDAP como administrador
Set objComp = GetObject("LDAP:")

'Validación en el Directorio Activo
Set ou = objComp.OpenDSObject("LDAP://palo.age/OU=Domain Controllers, DC=palo,DC=age", "toshiba", "I2016", 1)

'Bucle para obtener todos los Equipos de Sanidad e irlos escribiendo en el fichero
For Each obj In ou
objLista_Equipos.WriteLine (obj.cn)
Next

'-------------------------COMPROBACION DEL PING A LOS EQUIPOS

Function responde_al_ping (StrEquipo)

strComputer = "."

'Variable para obtener los permisos remotamente = admin
Set objWMIService = GetObject("winmgmts:" _
   & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

'Variable Ping Equipos
Set pingEquipos = objWMIService.ExecQuery _
   ("Select * from Win32_PingStatus Where Address = '" & StrEquipo &".palo.age" & "'")

For Each objComputer in pingEquipos
   If objComputer.StatusCode = 0 Then
       
   responde_al_ping = True
   Else
       
   responde_al_ping = false
  End If
Next

End Function

Const ForReading = 1, ForWriting = 2
Dim TabStop, NewLine
TabStop = Chr(9)
NewLine = Chr(10)

'Variable Fecha
MyDate = Replace(Date, "/", "-")

Set objFichero_Log = CreateObject("Scripting.FileSystemObject")
Set objConsulta_PING = objFSO_Lista_Equipos_LDAP.OpenTextFile("C:\Users\toshiba\Desktop\apagadoEquipos.txt", ForReading)
Set objConsulta_PING2 = objFichero_Log.OpenTextFile("C:\Users\toshiba\Desktop\" & mydate & "_Log.txt", ForWriting, True)
Do Until objConsulta_PING.AtEndOfStream
StrEquipo = objConsulta_PING.ReadLine

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 & " " & "Hace PING")
Next

'Establecemos control de errores
On Error Resume Next

'Variable para obtener los permisos remotamente = admin
   Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,(Shutdown)}!\\" & StrEquipo &".palo.age" & "\root\cimv2")
   
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
   For Each objOperatingSystem in colOperatingSystems
       ObjOperatingSystem.Win32Shutdown(1)
Next
   
else
   objConsulta_PING2.WriteLine StrEquipo & TabStop & " No se ha podido apagar"
end if
Loop

'Borrar Fichero con todos los EQUIPOS
Set delFile = objFSO_Lista_Equipos_LDAP.GetFile(FicheroOriginal)
delFile.Delete



okik

Te has fijado que he puesto:
MyFile.Close

Sin no cierras el archivo no lo podrás borrar

Código (vb) [Seleccionar]
objLista_Equipos.Close
Set delFile = objFSO_Lista_Equipos_LDAP.GetFile(FicheroOriginal)
delFile.Delete


palophp

Lo acabo de añadir y sigue igual...
He probado tu codigo aparte y si que me funciona, pero modificando el mio y añadiendo lo
tuyo nada de nada  :(

okik

#5
quizás sea por el bucle Do/Loop,  quítalo momentáneamente y dale al código a ver si te lo borra





Yo te he puesto
CitarobjLista_Equipos.Close

Porque no me había fijado que tienes mezclado tres partes de código.  objLista_Equipos lo tienes declarado en otra parte. Que lio.

sería

objConsulta_PING.Close
Set delFile = objFSO_Lista_Equipos_LDAP.GetFile(FicheroOriginal)
delFile.Delete


palophp

Que va, he quitado el bucle y sigue igual.
Voy a mirarlo de nuevo, pero me lo he mirado mil veces y no hay manera.
Muchas gracias por tu ayuda.

okik

Cita de: palophp en 18 Octubre 2016, 22:23 PM
Que va, he quitado el bucle y sigue igual.
Voy a mirarlo de nuevo, pero me lo he mirado mil veces y no hay manera.
Muchas gracias por tu ayuda.

Estaba editando mientras respondias mira

el archivo lo abres con el objeto objConsulta_PING ..>  "Set objConsulta_PING = objFSO_Lista_Equipos_LDAP.OpenTextFile..· y para cerrarlo pus debes usar Close con ese objeto.


objConsulta_PING.Close
Set delFile = objFSO_Lista_Equipos_LDAP.GetFile(FicheroOriginal)
delFile.Delete

palophp

Diooooooooos!! Muchisimas gracias! :D :D :D
Ahora sí, se me había olvidado cerrar ese fichero.
Ahora solo me falta lo del CN jaajajjaja