Marcelo Ramos

Desenvolvimento em .NET, Banco de Dados e Tecnologia em Geral

Simples Inventário de Máquinas com VBScript

Mais um post de WMI e VBScript. É um script bem simples que usa a Classe Win32_OperatingSystem pra retornar informações da máquina como Sistema Operacional, Service Pack, Serial.
Usando a criatividade, podemos evoluir nele e buscar esses dados de todas as máquinas de nossa rede, tendo assim um inventário de máquinas atualizado de forma bem prática.

Segue :

' "." para computador local ou o nome do computador remoto
strComputer = "."

' Objeto WMI
Set objWMIService = GetObject("winmgmts:\\" _
& strComputer & "\root\cimv2")

' Classe Win32_OperatingSystem
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")

' Loop
For Each objItem in colItems

WScript.Echo "Computador: " & objItem.CSName & VbCr & _
"----------------------------------------------------" & vbCr & _
"Fabricante: " & objItem.Manufacturer & VbCr & _
"Sistema Operacional: " & objItem.Caption & VbCr & _
"Versão: " & objItem.Version & VbCr & _
"Service Pack: " & objItem.CSDVersion & VbCr & _
"CodeSet: " & objItem.CodeSet & VbCr & _
"CountryCode: " & objItem.CountryCode & VbCr & _
"OSLanguage: " & objItem.OSLanguage & VbCr & _
"SerialNumber: " & objItem.SerialNumber

Next

' Finalizando o objeto
Set objWMIService = Nothing


Nosso retorno :



Espero que seja útil

[]s

Posted: jun 06 2009, 17:24 by marcelo | Comentários (81) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Recuperando Informações da BIOS com Windows Management Instrumentation e VBScript

Windows Management Instrumentation, ou simplesmente WMI, é uma biblioteca cujas classes nos permitem obter uma série de informações sobre o sistema.
Vou postar um exemplo simples onde recuperamos alguns dados da BIOS usando a classe Win32_BIOS com VBScript.

'-- Nome do computador remoto, ou simplesmente "." para local
strComputer = "."

'-- Objeto WMI
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

'-- Classe Win32_BIOS
Set colBIOS = objWMIService.ExecQuery _
    ("Select * from Win32_BIOS")

'-- Loop nas propriedades
For each objBIOS in colBIOS
    Wscript.Echo "Build Number: " & objBIOS.BuildNumber & vbCrLf & _
    "Current Language: " & objBIOS.CurrentLanguage & vbCrLf & _
    "Installable Languages: " & objBIOS.InstallableLanguages & vbCrLf & _
    "Manufacturer: " & objBIOS.Manufacturer & vbCrLf & _
    "Name: " & objBIOS.Name & vbCrLf & _
    "Primary BIOS: " & objBIOS.PrimaryBIOS & vbCrLf & _
    "Release Date: " & objBIOS.ReleaseDate & vbCrLf & _
    "Serial Number: " & objBIOS.SerialNumber & vbCrLf & _
    "SMBIOS Version: " & objBIOS.SMBIOSBIOSVersion & vbCrLf & _
    "SMBIOS Major Version: " & objBIOS.SMBIOSMajorVersion & vbCrLf & _
    "SMBIOS Minor Version: " & objBIOS.SMBIOSMinorVersion & vbCrLf & _
    "SMBIOS Present: " & objBIOS.SMBIOSPresent & vbCrLf & _
    "Status: " & objBIOS.Status & vbCrLf & _
    "Version: " & objBIOS.Version
Next

'-- Finaliza objeto WMI
Set objWMIService = Nothing


Salvando o código acima em um arquivo .vbs, ao executá-lo, o resultado é o da imagem abaixo : 




Espero que seja útil
[]s

 

Posted: jun 03 2009, 23:17 by marcelo | Comentários (64) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Pesquisando por Similaridade com as funções SOUNDEX e DIFFERENCE do SQL Server

Imagine a  seguinte situação :

Você manda periodicamente um informativo por email para todos os contatos cadastrados em uma tabela de contatos, com nome e email. Só que você tem notado que muitos emails voltam  por erro de digitação na hora do cadastro, produzindo algo como HOITMAIL ao invéz de HOTMAIL por exemplo. Você precisa corrigir isso, mas como fazer ?

Há duas funções no SQL que podem nos ajudar muito nesse caso. SOUNDEX e DIFFERENCE.
Ambas avaliam semelhança de strings, mas vamos entender melhor na prática.

Vamos criar a Tabela de Contatos
CREATE
TABLE DBO.CONTATOS
(     
ID    INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
     
NOME  VARCHAR(100) NOT NULL,
     
EMAIL VARCHAR(100) NOT NULL
)
GO

Inserir os Dados Simulando o Problema
INSERT INTO DBO.CONTATOS( NOME, EMAIL )
-- HOTMAIL SEM ERRO DE DIGITAÇÃO
SELECT 'MARCELO', 'MARCELO@HOTMAIL.COM' UNION ALL
-- AQUI INSERIMOS 4 VARIAÇÕES COM ERRO DE CONTAS HOTMAIL,
-- HOTMAL, HOITMAIL, HOITMAI e HOTMAIL.COM.BR
SELECT 'JOAO', 'JOAO@HOTMAL.COM'             UNION ALL
SELECT 'MARIA', 'MARIA@HOITMAIL.COM'         UNION ALL
SELECT 'JOSE', 'JOSE@HOITMAI.COM'            UNION ALL
SELECT 'ANTONIO', 'ANTONIO@HOTMAIL.COM.BR'   UNION ALL
-- AQUI MAIS 3 CONTAS DE OUTROS PROVEDORES PRA SIMULAR
-- VARIEDADE DE DOMINIOS
SELECT 'FULANO'   , 'FULANO@GMAIL.COM'         UNION ALL
SELECT 'BELTRANO' , 'BELTRANO@TERRA.COM.BR'   UNION ALL
SELECT 'CICLANO'  , 'CICLANO@YAHOO.COM'
GO

