Usuário com melhor resposta
Script de logon/logoff gerando arquivo txt

Pergunta
-
Pessoal,
Gostaria de uma ajuda para gerar um script de logon/logoff dos meus usuários aqui na rede.
Eu criei pesquisando o fórum o seguinte script :
Option Explicit
Dim objFSO, objLogFile, objNetwork, objShell, strText, intAns
Dim intConstants, intTimeout, strTitle, intCount, blnLog
Dim strUserName, strComputerName, strIP, strShare, strLogFile
Dim fso, sf, StrNew
Const ForAppending = 8
Set fso = CreateObject("Scripting.FileSystemObject")
strShare = "\\cronos\logs$"
strLogFile = "logonoff.txt"
intTimeout = 20
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objNetwork = CreateObject("Wscript.Network")
Set objShell = CreateObject("Wscript.Shell")
strUserName = objNetwork.UserName
strComputerName = objNetwork.ComputerName
If objFSO.FolderExists(strShare) Then
On Error Resume Next
Set objLogFile = objFSO.OpenTextFile(strShare & "\" & strLogFile, 8, True, 0)
If Err.Number = 0 Then
intCount = 1
blnLog = False
Do Until intCount = 3
objLogFile.WriteLine "Logon " & Now & " " & strComputerName & " " & strUserName
If Err.Number = 0 Then
intCount = 3
blnLog = True
Else
Err.Clear
intCount = intCount + 1
If Wscript.Version > 5 Then
Wscript.Sleep 200
End If
End If
Loop
On Error GoTo 0
Dim fa, fb, f, s, OpSysSet
Set objFSO = Nothing
Set objNetwork = Nothing
Set objShell = Nothing
Wscript.Quit
Que me gera a saída :
Logon 25/1/2007 10:38:27 EROS paulo
Tenho outro pra logoff no mesmo formato que me gera :
Logoff 25/1/2007 10:35:26 EROS paulo
*** Queria que, entre minha máquina e login do usuário, aparecesse o IP da máquina.
Já tentei uma variável chamada :
objAdapter.IPAddress
Onde declaro da seguinte forma :
strUserName = objNetwork.UserName
strComputerName = objNetwork.ComputerName
strIPAddress = objAdapter.IPAddress
e incluo na impressão, assim como username e computername, mas não funciona, pois dá erro.
O que estou fazendo de errado?
Respostas
-
Caro Ricardo, muito obrigado pelo seu retorno, era justamente o que eu queria.
Funcionou aqui, porém com um detalhe, faltou declarar a variável i (em destaque logo abaixo), conforme erro que gera na hora de rodar o script.
Abraços a todos!
Fiz o acerto e o script na íntegra ficou assim :
Option Explicit
Dim objFSO, objLogFile, objNetwork, objShell, strText, intAns, strComputer, objWMIService
Dim intConstants, intTimeout, strTitle, intCount, blnLog, IPconfigSet, Ipconfig, IP
Dim strUserName, strComputerName, strIP, strShare, strLogFile
Dim fso, sf, StrNew
Const ForAppending = 8Set fso = CreateObject("Scripting.FileSystemObject")
strComputer = "."
strShare = "\\cronos\logs$"
strLogFile = "logonoff.txt"
intTimeout = 20Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objNetwork = CreateObject("Wscript.Network")
Set objShell = CreateObject("Wscript.Shell")Set IPConfigSet = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE")
strUserName = objNetwork.UserName
strComputerName = objNetwork.ComputerNameFor Each IPConfig in IPConfigSet
If Not IsNull(IPConfig.IPAddress) Then
For i=LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
IP = IPConfig.IPAddress(i)
Next
End If
NextIf objFSO.FolderExists(strShare) Then
On Error Resume Next
Set objLogFile = objFSO.OpenTextFile(strShare & "\" & strLogFile, 8, True, 0)
If Err.Number = 0 Then
intCount = 1
blnLog = False
Do Until intCount = 3
objLogFile.WriteLine "Logon " & Now & " " & strComputerName & " " & strUserName & " com o ip " & IP
If Err.Number = 0 Then
intCount = 3
blnLog = True
Else
Err.Clear
intCount = intCount + 1
If Wscript.Version > 5 Then
Wscript.Sleep 200
End If
End If
Loop
' On Error GoTo 0
End If
End If
Dim fa, fb, f, s, OpSysSet, iSet objFSO = Nothing
Set objNetwork = Nothing
Set objShell = NothingWscript.Quit
Todas as Respostas
-
O endereço IP não pode ser obtido diretamente pelo Windows Script Host. No entanto, existem várias formas de se fazer isso... abaixo tem uma delas, via WMI (e que não deve funcionar no 98SE padrão... a não ser que vc instale o WMICore)
http://www.microsoft.com/technet/scriptcenter/scripts/network/client/list/nwlsvb01.mspx
[]s,
Vinicius -
Fala Vinicius, blz?
Eu já tinha lido e até executei esse script aqui na empresa e funciona de boa, mas não queria imprimir em tela...
Eu peguei o script abaixo, aqui mesmo no fórum e adaptei ele, só que tem muita coisa desnecessária, e o que eu queria mesmo era somente o básico, como eu disse acima.
O problema é que não sei aonde estou errando para o script não funcionar, tipo, alguma variável declarada erradamente.
O script abaixo funciona de boa, porém tem informações desnecessárias.
Pode me ajudar ?
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\"& strComputer & "\root\cimv2")
Set colAdapters = objWMIService.ExecQuery ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
Set oNetwork = CreateObject("WScript.Network")
Dim fso, sf, StrNew
Const ForAppending = 8
Set fso = CreateObject("Scripting.FileSystemObject")
systime = Now()
StrNew="\\cronos\Logs$\" & cstr(year(systime)) & "-" & cstr(month(systime)) & "-" & cstr(day(systime)) & ".txt"
set sf=fso.OpenTextFile (StrNew, ForAppending, True)
sf.writeline ""
sf.writeline "=== Informações do Logon de Usuário ==="
sf.writeline ""
sf.writeline "Data: " & cstr(Date())
sf.writeline "Hora: " & cstr(Time())
sf.writeline ""
sf.writeline " Nome de Usuário : " & oNetwork.UserName
sf.writeline ""
sf.writeline "=== Listando dispositivos de Rede ==="
n = 1
For Each objAdapter in colAdapters
sf.writeline ""
sf.writeline " * Adaptador N.º " & n
sf.writeline ""
sf.writeline " Descrição : " & objAdapter.Description
sf.writeline " Endereço Físico (MAC) : " & objAdapter.MACAddress
sf.writeline " Nome de Host : " & objAdapter.DNSHostName
If Not IsNull(objAdapter.IPAddress) Then
For i = 0 To UBound(objAdapter.IPAddress)
sf.writeline " Endereço IP : " & objAdapter.IPAddress(i)
Next
End If
If Not IsNull(objAdapter.IPSubnet) Then
For i = 0 To UBound(objAdapter.IPSubnet)
sf.writeline " Mascara : " & objAdapter.IPSubnet(i)
Next
End If
If Not IsNull(objAdapter.DefaultIPGateway) Then
For i = 0 To UBound(objAdapter.DefaultIPGateway)
sf.writeline " Gateway : " & objAdapter.DefaultIPGateway(i)
Next
End If
n = n + 1
Nextsf.writeline ""
sf.writeline "=== FIM ==="
sf.closeWscript.Quit
-
Bem pelo o que eu li vc queria colocar o IP da maquina no log támbem.
Então ta ae agora no log ele tambem coloca o IP
--------------------------
Option Explicit
Dim objFSO, objLogFile, objNetwork, objShell, strText, intAns, strComputer, objWMIService
Dim intConstants, intTimeout, strTitle, intCount, blnLog, IPconfigSet, Ipconfig, IP
Dim strUserName, strComputerName, strIP, strShare, strLogFile
Dim fso, sf, StrNew
Const ForAppending = 8Set fso = CreateObject("Scripting.FileSystemObject")
strComputer = "."
strShare = "\\cronos\logs$"
strLogFile = "logonoff.txt"
intTimeout = 20Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objNetwork = CreateObject("Wscript.Network")
Set objShell = CreateObject("Wscript.Shell")Set IPConfigSet = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE")
strUserName = objNetwork.UserName
strComputerName = objNetwork.ComputerNameFor Each IPConfig in IPConfigSet
If Not IsNull(IPConfig.IPAddress) Then
For i=LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
IP = IPConfig.IPAddress(i)
Next
End If
NextIf objFSO.FolderExists(strShare) Then
On Error Resume Next
Set objLogFile = objFSO.OpenTextFile(strShare & "\" & strLogFile, 8, True, 0)
If Err.Number = 0 Then
intCount = 1
blnLog = False
Do Until intCount = 3
objLogFile.WriteLine "Logon " & Now & " " & strComputerName & " " & strUserName & " com o ip " & IP
If Err.Number = 0 Then
intCount = 3
blnLog = True
Else
Err.Clear
intCount = intCount + 1
If Wscript.Version > 5 Then
Wscript.Sleep 200
End If
End If
Loop
' On Error GoTo 0
End If
End If
Dim fa, fb, f, s, OpSysSetSet objFSO = Nothing
Set objNetwork = Nothing
Set objShell = NothingWscript.Quit
-
Caro Ricardo, muito obrigado pelo seu retorno, era justamente o que eu queria.
Funcionou aqui, porém com um detalhe, faltou declarar a variável i (em destaque logo abaixo), conforme erro que gera na hora de rodar o script.
Abraços a todos!
Fiz o acerto e o script na íntegra ficou assim :
Option Explicit
Dim objFSO, objLogFile, objNetwork, objShell, strText, intAns, strComputer, objWMIService
Dim intConstants, intTimeout, strTitle, intCount, blnLog, IPconfigSet, Ipconfig, IP
Dim strUserName, strComputerName, strIP, strShare, strLogFile
Dim fso, sf, StrNew
Const ForAppending = 8Set fso = CreateObject("Scripting.FileSystemObject")
strComputer = "."
strShare = "\\cronos\logs$"
strLogFile = "logonoff.txt"
intTimeout = 20Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objNetwork = CreateObject("Wscript.Network")
Set objShell = CreateObject("Wscript.Shell")Set IPConfigSet = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE")
strUserName = objNetwork.UserName
strComputerName = objNetwork.ComputerNameFor Each IPConfig in IPConfigSet
If Not IsNull(IPConfig.IPAddress) Then
For i=LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
IP = IPConfig.IPAddress(i)
Next
End If
NextIf objFSO.FolderExists(strShare) Then
On Error Resume Next
Set objLogFile = objFSO.OpenTextFile(strShare & "\" & strLogFile, 8, True, 0)
If Err.Number = 0 Then
intCount = 1
blnLog = False
Do Until intCount = 3
objLogFile.WriteLine "Logon " & Now & " " & strComputerName & " " & strUserName & " com o ip " & IP
If Err.Number = 0 Then
intCount = 3
blnLog = True
Else
Err.Clear
intCount = intCount + 1
If Wscript.Version > 5 Then
Wscript.Sleep 200
End If
End If
Loop
' On Error GoTo 0
End If
End If
Dim fa, fb, f, s, OpSysSet, iSet objFSO = Nothing
Set objNetwork = Nothing
Set objShell = NothingWscript.Quit
-
-
-
-
-
-
Bom dia Paulo, agraqdeço sua atenção mas como comecei a pesquisar hoje sobre scripts do AD e ainda nao possuo tanta habilidade, pesso sua ajuda para me explicar como faco para por esse script para funcionar porque nao entendi muito bem.
Abusando um pouco da sua boa vontade hehehe, seria possivel por para ele gerar esse log diário por exemplo o arquivo a ser gerado por exemplo ser nomeado 05022007 e amanha o script gerar um novo arquivo no final do dia com a data do dia e o relatorio de login e logoff ?
Tenha um bom dia.
-
Cara,
Eu tenho um aqui, inclusive achei no fórum, só que não lembro aonde achei e de quem é.
Vc no caso teria que adaptá-lo ao que eu tb adaptei.
Segue abaixo :
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\"& strComputer & "\root\cimv2")
Set colAdapters = objWMIService.ExecQuery ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
Set oNetwork = CreateObject("WScript.Network")
Dim fso, sf, StrNew
Const ForAppending = 8
Set fso = CreateObject("Scripting.FileSystemObject")
systime = Now()
StrNew="\\servidor\Logs$\" & cstr(year(systime)) & "-" & cstr(month(systime)) & "-" & cstr(day(systime)) & ".txt"
set sf=fso.OpenTextFile (StrNew, ForAppending, True)
sf.writeline ""
sf.writeline "=== Informações do Logon de Usuário ==="
sf.writeline ""
sf.writeline "Data: " & cstr(Date())
sf.writeline "Hora: " & cstr(Time())
sf.writeline ""
sf.writeline " Nome de Usuário : " & oNetwork.UserName
sf.writeline ""
sf.writeline "=== Listando dispositivos de Rede ==="
n = 1
For Each objAdapter in colAdapters
sf.writeline ""
sf.writeline " * Adaptador N.º " & n
sf.writeline ""
sf.writeline " Descrição : " & objAdapter.Description
sf.writeline " Endereço Físico (MAC) : " & objAdapter.MACAddress
sf.writeline " Nome de Host : " & objAdapter.DNSHostName
If Not IsNull(objAdapter.IPAddress) Then
For i = 0 To UBound(objAdapter.IPAddress)
sf.writeline " Endereço IP : " & objAdapter.IPAddress(i)
Next
End If
If Not IsNull(objAdapter.IPSubnet) Then
For i = 0 To UBound(objAdapter.IPSubnet)
sf.writeline " Mascara : " & objAdapter.IPSubnet(i)
Next
End If
If Not IsNull(objAdapter.DefaultIPGateway) Then
For i = 0 To UBound(objAdapter.DefaultIPGateway)
sf.writeline " Gateway : " & objAdapter.DefaultIPGateway(i)
Next
End If
n = n + 1
Nextsf.writeline ""
sf.writeline "=== FIM ==="
sf.closeWscript.Quit
==========================================
Existe uma série de informações desnecessárias, como mascara de rede, placa de rede, pelo menos pra mim.
Aonde coloquei de azul é a informação que imprime da forma q vc quer, mas tem q ver as variáveis e objetos, pois são scripts diferentes!
Já que vc também está aprendendo, faça as adaptações e poste o resultado, pois vai ser útil pra todo mundo!Abraços