Buenas ando mirando codigos en VBS para editararchivos
En este caso especifico quisiera editar el archivo HOsts del windows
c:\windows\system32\drivers\etc\hosts
estuve leyendo y es con Set.FileSystemObject ,
pero quisiera saber un codigo donde tenga el manifest , osea para que edite en Windows 7 alguna ayuda ?
Cita de: softer2 en 16 Julio 2014, 04:50 AMestuve leyendo y es con Set.FileSystemObject
FileSystemObject es un objeto:
http://msdn.microsoft.com/en-us/library/aa242706%28v=vs.60%29.aspx
El cual proporciona métodos para crear un archivo, escribir, etc... basicamente son métodos para llevar a cado tareas relacionadas con el
FileSystem de Windows:
http://msdn.microsoft.com/en-us/library/6tkce7xa%28v=vs.84%29.aspx
Por lo tanto si, te sirve para la tarea, usando los métodos de escritura, ya que el archivo HOSTS no es más que un archivo de texto plano.
PD: Creo que deberías estudiar los conceptos básicos, la sintaxis del lenguaje, y demás, si realmente estás interesado en desarrollar códigos propios:
http://msdn.microsoft.com/en-us/library/0ad0dkea%28v=vs.84%29.aspx
Cita de: softer2 en 16 Julio 2014, 04:50 AMquisiera saber un codigo donde tenga el manifest, osea para que edite en Windows 7 alguna ayuda ?
No he entendido tu pregunta, no debes interactuar con ningún ".manifest" para editar un archivo de texto.
Respecto a proporcionarte un código, la verdad es que no se si buscas un set completo de edición que te permita eliminar, modificar, y añadir entradas, o que es lo que buscas exactamente, así que te haré dos ejemplos básicos:
Sub AddEntry(ByVal Ip, Byval Alias)
Const HostsFile = "C:\Windows\System32\Drivers\etc\Hosts"
Set objHosts = CreateObject("Scripting.FileSystemObject"). _
OpenTextFile(HostsFile, 8, True)
objHosts.Writeline(vbNewLine & Ip & vbtab & Alias)
objHosts.Close
End Sub
Function GetAliases(ByVal Ip)
Dim Aliases
Const HostsFile = "C:\Windows\System32\Drivers\etc\Hosts"
Set objHosts = CreateObject("Scripting.FileSystemObject"). _
OpenTextFile(HostsFile, 1)
Do Until objHosts.AtEndOfStream
HostEntry = Split(Replace(objHosts.Readline, vbTab, " "), " ")
HostIP = Trim(HostEntry(0))
HostAlias = Trim(HostEntry(1))
On Error Resume Next
If HostIP = Ip Then
Aliases = Aliases & HostAlias & vbNewLine
End If
Loop
objHosts.Close
GetAliases = Split(Aliases, vbNewLine)
End Function
Ejemplos de uso:
AddEntry("LOCALHOST", "www.test.com")
MsgBox(GetAliases("LOCALHOST")(0))
Saludos.
EDITO: Una Helper Class gigantesca con todos los métodos que puedas llegar a necesitar:
www.codeproject.com/Articles/11354/VBScript-for-reading-and-writing-to-the-Windows-ho
Wauo muxas gracias por el codigo
NOse si me dejo explicar con eso del manifest , OSEA con archivos que estan en Windows se necesita elevar privilegios para poder modificar algun archivo ( en vb6 lo hacia con manifest)
y lo que si andaba queriendo exatamente era , que
1: Abrir el archivo hosts y borrar su contenido y poner mi contenido
o
2: Eliminar el archivo hosts y crear uno nuevo con el contenido especifico que quiera
EDITADO : osea a esto me refiero
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "wscript.exe", Chr(34) & WScript.ScriptFullName & Chr(34) & " RunAsAdministrator", "", "runas", 1
EL codigo ya esta en si .sube prvilegios , abre y añade 1 linea al archivo
Pero lo que quiero es borrar todo el contenido del archivo hosts y añadir recien mis lineas
espero se entienda
Cita de: softer2 en 16 Julio 2014, 19:50 PM
lo que quiero es borrar todo el contenido del archivo hosts y añadir recien mis lineas
Cuando instancies el objeto, asigna el valor correcto para el parámetro
IOmode (ForWriting).
http://msdn.microsoft.com/en-us/library/314cz14s%28v=vs.84%29.aspx
Ejemplo:
CreateObject("Scripting.FileSystemObject").OpenTextFile(HostsFile, 2, True)
Entonces, cuando uses el método
Write/WriteLine, se reemplazará el contenido existente del archivo, y podrás seguír utilizando dicho método para continuar escribiendo, hasta que liberes el objeto con el método
Close.
Ejemplo:
Const HostsFile = "C:\Windows\System32\Drivers\etc\Hosts"
Set objHosts = CreateObject("Scripting.FileSystemObject"). _
OpenTextFile(HostsFile, 2, True)
With objHosts
.Writeline(vbNewLine)
.Writeline("127.0.0.1" & vbtab & "www.1.com")
.Writeline("127.0.0.2" & vbtab & "www.2.com")
.Writeline("127.0.0.3" & vbtab & "www.3.com")
.Close
End With
Saludos.
Execelente era lo que buscaba
gracias por tu ayuda
Adjuntando el codigo de elevar privilegios en W7 al script queda muybien
si funciona en W7 y W8 el problema es el sigiente
que tambien en Windows XP , al ejecutar el script tbm pide ejecutar como administrador
QUuisiera saber como hacer para que primero el script decte el S.O
Si es XP ejecutar el scrip sin elevarle privilegios
y si es Wvista o W7 o W8 ejecutar el script donde le subo privilegios ..
espero su ayuda , recien ando aprendiendo esto del VBS
Cita de: softer2 en 17 Julio 2014, 16:58 PMespero su ayuda , recien ando aprendiendo esto del VBS
Puedes hacer una query a WMI para obtener la versión NT del Windows operativo actual.
San-Google está lleno de ejemplos como
este (http://bit.ly/1qLaxej), y como este otro:
Set dtmConvertedDate = CreateObject("WbemScripting.SWbemDateTime")
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set oss = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")
For Each os in oss
Wscript.Echo "Caption: " & os.Caption
Wscript.Echo "Version: " & os.Version
Next
+
List of Microsoft Windows versions (http://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions)
Así pues, si la versión NT empieza por "5.1" o "5.2", será XP, si empieza por "6.1" será Win7, y si empieza por "6.2" o "6.3" será Windows 8/8.1.
+
VBScript Left Function (http://www.w3schools.com/vbscript/func_left.asp)
If Left(os.Version, 2) = "5.1" Then ...
PD: El nombre a mostrar del OS puede variar, pero la versión NT no, por eso te sugiero evitar parsear el
Caption.
Saludos
Impresionante
MUxas gracias yo estaba buscando condicionales basado en la caption ya me estaba echando un mundo con if else if else por cada caption pero con la version ya seria mucho mas rapido y mucho mas seguro ya que cada pc tiene nombre distintos
gracias por la ayuda sos un capo