Depois disso, teremos nossa tabela populada como na imagem abaixo :

Com todo o ambiente montado, agora podemos fazer nossas buscas usando SOUNDEX e DIFFERENCE. Lembrando que nosso objetivo é trazer os emails HOTMAIL e as variações causadas por erros de digitação como HOITMAIL, HOTMAL e HOTMAIL.COM.BR para que possamos corrigir a base e diminuir os emails retornados.

Usando SOUNDEX
A sintaxe é essa : 
SELECT * FROM TABELA
WHERE SOUNDEX( COLUNA ) = SOUNDEX( 'VALOR A COMPARAR' )
Para o nosso caso fica assim :
SELECT
* FROM DBO.CONTATOS
WHERE SOUNDEX(         
RIGHT( EMAIL, LEN( EMAIL ) - CHARINDEX('@', EMAIL ) ) 
     
) = SOUNDEX( 'HOTMAIL.COM' ) 

No Script acima, RIGHT( EMAIL, LEN( EMAIL ) - CHARINDEX('@', EMAIL ) )
nos retorna a parte do email após o @, e comparamos isso a HOTMAIL.COM

O resultado será o seguinte : 

Repare que conseguimos o email correto e as variações com erros de digitação. Com isso podemos efetuar a correção com um UPDATE simples, fazendo uso da função REPLACE.

UPDATE
DBO.CONTATOS
SET EMAIL = REPLACE( EMAIL,                  
RIGHT( EMAIL, LEN( EMAIL ) - CHARINDEX('@', EMAIL ) ),                 
'HOTMAIL.COM'
)
FROM DBO.CONTATOS
WHERE SOUNDEX( 
RIGHT( EMAIL, LEN( EMAIL ) - CHARINDEX('@', EMAIL ) )      
) = SOUNDEX( 'HOTMAIL.COM' )

Após rodar nosso UPDATE, teremos os 4 registros acertados 

Vamos ao mesmo exemplo usando a função DIFFERENCE.

A sintaxe :
SELECT * FROM TABELA

WHERE DIFFERENCE( COLUNA, 'VALOR A COMPARAR' )
= NIVEL DE SIMILARIDADE


O nível de similaridade é um inteiro e o valor máximo é 4 e o mínimo é 0.
No nosso exemplo :
SELECT *
     
FROM  DBO.CONTATOS
     
WHERE DIFFERENCE(
           
RIGHT( EMAIL, LEN( EMAIL ) - CHARINDEX( '@', EMAIL ) )
                 
, 'HOTMAIL.COM' ) = 4

Obtemos o mesmo resultado que usando SOUNDEX.


Podendo também fazer um UPDATE com REPLACE pra corrigir os erros de digitação.
UPDATE DBO.CONTATOS

SET EMAIL = REPLACE(           
EMAIL,
           
RIGHT( EMAIL, LEN( EMAIL ) - CHARINDEX('@', EMAIL ) ),
           
'HOTMAIL.COM'
           
)    
FROM  DBO.CONTATOS
WHERE DIFFERENCE(            
RIGHT( EMAIL, LEN( EMAIL ) - CHARINDEX( '@', EMAIL ) )
           
, 'HOTMAIL.COM' ) = 4

Resultados corrigidos :

Lembrando que o 4 é o nível máximo de similaridade, podendo ser alterado pra que a busca fique mais flexível.

Espero que seja útil.
Aguardem os próximos artigos de SQL.

[]s

Artigo para download em DOC e PDF
Download em DOC Download em PDF

REPLACE (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms186862.aspx
RIGHT (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms177532.aspx
SOUNDEX (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms187384.aspx

DIFFERENCE (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms188753.aspx

Posted: mai 30 2009, 22:12 by marcelo | Comentários (47) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: Dicas de Tecnologia | SQL

Impedir múltiplos logons em uma rede com Active Directory

Em parceria com o Portal Tecnologia, blog mantido pelo amigo Tiago Souza, Administrador de Redes, publicamos um passo a passo de como implementar uma funcionalidade similar a alguns softwares de mercado como o Limit Login da Microsoft, a limitação de multiplos logins de uma rede com Active Directory. Tudo feito de forma bem mais simples que os conhecidos softwares, mas muito prática e funcional.

Espero que seja útil.
Críticas e opiniões serão muito bem vindas, confiram!

http://www.portaltecnologia.net/2009/05/27/como-impedir-multiplos-logons-em-uma-rede-com-active-directory/

[]s

Posted: mai 27 2009, 21:39 by marcelo | Comentários (18) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: Dicas de Tecnologia | SQL | Infra

21 melhores geradores de Favicon da Internet

Apenas uma rápida dica.

No site http://neosite.ilogic.com.br/dicas/2007/08/21-melhores-geradores-de-favicon-da-internet.html
você encontra uma lista de 21 sites gratuitos para geração de favicons.



[]s
Marcelo

 

Posted: abr 25 2009, 12:42 by marcelo | Comentários (10) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: Dicas de Tecnologia