Propósito

✔ Programação GLOBAL® - Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog devem ser tratados como consultoria freelance. Queiram contatar-nos: brazilsalesforceeffectiveness@gmail.com | ESTE BLOG NÃO SE RESPONSABILIZA POR QUAISQUER DANOS PROVENIENTES DO USO DOS CÓDIGOS AQUI POSTADOS EM APLICAÇÕES PESSOAIS OU DE TERCEIROS.

.: Vitrine

Carregando artigos...

Views

Mostrando postagens com marcador WMI. Mostrar todas as postagens
Mostrando postagens com marcador WMI. Mostrar todas as postagens

Exponha os segredos do sistema WMI API com o VBA

Exponha os segredos do sistema WMI API com o VBA




A API WMIWindows Management Instrumentation ) expõe uma grande variedade de informações dos PCs, incluindo aqueles computadores e servidores que estão remotos. Expor tais técnicas pretende automatizar o WMI como um meio de automatizar as tarefas administrativas nos computadores remotos. Segue uma lista curta de coisas que o WMI pode fazer.
  • Inicia um processo em um computador remoto.
  • Agenda um processo para ser executado em horários específicos em dias específicos.
  • Reinicia um computador remotamente.
  • Consulta os logs de eventos do Windows em um computador local ou remoto.
  • Obtém uma lista de computadores locais ou remotos de:
    • Aplicações
    • Componentes de Hardware
    • Discos, Capacidades e Espaço Livre
    • Usuários locais e de domínio
    • Impressoras e Configurações de Impressora
    • Configurações de rede
Com o VBA, o Excel pode acessar o WMI e se tornar uma ferramenta poderosa para técnicos de PC, administradores de rede e auditores de sistema


Quer um vislumbre?
Segue uma pequena rotina que lista a configuração do adaptador de rede do seu PC. Carregue-o num módulo. Execute-o. Agora considere que olhar para o adaptador de rede WMI poderá fazer muito mais do que apenas isso (e isso sim, é assustador).


Sub WMI() 
Dim oWMISrvEx As Object 'SWbemServicesEx 
Dim oWMIObjSet As Object 'SWbemServicesObjectSet 
Dim oWMIObjEx As Object 'SWbemObjectEx 
Dim oWMIProp As Object 'SWbemProperty 
Dim sWQL As String 'WQL Statement 
Dim n As Long 'Generic Counter 
sWQL = "Select * From Win32_NetworkAdapterConfiguration" 
Set oWMISrvEx = GetObject("winmgmts:root/CIMV2") 
Set oWMIObjSet = oWMISrvEx.ExecQuery(sWQL) 
For Each oWMIObjEx In oWMIObjSet 
'Put a STOP here then View > Locals Window to see all properties 
If Not IsNull(oWMIObjEx.IPAddress) Then 
Debug.Print "IP:"; oWMIObjEx.IPAddress(0) 
Debug.Print "Host name:"; oWMIObjEx.DNSHostName 
For Each oWMIProp In oWMIObjEx.Properties_ 
If IsArray(oWMIProp.Value) Then 
For n = LBound(oWMIProp.Value) To UBound(oWMIProp.Value) 
Debug.Print oWMIProp.Name & "(" & n & ")", oWMIProp.Value(n) 
Next 
Else 
Debug.Print oWMIProp.Name, oWMIProp.Value 
End If 
Next 
End If 
Next 
End Sub

Quer ver mais?

Aqui está uma planilha que facilita a exploração de várias centenas de classes contendo informações sobre a CPU, unidades de disco, memória, sistema operacional, aplicativos, usuários e muito, muito mais. E pode consultar PCs e também servidores remotos, supondo que tenha as credenciais: WMI Query.xlsm.


