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
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
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
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
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
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