Upload
internet
View
125
Download
3
Embed Size (px)
Citation preview
Script-Mania Parte 1Script-Mania Parte 1Como construir seus Como construir seus próprios scriptspróprios scripts
Vinicius CantoVinicius CantoMVP Visual Developer – ScriptingMVP Visual Developer – ScriptingICMC – USPICMC – USP
Sobre esta apresentaçãoSobre esta apresentação
Esta apresentação foi exibida Esta apresentação foi exibida inicialmente na primeira Scripting inicialmente na primeira Scripting Week do Technet ScriptcenterWeek do Technet Scriptcenter
Traduzida e adaptada por mim mesmoTraduzida e adaptada por mim mesmo
Primeira de três apresentações da Primeira de três apresentações da série de Webcasts sobre scripts do série de Webcasts sobre scripts do Technet BrasilTechnet Brasil
Duração de aproximadamente 45 Duração de aproximadamente 45 minutos + perguntasminutos + perguntas
Pré RequisitosPré Requisitos
Conhecimentos básicos em Conhecimentos básicos em administração de ambientes Windowsadministração de ambientes Windows
Atenção!Atenção!Se você já tem alguma experiência com Se você já tem alguma experiência com scripts, pode ser que este Webcast scripts, pode ser que este Webcast pareça muito fácil para você. O público-pareça muito fácil para você. O público-alvo deste Webcast são os iniciantes alvo deste Webcast são os iniciantes mesmomesmo
O mesmo vale para quem já participou do O mesmo vale para quem já participou do Scripting WeekScripting Week
Nesta série de Webcasts:Nesta série de Webcasts:HojeHoje
Introdução: Construindo seus próprios scriptsIntrodução: Construindo seus próprios scripts
31 de Outubro31 de OutubroCriando scripts para gerenciamento de arquivos Criando scripts para gerenciamento de arquivos e pastase pastas
7 de Novembro7 de NovembroEntrada e saída: como gerar arquivos texto, CSV, Entrada e saída: como gerar arquivos texto, CSV, HTML e outras coisas com scriptsHTML e outras coisas com scripts
14 de Novembro14 de NovembroChat para tirar dúvidas diversas sobre scriptingChat para tirar dúvidas diversas sobre scripting
Todas as Terças feiras, neste mesmo Todas as Terças feiras, neste mesmo horário!horário!
Agenda de hojeAgenda de hoje
O que é scripting?O que é scripting? O que eu posso fazer com scripting?O que eu posso fazer com scripting? É difícil?É difícil? Escrevendo um script do zeroEscrevendo um script do zero
VariáveisVariáveis ObjetosObjetos LoopsLoops Exibir resultadosExibir resultados
Gostei… onde procurar mais ajuda?Gostei… onde procurar mais ajuda? Espaço para dúvidasEspaço para dúvidas
Webcasts práticosWebcasts práticos
Recomendo Recomendo testartestar todos os scripts que todos os scripts que forem apresentadosforem apresentados
Crie uma pasta Crie uma pasta c:\scripts c:\scripts no seu computadorno seu computador
Baixe os exemplos em Baixe os exemplos em http://go.microsoft.com/fwlink/?LinkId=30792http://go.microsoft.com/fwlink/?LinkId=30792
... e descompacte pasta criada... e descompacte pasta criada
Abra um prompt de comando na sua pasta Abra um prompt de comando na sua pasta (cd c:\scripts)(cd c:\scripts)
Teste constantemente. Tire suas dúvidas no Teste constantemente. Tire suas dúvidas no final do webcast e no chat dia 14final do webcast e no chat dia 14
O que é scripting?!?O que é scripting?!?
O que é isso? O que eu ganho O que é isso? O que eu ganho sabendo usar?sabendo usar?
ScriptingScripting
Forma rápida de resolver problemasForma rápida de resolver problemasToda tarefa Toda tarefa repetitivarepetitiva é uma grande candidata a é uma grande candidata a se tornar um scriptse tornar um script
PraticidadePraticidadeNão requer compilaçãoNão requer compilação
Não necessita de nada mais poderoso que um Não necessita de nada mais poderoso que um bloco de notasbloco de notas
Aprendizado mais fácil que linguagens de Aprendizado mais fácil que linguagens de programação mais complexasprogramação mais complexas
Podem ser simples ou complicadas... Tudo Podem ser simples ou complicadas... Tudo depende do que você quer fazer com o depende do que você quer fazer com o scriptscript
ScriptingScripting
Principais benefíciosPrincipais benefíciosEconomia de tempo Economia de tempo do administrador!do administrador!
Menos chance de Menos chance de erroserros em tarefas em tarefas repetitivasrepetitivas
Mais Mais segurançasegurança
Menos problemas, mais administradores Menos problemas, mais administradores (e chefes) felizes =)(e chefes) felizes =)
Mas e um Script?Mas e um Script?
Script é uma Script é uma sequencia de comandos sequencia de comandos que que podemos dar ao computador, para que ele podemos dar ao computador, para que ele possa trabalhar sozinho, um possa trabalhar sozinho, um algoritmoalgoritmo
Esses comandos devem ser escritos de uma Esses comandos devem ser escritos de uma forma que o computador entenda, com uma forma que o computador entenda, com uma sintaxe adequada (linguagem)sintaxe adequada (linguagem)
Os scripts diferem dos programas porque Os scripts diferem dos programas porque são são interpretadosinterpretados ao invés de serem ao invés de serem compiladoscompilados
Diferem também dos Diferem também dos arquivos de lote arquivos de lote porque normalmente não podem ser porque normalmente não podem ser executados diretamente em um prompt de executados diretamente em um prompt de comandocomando
Diferenças básicasDiferenças básicas
Arquivos de Lote Scripts Programas
Interpretado Compilado
Comandos atômicos, que podem ser digitados
num prompt
Comandos provenientes de uma Linguagem de Programação
.BAT .CMD, .PS1 .VBS, .JS, .WSF .EXE, .COM
Podem ser editados em qualquer editor de texto, e só precisa ter um interpretador instalado
É necessário editar usando um editor de
texto e gerar o binário usando um compilador
apropriado
Fácil aprendizado Intermediário Bem mais complexo
Detalhes: Arquivos de LoteDetalhes: Arquivos de Lote.BAT e .CMD.BAT e .CMDPrósPrós
Estrutura mais simples e Estrutura mais simples e fácil de aprenderfácil de aprender
Usa comandos válidos no Usa comandos válidos no MS-DOS e no prompt de MS-DOS e no prompt de comando do 2000/XP/2003comando do 2000/XP/2003
Basta combinar os Basta combinar os comandos que você faria comandos que você faria manualmentemanualmente
Útil em pequenas Útil em pequenas situações como simples situações como simples cópias de arquivoscópias de arquivos
ContrasContrasTecnologia antigaTecnologia antiga
Depende demais da Depende demais da existencia de ferramentas existencia de ferramentas e programas de linha de e programas de linha de comandocomando
No geral, não possui muita No geral, não possui muita integração com outros integração com outros sistemas mais novossistemas mais novos
Complicado de usar em Complicado de usar em scripts de logonscripts de logon
Cada comando possui Cada comando possui uma lista de parâmetros uma lista de parâmetros diferente, o que dificulta o diferente, o que dificulta o aprendizadoaprendizado
Detalhes: ScriptsDetalhes: Scripts.VBS e .JS.VBS e .JSPrósPrós
Todas os recursos de uma Todas os recursos de uma linguagem de linguagem de programação (loops, programação (loops, funções, procedimentos, funções, procedimentos, objetos e classes)objetos e classes)
Facilita a reutilização de Facilita a reutilização de códigocódigo
Consegue interagir com Consegue interagir com mais tecnologias e mais tecnologias e sistemas do que os sistemas do que os arquivos de lotearquivos de lote
Mais velozesMais velozes
Execução silenciosaExecução silenciosa
Muita documentação e Muita documentação e exemplos na Webexemplos na Web
ContrasContrasCurva de aprendizado um Curva de aprendizado um pouco mais acentuadapouco mais acentuada
Exige alguma familiaridade Exige alguma familiaridade com programação em com programação em geralgeral
No Brasil, há um número No Brasil, há um número menor de pessoas que menor de pessoas que dominam este tipo de dominam este tipo de script e que colaboram em script e que colaboram em fórunsfóruns
Detalhes: ProgramasDetalhes: Programas.EXE.EXEPrósPrós
Algumas soluções só são Algumas soluções só são possíveis com programas possíveis com programas feitos sob medidafeitos sob medida
Muito mais velocidadeMuito mais velocidade
Várias linguagens de Várias linguagens de programação diferentes, programação diferentes, uma para cada uma para cada necessidadenecessidade
ContrasContrasNão se adequa à realidade Não se adequa à realidade do administrador de redes, do administrador de redes, que normalmente não que normalmente não dispoe de muito tempo dispoe de muito tempo para desenvolver uma para desenvolver uma aplicação e nem tem aplicação e nem tem conhecimentos avançados conhecimentos avançados em programaçãoem programação
Atualização requer a Atualização requer a recompilação do código, recompilação do código, que dá um pouco mais de que dá um pouco mais de trabalho desnecessário trabalho desnecessário quando os problemas são quando os problemas são relativamente simplesrelativamente simples
Ok, vamos aos Ok, vamos aos exemplos...exemplos...
Exemplos ilustram melhor como Exemplos ilustram melhor como isso funcionaisso funciona
Exemplo: Auditando Logs Exemplo: Auditando Logs de Eventosde Eventos
Imagine que você recebeu uma tarefa, como Imagine que você recebeu uma tarefa, como esta descrita abaixoesta descrita abaixo
Abrir o Visualizador de Eventos Abrir o Visualizador de Eventos (botão direito em (botão direito em Meu Computador, Gerenciar. Nas Ferramentas Meu Computador, Gerenciar. Nas Ferramentas do Sistema, escolha Visualizar Eventos)do Sistema, escolha Visualizar Eventos)
Clicar com o botão direito em Log de Segurança, Clicar com o botão direito em Log de Segurança, clique em clique em ExibirExibir, , FiltroFiltro......
Na caixa Identificação do Evento, escrever Na caixa Identificação do Evento, escrever 529529
Ver os resultadosVer os resultados
Fazer isso em cada um dos 34493 computadores Fazer isso em cada um dos 34493 computadores da empresada empresa
Set objOU = GetObject("LDAP://ou=Domain Controllers, " _ & "dc=fabrikam, dc=com")objOU.Filter = Array("Computer")
For Each objComputer in objOU
intLength = objComputer.Name strComputer = Right(objComputer.Name, intLength - 3)
Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate, (Security)}!\\" _ & strComputer & "\root\cimv2") Set colLoggedEvents = objWMIService.ExecQuery _ ("Select * from Win32_NTLogEvent Where Logfile = 'Security' and " _ & "EventCode = '529'") For Each objEvent in colLoggedEvents Wscript.Echo "Computer Name: " & objEvent.ComputerName Wscript.Echo "Message: " & objEvent.Message Wscript.Echo "Record Number: " & objEvent.RecordNumber Wscript.Echo "Time Written: " & objEvent.TimeWritten Next
Next
O principal benefícioO principal benefício
Fazer com que os computadores Fazer com que os computadores trabalhem para vocêtrabalhem para você
Lembre que eles foram inventados para Lembre que eles foram inventados para isso!isso!
Executar tarefas em Executar tarefas em vários vários computadores de uma só vezcomputadores de uma só vez. E sem . E sem precisar levantar da cadeiraprecisar levantar da cadeira
Permitir que você administre Permitir que você administre computadores computadores do jeito que você querdo jeito que você quer, , não do jeito que querem que você o não do jeito que querem que você o façafaça
É muito difícil?É muito difícil?
Não.Não.
70% dos scripts que faço hoje tem 70% dos scripts que faço hoje tem parte do código de algum outro script parte do código de algum outro script que eu fiz ou que alguém fez e que eu fiz ou que alguém fez e publicou na Internetpublicou na Internet
Tudo que você precisa fazer é entender Tudo que você precisa fazer é entender o código e adaptar para as suas o código e adaptar para as suas necessidadesnecessidades
Normalmente isso se resume a alterar Normalmente isso se resume a alterar o valor de algumas o valor de algumas constantesconstantes e e variáveisvariáveis
Vamos pôr a mão na massaVamos pôr a mão na massastrComputer = "."Set objWMIService = GetObject("winmgmts:" _ & "\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _ ("Select * from XXXXXXXXXX")For Each objItem in colItems Wscript.Echo objItem.YYYYYYYYYYNext
Se você fez o download dos arquivos de Se você fez o download dos arquivos de exemplo deste Webcast, este é o arquivo exemplo deste Webcast, este é o arquivo
template.vbstemplate.vbs
Faça você mesmoFaça você mesmo
Na pasta Na pasta c:\scriptsc:\scripts, clique com o botão , clique com o botão direito em template.vbs e escolha direito em template.vbs e escolha EditarEditar
Troque o Troque o XXXXXXXXXXXXXXXX por por Win32_OperatingSystemWin32_OperatingSystem. Esse é o . Esse é o nome de uma das classes WMInome de uma das classes WMI
Troque o Troque o YYYYYYYYYYYYYYYY por por CaptionCaption. Esta . Esta é uma propriedade existente na classe é uma propriedade existente na classe Win32_OperatingSystemWin32_OperatingSystem
Seu primeiro script vai ficar Seu primeiro script vai ficar assim...assim...strComputer = "."Set objWMIService = GetObject("winmgmts:" _ & "\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _ ("Select * from Win32_OperatingSystem")For Each objItem in colItems Wscript.Echo objItem.CaptionNext
Nota: em geral, scripts não são case-sensitive. Nota: em geral, scripts não são case-sensitive. Isso significa que Caption = CAPTION = captionIsso significa que Caption = CAPTION = caption
Continuando...Continuando...
Feche o editor de textos, Feche o editor de textos, salvandosalvando as as alteraçõesalterações
No prompt de comando, digite o No prompt de comando, digite o comando abaixo e pressione ENTERcomando abaixo e pressione ENTERcscript template.vbscscript template.vbs
ResultadosResultadosC:\Scripts>cscript template.vbsMicrosoft (R) Windows Script Host Version 5.6Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
Microsoft Windows XP Professional
É claro que, se você não estiver usando Windows É claro que, se você não estiver usando Windows XP, o resultado VAI ser diferente =)XP, o resultado VAI ser diferente =)
Bônus: Computadores Bônus: Computadores Remotos!Remotos!strComputer = "servidor_web_1"Set objWMIService = GetObject("winmgmts:" _ & "\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _ ("Select * from Win32_OperatingSystem")For Each objItem in colItems Wscript.Echo objItem.CaptionNext
strComputerstrComputer é uma variável que guarda o nome do é uma variável que guarda o nome do computador onde a consulta será feita. Tudo que computador onde a consulta será feita. Tudo que
fizemos foi alterar o valor daquela variável. O ponto, fizemos foi alterar o valor daquela variável. O ponto, no WMI, representa o computador local.no WMI, representa o computador local.
Mais Bônus!Mais Bônus!
strComputer = InputBox("Digite o nome do computador")Set objWMIService = GetObject("winmgmts:" _ & "\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _ ("Select * from Win32_OperatingSystem")For Each objItem in colItems Wscript.Echo objItem.CaptionNext
Agora, obtemos o nome do computador através de Agora, obtemos o nome do computador através de uma função da linguagem VBScript, o uma função da linguagem VBScript, o InputBoxInputBox. Ela . Ela exibe uma caixa de texto na tela para que o usuário exibe uma caixa de texto na tela para que o usuário
digite um valor e o guarda em uma variável.digite um valor e o guarda em uma variável.
Faça você mesmo Faça você mesmo novamentenovamente
Ok, você deve estar pensando: mas é só um Ok, você deve estar pensando: mas é só um script... e além disso eu peguei 90% dele script... e além disso eu peguei 90% dele pronto.pronto.
Na pasta c:\scripts, clique com o botão Na pasta c:\scripts, clique com o botão direito em template.vbs e escolha Editardireito em template.vbs e escolha Editar
Troque Troque Win32_OperatingSystemWin32_OperatingSystem por por Win32_ProcessWin32_Process e e CaptionCaption por por NameName. .
Feche o arquivo, salvando as alteraçõesFeche o arquivo, salvando as alterações
Execute o script no prompt de comando:Execute o script no prompt de comando:cscript template.vbscscript template.vbs
Pronto! Outro script diferente!Pronto! Outro script diferente!
E agora...E agora...C:\Scripts>cscript template.vbsMicrosoft (R) Windows Script Host Version 5.6Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
System Idle ProcessSystemsmss.execsrss.exewinlogon.exeservices.exelsass.exeati2evxx.exesvchost.exesvchost.exesvchost.exe
Ok, mas eu continuo Ok, mas eu continuo copiando...copiando...
Sim.Sim.
A parte boa é que nessa área, copiar A parte boa é que nessa área, copiar não é só permitido como encorajado.não é só permitido como encorajado.
É uma das formas de reutilização de É uma das formas de reutilização de código, e economiza bastante tempocódigo, e economiza bastante tempo
Existem vários outros scripts como Existem vários outros scripts como este no ScriptCenter que podem ser este no ScriptCenter que podem ser copiados e adaptadoscopiados e adaptados
Fundamentos de ScriptFundamentos de Script
Alguns conceitos básicos de Alguns conceitos básicos de programaçãoprogramação
Ferramenta básicaFerramenta básica
Vamos testar novamenteVamos testar novamenteSet x = CreateObject("Wscript.Network")Wscript.Echo x.UserName
Apenas abra o Bloco de Notas e digite o código acima
Salvando um scriptSalvando um script
Note o uso das aspas e
da extensão .VB
S. Se você esquecer
delas, o blogo de notas vai
adicionar um .TXT no final do nome do
arquivo.
Executando os scriptsExecutando os scripts
Clique duas vezes no ícone do script, em c:\Clique duas vezes no ícone do script, em c:\scriptsscripts
O O host padrão host padrão é executado (Wscript.exe)é executado (Wscript.exe)
Ele executa scripts sem mostrar nenhuma janela, Ele executa scripts sem mostrar nenhuma janela, exceto quando encontra funções como a exceto quando encontra funções como a MsgBoxMsgBox e a e a InputboxInputbox
O mesmo que digitar somente o nome do script O mesmo que digitar somente o nome do script no prompt de comandono prompt de comando
my_script.vbsmy_script.vbs
No prompt de comando, digite cscript No prompt de comando, digite cscript seguido do caminho (relativo ou completo) seguido do caminho (relativo ou completo) do scriptdo script
cscript my_script.vbscscript my_script.vbs
O que muda de um para o O que muda de um para o outro?outro?
O método O método Wscript.EchoWscript.Echo, quando , quando executado no console, imprime uma executado no console, imprime uma linha com o textolinha com o texto
Fora do console, ele exibe uma Fora do console, ele exibe uma MessageBoxMessageBox com o texto. A execução com o texto. A execução do script fica parada até que o usuário do script fica parada até que o usuário clique no botão OKclique no botão OK
Tente você mesmoTente você mesmo
A partir do prompt de comando, digite:A partir do prompt de comando, digite:
cscript disks.vbscscript disks.vbs
E depois…E depois…
wscript disks.vbswscript disks.vbs
Mudando o host padrãoMudando o host padrão
Para mudar host padrão para o Cscript:Para mudar host padrão para o Cscript:
cscript //H:cscriptcscript //H:cscript
Para mudar host padrão para o Wscript:Para mudar host padrão para o Wscript:
cscript //H:wscriptcscript //H:wscript
Para maiores informações:Para maiores informações:cscript /?cscript /?
Explorando um scriptExplorando um script
strComputer = "."Set objWMIService = GetObject("winmgmts:" _ & "\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _ ("Select * from Win32_OperatingSystem")For Each objItem in colItems Wscript.Echo objItem.CaptionNext
O que ele faz?O que ele faz?
Inicializa uma variável com o nome do Inicializa uma variável com o nome do computador onde o script vai rodarcomputador onde o script vai rodar
Cria alguns objetosCria alguns objetos
Faz um loop pela coleção de Faz um loop pela coleção de informações que foram retornadasinformações que foram retornadas
Exibe as informações na telaExibe as informações na tela
Dissecando um ScriptDissecando um Script
strComputer = "."Set objWMIService = GetObject("winmgmts:" _ & "\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _ ("Select * from Win32_OperatingSystem")For Each objItem in colItems Wscript.Echo objItem.CaptionNext
Exibindo resultados na
tela
Exibindo resultados na
telaFazendo um loop pela coleção de
objetos
Fazendo um loop pela coleção de
objetos
Criando referências aos objetos
Criando referências aos objetosInicializando
uma variável
Inicializando uma variável
VariáveisVariáveis
Variável nada mais é do que um Variável nada mais é do que um espaço na memória espaço na memória para armazenar um para armazenar um valorvalor
O VBScript usa um tipo especial de O VBScript usa um tipo especial de dado chamado dado chamado VariantVariant, que permite , que permite armazenar qualquer dado, seja ele um armazenar qualquer dado, seja ele um texto (string), um número inteiro, um texto (string), um número inteiro, um número de ponto flutuante, uma data...número de ponto flutuante, uma data...
Como as variáveis Como as variáveis funcionamfuncionam
strComputer = "atl-ws-01"Set objWMIService = GetObject("winmgmts:" _ & "\\" & strComputer & "\root\cimv2")
VariávelVariável
VariávelVariável Valor atribuído à variávelValor atribuído à variável
Como as variáveis Como as variáveis funcionamfuncionam
strComputer = "atl-ws-01"Set objWMIService = GetObject("winmgmts:" _ & "\\" & strComputer & "\root\cimv2")
Código OriginalCódigo Original
Set objWMIService = GetObject("winmgmts:" _ & "\\atl-ws-01\root\cimv2")
Código “Reescrito”Código “Reescrito”
Tipos de dadosTipos de dados
StringsStrings Basta colocar o valor entre aspas:
x = “Este é o valor de x."
NúmerosNúmeros Não use o valor entre aspas nem com vírgulas. Para decimais, use o ponto
x = 657457
DatasDatas Coloque o valor entre aspas, seguindo as configurações regionais do seu sistema.
x = “19 de Dezembro de 2004“x = “19/12/2004"x = “19/12/04"
Valores Booleanos Valores Booleanos (Lógicos)(Lógicos)
Não coloque os valores entre aspas:
x = TRUE
Concatenando VariáveisConcatenando Variáveis
Concatenar nada mais é do que Concatenar nada mais é do que “grudar” o conteúdo de duas coisas“grudar” o conteúdo de duas coisas
Em VBScript, usa-se o & para fazer Em VBScript, usa-se o & para fazer issoisso
strComputer = "."Set objWMIService = GetObject("winmgmts:" _ & "\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _ ("Select * from Win32_OperatingSystem")For Each objItem in colItems Wscript.Echo objItem.CaptionNext
Outros ExemplosOutros Exemplos
strFirstName = "Ken"strLastName = "Myer"
strName = strFirstName & " " & strLastNameWscript.Echo strName
strComputer = "."Set objWMIService = GetObject("winmgmts:" _ & "\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _ ("Select * from Win32_OperatingSystem")For Each objItem in colItems Wscript.Echo “Nome: " & objItem.CaptionNext
Tente você mesmoTente você mesmo
Edite o arquivo Edite o arquivo concatenate.vbsconcatenate.vbs para para que ele possa exibir uma mensagem que ele possa exibir uma mensagem semelhante à essasemelhante à essa
Note que é necessário somente alterar Note que é necessário somente alterar a linha que exibe a versão do Sistema a linha que exibe a versão do Sistema Operacional (Operacional (objItem.VersionobjItem.Version))
Deve ficar assimDeve ficar assim
strComputer = "."Set objWMIService = GetObject("winmgmts:" _ & "\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _ ("Select * from Win32_OperatingSystem")For Each objItem in colItems Wscript.Echo "Version: " & objItem.VersionNext
ObjetosObjetos
Veja as linhas abaixoVeja as linhas abaixo
As linhas destacadas mostram a criação de As linhas destacadas mostram a criação de referências à objetos (COM – Component Object referências à objetos (COM – Component Object Model)Model)
Usado para extender a capacidade dos scripts, Usado para extender a capacidade dos scripts, permitindo realizar tarefas que nem o VBScript nem permitindo realizar tarefas que nem o VBScript nem o Windows Script Host podem fazero Windows Script Host podem fazer
strComputer = "."Set objWMIService = GetObject("winmgmts:" _ & "\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _ ("Select * from Win32_OperatingSystem")For Each objItem in colItems Wscript.Echo objItem.CaptionNext
O que são objetos?O que são objetos?
O VBScript pode…
… desenhar um gráfico? Não, mas o Excel pode.
… criar uma conta de usuário? Não, mas o ADSI pode.
… iniciar e parar serviços do SO? Não, mas o WMI pode.
… salvar dados em um arquivo? Não, mas o FileSystemObject pode.
… enviar emails? Não, mas o CDOSys pode.
Referências ComunsReferências Comuns
Conectar ao WMIConectar ao WMISet x = GetObject("winmgmts:")Set x = GetObject("winmgmts:")
Conectar ao ADSIConectar ao ADSISet x = GetObject("LDAP:")Set x = GetObject("LDAP:")
Conectar ao FilesystemObjectConectar ao FilesystemObjectSet x = CreateObject("Scripting.FileSystemObject“)Set x = CreateObject("Scripting.FileSystemObject“)
Conectar ao objeto Windows Script Host Conectar ao objeto Windows Script Host Shell (WSHShell)Shell (WSHShell)Set x = CreateObject("Wscript.Shell“)Set x = CreateObject("Wscript.Shell“)
Conectar ao objeto Windows Script Host Conectar ao objeto Windows Script Host Network (WSHNetwork)Network (WSHNetwork)Set x = CreateObject("Wscript.Network")Set x = CreateObject("Wscript.Network")
O comando SetO comando Set
Set Palavra chave que precisa estar presente na referência de um objeto.
objWMIService Nome da variável que armazenará a referência ao objeto. Pode ser qualquer nome escolhido por você.
GetObject Método que associa à um objeto existente. Tipocamente, usamos GetObject quando trabalhamos com WMI e ADSI. Com outros objetos COM, usamos normalmente o CreateObject.
(“winmgmts:”) Nome que diz ao sistema operacional para criar uma associação com um objeto COM em particular (uma instância).
Set objWMIService = GetObject("winmgmts:")
Loops ou laçosLoops ou laços
strComputer = "."Set objWMIService = GetObject("winmgmts:" _ & "\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _ ("Select * from Win32_OperatingSystem")For Each objItem in colItems Wscript.Echo objItem.CaptionNext
Fim do LoopFim do Loop
Inicia o LoopInicia o LoopNome da coleçãoNome da coleção
Nome da variávelNome da variável
Sintaxe do For-EachSintaxe do For-Each
For Each item in colecao 'faça alguma coisa com cada um dos itensNext
strComputer = "."Set objWMIService = GetObject("winmgmts:" _ & "\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _ ("Select * from Win32_Service")For Each objItem in colItems Wscript.Echo objItem.Name Wscript.Echo objItem.DisplayName Wscript.Echo objItem.StateNext
O que é uma coleção?O que é uma coleção?
CcmExec
Cisvc
ClipSrv
Clipbook
ComSysApp
Cryptsvc
O que é uma coleção?O que é uma coleção?
Cisvc
ClipSrv
Clipbook
ComSysApp
Cryptsvc
Name: CcmExec
Display Name: SMS Agent Host
Service State: Running
CcmExec
O que é uma coleção?O que é uma coleção?
CcmExec
ClipSrv
Clipbook
ComSysApp
Cryptsvc
Name: Cisvc
Display Name: Indexing Service
Service State: Stopped
Cisvc
Coleções sem nenhum ítemColeções sem nenhum ítemstrComputer = "."Set objWMIService = GetObject("winmgmts:" _ & "\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _ ("Select * from Win32_TapeDrive")Wscript.Echo colItems.Count
Quando uma coleção não retorna nenhum ítem, o laço (se houver) simplesmente não é executado. No exemplo acima, iria imprimir
apenas um zero.
Bonus: Usando VetoresBonus: Usando Vetores
arrLetters = Array("A","B","C","D","E")For Each strLetter in arrLetters Wscript.Echo strLetterNext
Aí está um exemplo que você mesmo pode fazer ao invés de usar coleções:
crie a sua!
If-then: Desvio CondicionalIf-then: Desvio Condicional
If x = 1 Then Wscript.Echo "X é igual a 1."ElseIf x = 2 Then Wscript.Echo "X é igual a 2."Else Wscript.Echo "X não é igual a 1 ou 2."End If
Note que você DEVE iniciar o bloco com as palavras If .. Then e terminar
com End If
If-Then-ElseIf-Then-Else
X é igual a 1?X é igual a 1?SimSim
Nã
oN
ão
Imprimir valor de XImprimir valor de X
Is X equal to 2?Is X equal to 2?SimSim
Nã
oN
ão
Imprimir valor de XImprimir valor de X
Imprimir mensagemImprimir mensagem
If x = 1 ThenIf x = 1 Then
Else If x = 2 ThenElse If x = 2 Then
Else Else
Tente você mesmoTente você mesmo
Abra o script Abra o script If-Then.vbsIf-Then.vbs..
Modifique o código dentro do loop (For-Modifique o código dentro do loop (For-Each) de forma que a linha Each) de forma que a linha Wscript.EchoWscript.Echo objItem.NameobjItem.Name apareça somente se o apareça somente se o serviço estiver rodando.serviço estiver rodando.
Dica: Para checar se o serviço está Dica: Para checar se o serviço está rodando, use este código:rodando, use este código:
If objItem.State = "Running" ThenIf objItem.State = "Running" Then
Deve ter ficado assimDeve ter ficado assim
strComputer = "."Set objWMIService = GetObject("winmgmts:" _ & "\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _ ("Select * from Win32_Service")For Each objItem in colItems If objItem.State = "Running" Then Wscript.Echo objItem.Name End IfNext
Exibindo ResultadosExibindo ResultadosstrComputer = "."Set objWMIService = GetObject("winmgmts:" _ & "\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _ ("Select * from Win32_OperatingSystem")For Each objItem in colItems Wscript.Echo objItem.CaptionNext
Para maiores informaçõesPara maiores informações
ScriptCenter do Technet USAScriptCenter do Technet USAhttp://www.microsoft.com/technet/scriptcenterhttp://www.microsoft.com/technet/scriptcenter
Meu blog pessoal sobre scriptingMeu blog pessoal sobre scriptinghttp://viniciuscanto.blogspot.comhttp://viniciuscanto.blogspot.com
Colunas Technet BrasilColunas Technet Brasilhttp://www.microsoft.com/brasil/technet/colunashttp://www.microsoft.com/brasil/technet/colunas
Fórum e Comunidade TechnetFórum e Comunidade Technethttp://www.microsoft.com/brasil/technet/comunidadehttp://www.microsoft.com/brasil/technet/comunidade
MCPdx e ITCentralMCPdx e ITCentralhttp://www.culminisconnections.com/sites/MCPDxhttp://www.culminisconnections.com/sites/MCPDx
http://www.itcentral.com.br/http://www.itcentral.com.br/
Duvidas?Duvidas?
© 2005 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.