Usos do WMI Query.xlsm
  • Inventário de todos os PCs em uma rede incluindo todo o hardware e software usado:
    • Win32_SystemEnclosure - Fabricante do PC e número de série
    • Win32_LogicalDisk - Discos com capacidades e espaço livre.
    • Win32_Processor - Especificações do CPU
    • Win32_PhysicalMemoryArray - RAM / tamanho da memória instalada
    • Win32_VideoController - Adaptador gráfico e configurações
    • Win32_OnBoardDevice - Dispositivos da placa -mãe
    • Win32_OperatingSystem - Qual versão do Windows com Número de Série
    • WIn32_Printer - Impressoras instaladas
    • Win32_Product - Software instalado
  • WIn32_Account - Listar todas as contas de usuário em um PC ou domínio
  • Win32_ComputerSystem - Veja quem está usando um PC remoto (também Win32_LoggedOnUser )
  • Win32_BaseService - Listar os serviços em execução (ou interrompidos ) em qualquer PC, juntamente com o caminho do serviço e o nome do arquivo.
  • E centenas de coisas mais!

Leia as referências abaixo para saber mais sobre o que esta API pode fazer.

Propriedades da classe WMI NetworkAdapterConfiguration http://msdn.microsoft.com/en-us/library/aa394217(v=vs.85).aspx

Exemplos de script:
Exemplos de Dan Elgaard: http://www.excelgaard.dk/Lib/USERINFO/
Exemplos de script WMI: http://msdn.microsoft.com/en-us/library/aa394585(v=vs.85).aspx



Envie seus comentários e sugestões e compartilhe este artigo!
brazilsalesforceeffectiveness@gmail.com

✔ Brazil SFE®✔ Brazil SFE®´s Facebook´s Profile  Google+   Author´s Professional Profile  ✔ Brazil SFE®´s Pinterest       ✔ Brazil SFE®´s Tweets

Access VBA Advanced - Usando o Poder do VBScript e do WMI - Using the Power of VBScripts and WMI in Microsoft Access VBA

Inline image 1

Muitos programadores da suíte MS Office, sequer imaginam que podem explorar as poderosas capacidades de Scripting e WMI (Windows Management Instrumentation - instrumentação de gerenciamento do Windows).

WMI (instrumentação de gerenciamento do Windows) é a implementação da Microsoft do WBEM, uma iniciativa da indústria que visa estabelecer padrões para acessar e compartilhar informações de gerenciamento por meio de uma rede empresarial. O WMI é compatível com WBEM e fornece suporte integrado ao modelo CIM (modelo de informação comum), o modelo de dados que descreve os objetos existentes em um ambiente de gerenciamento.

WMI inclui um repositório do objeto compatível com o CIM, que é o banco de dados das definições do objeto, e ogerenciador de objetos CIM, que lida com a coleta e a manipulação dos objetos no repositório e reúne as informações dos provedores WMI. Esses provedores agem como intermediários entre o WMI e os componentes do sistema operacional, aplicativos e outros sistemas. Por exemplo, o provedor do Registro extrai as informações do Registro, enquanto o provedorSNMP fornece os dados e eventos dos dispositivos SNMP. Os provedores dão informações sobre seus componentes e podem fornecer métodos para manipular os componentes, as propriedades que podem ser definidas ou os eventos que podem alertá-lo sobre as alterações nos componentes.

WMI pode ser usado pelas ferramentas de gerenciamento do computador, como o Microsoft Systems Management Server, para ajudá-lo a gerenciar seus computadores. Ele também é usado por outras tecnologias e ferramentas daMicrosoft, como o Microsoft Health Monitor e o Microsoft Operations Manager, e por outros fornecedores de sistemas de gerenciamento dos computadores. Você pode usar o WMI com sistemas de programação ou de scripts (como o host de scripts do Windows) para recuperar detalhes de configuração da maioria dos aspectos dos sistemas de computador, incluindo aplicativos de servidor, ou para gerar alterações nos sistemas.


De fato, é emocionante descobrir que é fácil convertermos VBScript WMI em código VBA deixando-os tão funcionais quanto os scripts.

Embora haja uma série de funções VBSript alguns não podem ser usados ​​no VBA, mas a maioria dos scripts pode ser facilmente modificado para funcionar a partir do MS Access ou outros aplicativos do Office.

Por que ficar animado?

Com VBA e WMI podemos fazer muitas coisas que não são possíveis usando o Windows API. O WMI é tão poderoso que é preciso ter cuidado para não fazermos alguns estragos sérios nos computadores sob a nossa responsabilidade quer localmente, quer num PC remoto ou mesmo numServidor Windows!

Por que o WMI é tão poderoso?

"O WMI é a principal tecnologia de gestão de habilitação embutido nos família de sistemas operacionais Windows 2000Windows XP eWindows Server 2003. Estão baseados em padrões supervisionados peloDistributed Management Task Force (DMTF), o WMI é a ferramenta e o encanamento através do qual todos, ou  quase todos, os recursos doWindows podem ser acessados, configurados, gerenciados e monitorados. "

A última frase acima estabelece o tamanho do poder de WMI, o qual você, sim você, tem na ponta dos dedos através do VBA.

Segue uma lista das coisas que podemos fazer localmente ou através de acesso remoto:

Gerenciar usuários e Políticas de Grupo
(Manage Users and Group Policies)

Ler e salvar logs de eventos em arquivos
(Read and save Event Logs to files)

Obter o tamanho de memória livre de um disco rígido

(Get the size of a hard drive's free Memory)



Obter a versão do Microsoft Office

(Get the Version of Microsoft Office)

Obter os atributos das Impressoras
(Get the attributes of Printers)

Obter a versão do OSSP
(Get the Operating System Service Pack Version (CSDVersion–ServicePackLast))

Obter o nome do SO
(Get the Operating System Name)

Obter a versão do SO
(Get the Operating System Version Number)

Obter a versão do compilação do SO
(Get the Operating System Build Number)

Obter o número de série do produto Windows OS
(Windows Operating System Product/Serial Number)

Ter ciência dos Jobs agendadas
(Get Scheduled Jobs)

Conte processos em execução
(Count Running Processes)

Lista dos processos em execução
(List Running Processes)

Encerrar processos
(Terminate Processes)

Deletar softwares

Instalar softwares

Atualizar software

Lista de todos os software Windows instalado
(List all Windows installed software)

Lista todas as IDs dos produtos Microsoft instalados
(List Microsoft software Product IDs)

Retorna o nome do Usuário Registado
Get the Registered User

Nem tudo são flores

A maior dificuldade com o uso de WMI é que existem milhares de propriedades e métodos que estão disponíveis para acessarmos. O WMI tem classes, propriedades e métodos e um dialeto próprio de query VBScriptchamado WQL.


WMI usa o Common Information Model (CIM) para acessar informações e executar ações. O CIM nos dá acesso a quase tudo sobre um PC. Podemos aprender mais sobre o CIM aqui.


Finalmente, o código:


Para que você não morra de curiosidade, segue um exemplo de código VBAusando WMI

Este código obtém os IDs dos Processores de um computador local, o que pode ser muito útil. 



Este código pode ser usado como um template de como acessar e usar grande parte da informação que queremos usar com o WMI.


Function ProcessorIDs() As String

    ' Usando late binding para evitar um problema de referência - late binding

    Dim strComputer As String

    Dim objWMIService As Object

    Dim colItems As Object

    Dim objItem As Object
    Dim strProcessorIDs As String

    Let strComputer = "."

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

    Set colItems = objWMIService.ExecQuery( _
        "SELECT * FROM Win32_Processor", , 48)
        
    For Each objItem In colItems
        Let strProcessorIDs = strProcessorIDs & ";" & Nz(objItem.ProcessorID, "")
    Next
    
    ' Remove the leading ; from the string  
    Do While Left(strProcessorIDs, 1) = ";"
        Let strProcessorIDs = Right(strProcessorIDs, (Len(strProcessorIDs) - 1))
    Loop
   
    Let ProcessorIDs = strProcessorIDs

    Set objItem = Nothing
    Set colItems = Nothing
    Set objWMIService = Nothing
End Function

Como funciona o código?


Após declararmos algumas variáveis, criamos uma instância do objeto WMIusando GetObject ("winmgmts:")

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

Usamos winmgmts, o CIM Object Manager, para acessar o "root" ("\ root \ cimv2") da biblioteca CIM. Se estiver acessando um computador remoto "{ImpersonationLevel = personificar}! \ \" Concede-nos o acesso se tivermos as credenciais de segurança adequadas.


A variável strComputer passa um valor de "." Quando estamos acessando o computador local. Se quiser acessar um computador remoto, em vez de usar nós, precisamos usar o caminho e o nome do computador remoto ".":GetObject ("winmgmts: \ TargetComputer") ou GetObject ("winmgmts: \ DomainName TargetComputer \").



Em seguida, instanciamos um conjunto de propriedades da classeWin32_Processor WMI.

Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_Processor", , 48)


Nós usamos uma consulta WQL para selecionar todas as propriedades da classe. E podemos aprender mais sobre WQL aqui.

Finalmente temos o 
número de série de identificação do processador numastring.

For Each objItem In colItems
    ProcessorID = Nz (objItem.ProcessorID, 0)
Next

Termos os ProcessorIDs pode nos ajudar a ter algum nível de segurança, permitindo-nos saber se o banco de dados foi copiado para um computador diferente. Se já salvamos pelo menos um dos ProcessorIDs num banco de dados personalizado, podemos verificar se o valor foi alterado usando o código a seguir, que pode ser chamado por uma Macro AutoExec ou num formulário Splash. Atenção: Faça backup de seus arquivos de banco de dados antes de usar o seguinte código.

Function StartSafe() As Boolean
    Dim strProcessorID As String

    ' Get the stored ProcessorIDs from
    ' the custom Database property
    strProcessorID = GetDBPropValue("dbPrpProcessorID")


    If InStr(1, ProcessorIDs, strProcessorID) > 0 Then

        StartSafe= True

    Else
        StartSafe= False
        ' The database has been copied to an unauthorized computer!
        ' Delete the Back End Database to protect your data
        ' Uncomment the next line of code to delete the back end database
        'Kill (CurrentProject.Path & "\BackEndDB.mdb")
        ' If this is the back end add code to Delete all tables
        ' Add code to Delete all Modules
        DoCmd.Quit
    End If
End Function

Divirtam-se!



Seguem alguns livros para ampliarmos a visão sobre WMI






Deixe os seus comentários! Envie este artigo, divulgue este link na sua rede social...


TagsVBA, Access, VBScripts, WMI, Microsoft Access, scripting, advanced, WMI, vbscript, Windows API, WQL, 


Access VBA Advanced - Usando o Poder do VBScript e do WMI - Using the Power of VBScripts and WMI in Microsoft Access VBA



Muitos programadores da suíte MS Office, sequer imaginam poderem explorar as poderosas capacidades de Scripting e WMI (Windows Management Instrumentation - instrumentação de gerenciamento do Windows).

O WMI (instrumentação de gerenciamento do Windows) é a implementação da Microsoft do WBEM, uma iniciativa da indústria que visa estabelecer padrões para acessar e compartilhar informações de gerenciamento por meio de uma rede empresarial. O WMI é compatível com WBEM e fornece suporte integrado ao modelo CIM (modelo de informação comum), o modelo de dados que descreve os objetos existentes em um ambiente de gerenciamento.

O WMI inclui um repositório do objeto compatível com o CIM, que é o banco de dados das definições do objeto, e o gerenciador de objetos CIM, que lida com a coleta e a manipulação dos objetos no repositório e reúne as informações dos provedores WMI. Esses provedores agem como intermediários entre o WMI e os componentes do sistema operacional, aplicativos e outros sistemas. Por exemplo, o provedor do Registro extrai as informações do Registro, enquanto o provedor SNMP fornece os dados e eventos dos dispositivos SNMP. Os provedores dão informações sobre seus componentes e podem fornecer métodos para manipular os componentes, as propriedades que podem ser definidas ou os eventos que podem alertá-lo sobre as alterações nos componentes.

O WMI pode ser usado pelas ferramentas de gerenciamento do computador, como o Microsoft Systems Management Server, para ajudá-lo a gerenciar seus computadores. Ele também é usado por outras tecnologias e ferramentas da Microsoft, como o Microsoft Health Monitor e o Microsoft Operations Manager, e por outros fornecedores de sistemas de gerenciamento dos computadores. Você pode usar o WMI com sistemas de programação ou de scripts (como o host de scripts do Windows) para recuperar detalhes de configuração da maioria dos aspectos dos sistemas de computador, incluindo aplicativos de servidor, ou para gerar alterações nos sistemas.


De fato, é emocionante descobrir que é fácil convertermos VBScript WMI em código VBA deixando-os tão funcionais quanto os scripts.

Embora haja uma série de funções VBSript alguns não podem ser usados ​​no VBA, mas a maioria dos scripts pode ser facilmente modificado para funcionar a partir do MS Access ou outros aplicativos do Office.

Por que ficar animado?

Com VBA e WMI podemos fazer muitas coisas que não são possíveis usando o Windows API. O WMI é tão poderoso que é preciso ter cuidado para não fazermos alguns estragos sérios nos computadores sob a nossa responsabilidade quer localmente, quer num PC remoto ou mesmo num Servidor Windows!

Por que o WMI é tão poderoso?

"O WMI é a principal tecnologia de gestão de habilitação embutido nos família de sistemas operacionais Windows 2000, Windows XP e Windows Server 2003. Estão baseados em padrões supervisionados pelo Distributed Management Task Force (DMTF), o WMI é a ferramenta e o encanamento através do qual todos, ou  quase todos, os recursos do Windows podem ser acessados, configurados, gerenciados e monitorados. "

A última frase acima estabelece o tamanho do poder de WMI, o qual você, sim você, tem na ponta dos dedos através do VBA.

Segue uma lista das coisas que podemos fazer localmente ou através de acesso remoto:

Gerenciar usuários e Políticas de Grupo
(Manage Users and Group Policies)

Ler e salvar logs de eventos em arquivos
(Read and save Event Logs to files)

Obter o tamanho de memória livre de um disco rígido

(Get the size of a hard drive's free Memory)



Obter a versão do Microsoft Office
(Get the Version of Microsoft Office)

Obter os atributos das Impressoras
(Get the attributes of Printers)

Obter a versão do OSSP
(Get the Operating System Service Pack Version (CSDVersion–ServicePackLast))

Obter o nome do SO
(Get the Operating System Name)

Obter a versão do SO
(Get the Operating System Version Number)

Obter a versão do compilação do SO
(Get the Operating System Build Number)

Obter o número de série do produto Windows OS
(Windows Operating System Product/Serial Number)

Ter ciência dos Jobs agendadas
(Get Scheduled Jobs)

Conte processos em execução
(Count Running Processes)

Lista dos processos em execução
(List Running Processes)

Encerrar processos
(Terminate Processes)

Deletar softwares

Instalar softwares

Atualizar software

Lista de todos os software Windows instalado
(List all Windows installed software)

Lista todas as IDs dos produtos Microsoft instalados
(List Microsoft software Product IDs)

Retorna o nome do Usuário Registado
Get the Registered User

Nem tudo são flores

A maior dificuldade com o uso de WMI é que existem milhares de propriedades e métodos que estão disponíveis para acessarmos. O WMI tem classes, propriedades e métodos e um dialeto próprio de query VBScript chamado WQL.


WMI usa o Common Information Model (CIM) para acessar informações e executar ações. O CIM nos dá acesso a quase tudo sobre um PC. Podemos aprender mais sobre o CIM aqui.


Finalmente, o código:

Para que você não morra de curiosidade, segue um exemplo de código VBA usando WMI

Este código obtém os IDs dos Processores de um computador local, o que pode ser muito útil. 



Este código pode ser usado como um template de como acessar e usar grande parte da informação que queremos usar com o WMI.


Function ProcessorIDs() As String

    ' Usando late binding para evitar um problema de referência - late binding

    Dim strComputer As String

    Dim objWMIService As Object

    Dim colItems As Object
    Dim objItem As Object
    Dim strProcessorIDs As String

    Let strComputer = "."

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

    Set colItems = objWMIService.ExecQuery( _
        "SELECT * FROM Win32_Processor", , 48)
        
    For Each objItem In colItems
        Let strProcessorIDs = strProcessorIDs & ";" & Nz(objItem.ProcessorID, "")
    Next
    
    ' Remove the leading ; from the string  
    Do While Left(strProcessorIDs, 1) = ";"
        Let strProcessorIDs = Right(strProcessorIDs, (Len(strProcessorIDs) - 1))
    Loop
   
    Let ProcessorIDs = strProcessorIDs

    Set objItem = Nothing
    Set colItems = Nothing
    Set objWMIService = Nothing

End Function


Como funciona o código?


Após declararmos algumas variáveis, criamos uma instância do objeto WMI usando GetObject ("winmgmts:")



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


Usamos winmgmts, o CIM Object Manager, para acessar o "root" ("\ root \ cimv2") da biblioteca CIM. Se estiver acessando um computador remoto "{ImpersonationLevel = personificar}! \ \" Concede-nos o acesso se tivermos as credenciais de segurança adequadas.



A variável strComputer passa um valor de "." Quando estamos acessando o computador local. Se quiser acessar um computador remoto, em vez de usar nós, precisamos usar o caminho e o nome do computador remoto ".": GetObject ("winmgmts: \ TargetComputer") ou GetObject ("winmgmts: \ DomainName TargetComputer \").


Em seguida, instanciamos um conjunto de propriedades da classe Win32_Processor WMI.


Set colItems = objWMIService.ExecQuery( _
    "SELECT * FROM Win32_Processor", , 48)


Nós usamos uma consulta WQL para selecionar todas as propriedades da classe. E podemos aprender mais sobre WQL aqui.

Finalmente temos o 
número de série de identificação do processador numa string.

For Each objItem In colItems
    ProcessorID = Nz (objItem.ProcessorID, 0)
Next


Termos os ProcessorIDs pode nos ajudar a ter algum nível de segurança, permitindo-nos saber se o banco de dados foi copiado para um computador diferente. Se já salvamos pelo menos um dos ProcessorIDs num banco de dados personalizado, podemos verificar se o valor foi alterado usando o código a seguir, que pode ser chamado por uma Macro AutoExec ou num formulário Splash. Atenção: Faça backup de seus arquivos de banco de dados antes de usar o seguinte código.


Function StartSafe() As Boolean
    Dim strProcessorID As String

    ' Get the stored ProcessorIDs from
    ' the custom Database property
    strProcessorID = GetDBPropValue("dbPrpProcessorID")



    If InStr(1, ProcessorIDs, strProcessorID) > 0 Then

        StartSafe= True
    Else
        StartSafe= False
        ' The database has been copied to an unauthorized computer!
        ' Delete the Back End Database to protect your data
        ' Uncomment the next line of code to delete the back end database
        'Kill (CurrentProject.Path & "\BackEndDB.mdb")
        ' If this is the back end add code to Delete all tables
        ' Add code to Delete all Modules
        DoCmd.Quit
    End If
End Function

Divirtam-se!



Seguem alguns livros para ampliarmos a visão sobre WMI















brazilsalesforceeffectiveness@gmail.com

✔ Brazil SFE®Author´s Profile  Google+   Author´s Professional Profile   Pinterest   Author´s Tweets
diHITT - Notícias