Você está na página 1de 131

Capítulo 22

O desenvolvimento de
um script de instalação
Eu n Neste capítulo, você vai aprender a ler, escrever e modificar dados armazenados no Registro do
Windows. Você vai aprender sobre o projeto básico do registro e da estrutura que ele usa para armazenar dados.
Você vai então aplicar esta informação através do desenvolvimento de um VBScript que cria uma nova chave de
registo. Os novos valores Store irá chave contendo informações de configuração para todos os VBScripts
desenvolvidos por Molly para execução na estação de trabalho do gerenciamento centralizado Windows 2000
Professional.

Trabalhando com o Registro do Windows


As janelas registro é um repositório de banco de dados built-in para informações de configuração em todos os

sistemas operacionais da Microsoft. Ele está disponível desde o Windows 95. A Microsoft e hardware de terceiros e

fornecedores de software usam o registro do Windows para armazenar informações sobre praticamente todos os

aspectos do computador, incluindo o próprio sistema operacional.

Ao alterar o conteúdo do registro, você pode administrar muitos aspectos da operação de um computador, bem como

o funcionamento do seu hardware e software. As pessoas trabalham com o registro o tempo todo, geralmente, mesmo

sem saber. A maioria das mudanças que os usuários fazem em seus desktops são armazenadas no Registro. Por

exemplo, você pode modificar as configurações de proteção de tela do Windows manualmente na caixa de diálogo de

visualização do Windows ou fazendo alterações diretamente para o registro.

NOTA

Para saber mais sobre as chaves do Registro e valores envolvidos na gestão do protetor de tela do Windows através
do registro, consulte o Capítulo 11, “Personalizando o Desktop.”

O registro é altamente confiável. Como resultado, a maioria dos desenvolvedores de hardware e software
migraram dados de seus arquivos INI para ele. Da mesma forma, você pode aproveitar o poder e conveniência
do registro, usando-o como um repositório central para todas as configurações de seus VBScript.
DESENVOLVIMENTO DE UM SCRIPT DE CONFIGURAÇÃO Capítulo 22 487

Examinando as chaves de registro de raiz


O registro é organizado em uma estrutura hierárquica que se assemelha a de um sistema de arquivos. No topo
da hierarquia são cinco raiz ou parente chaves, que também são por vezes referido como urticária. Tabela 22.1
listas de cada uma dessas chaves-raiz e fornece uma breve descrição dos tipos de informações que eles
armazenam.

Tabela 22.1 Registro chaves-raiz Key

Curto Nome Descrição

HKEY_CLASSES_ROOT HKCR Armazena informações sobre associações de arquivos do

Windows

HKEY_CURRENT_USER HKCU Armazena informações relacionadas ao usuário que está

conectado no momento para o computador

HKEY_LOCAL_MACHINE HKLM Armazena informações sobre as configurações do computador

globais

HKEY_USERS - Armazena informações sobre todos os indivíduos que

compartilham o computador

HKEY_CURRENT_CONFIG - Armazena informações sobre a configuração de

hardware atual do computador

Entendendo como os dados são armazenados


Dados localizados no registro é armazenado como valores, que representa o nome de um elemento para o qual os dados

são associados. Os valores podem ser comparados em muitas maneiras de arquivos, que armazenam dados no sistema

de arquivos do Windows. Os valores são organizados dentro de teclas que funcionam como uma espécie de pasta ou

recipiente. Um registro chave é um recipiente que armazena valores ou outras chaves de registro. Os dados são

armazenados no Registro usando o seguinte formato:

Key: KeyType: Valor

Chave representa o nome totalmente qualificado de uma chave de registro. Tipo de chave especifica o tipo de dados que as

lojas principais. O registo armazena um número de diferentes tipos de dados, como mostrado na Tabela 22.2. Valor especifica

os dados reais que é para ser armazenado.


488 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

22,2 Registry Tabela Tipos de Dados Tipo de

dados Descrição

REG_NONE Usado para armazenar um tipo de dados indefinido

REG_BINARY Usado para armazenar um valor binário

REG_SZ Usado para armazenar uma string

REG_EXPAND_SZ Usado para armazenar uma seqüência expansível, como

%NOME DO COMPUTADOR%

REG_MULTI_SZ Usado para armazenar várias cadeias

REG_LINK Um tipo reservado para uso pelo Microsoft

REG_DWORD Usado para armazenar um número inteiro de 32-bit

REG_DWORD_BIG_ENDIAN Usado para armazenar um número inteiro de 32-bit em formato Big Endian

REG_DWORD_LITTLE_ENDIAN Usado para armazenar um número inteiro de 32-bit em formato Little Endian

REG_QWORD Usado para armazenar um número inteiro de 64-bit

REG_QWORD_LITTLE_ENDIAN Usado para armazenar um número inteiro de 64-bit em formato Little Endian

REG_RESOURCE_LIST Usado para armazenar uma lista de drivers de dispositivo

NOTA

Como cada arquivo e pasta gerenciada pelo sistema de arquivos NTFS do Windows, todos os Windows 2000 chave de
registo e valor é protegido usando permissões de segurança. Para ler ou modificar uma chave do registro ou valor, você
deve ter o conjunto apropriado de permissões de segurança.

Acessando manualmente dados de registro


Os dados armazenados no Registro do Windows é muitas vezes modificado durante o funcionamento normal do

computador, com a maioria das pessoas ignoram completamente que as mudanças que eles estão fazendo realmente

estão sendo armazenadas no registro. Além disso, muitos dos applets do Painel de Controle do Windows, que são

usados ​para configurar uma ampla variedade de funcionalidades do Windows, são realmente interfaces de registro

apenas user-friendly. As vantagens de trabalhar com as applets do painel de controlo são de que eles escondem as

complexidades do registo e proporcionar a validação de dados, evitando assim que os dados inválidos de ser

adicionada ao registo.
DESENVOLVIMENTO DE UM SCRIPT DE CONFIGURAÇÃO Capítulo 22 489

Você também pode visualizar diretamente o conteúdo do registro do Windows usando o regedit

utilitário fornecido com todos os sistemas operativos do Windows, demonstrado na Figura


22.1. Usando Regedit você pode visualizar, adicionar, modificar e excluir chaves do Registro e valores. Figura 22.1

mostra cinco chaves-raiz de alto nível do registro. o HKEY_CURRENT_CONFIG chave foi expandida para exibir as

configurações de vídeo do Windows atuais, os quais são armazenados como valores de cadeia (tipo de dados REG_SZ).

FIGURA 22.1 Examinando as configurações de vídeo do Windows armazenados no Registro usando o utilitário Regedit

NOTA

Se você estiver usando o Windows NT, 2000 ou XP, então você também tem a opção de editar o registro usando o regedt32
utilidade.

NOTA

Seja extremamente cuidadoso ao editar diretamente o registro do Windows usando o Regedit ou Regedt32. Nenhuma
destas utilidades fornece uma funcionalidade de anulação. Acidentalmente cometer um erro ao modificar o registro do
Windows pode ter efeitos potencialmente catastróficos em um computador, mesmo tornando-o inoperante. Se você não
tem certeza absoluta sobre os efeitos de fazer uma mudança em particular para o registro, então não fazê-lo.
490 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Usando VBScript eo WSH programaticamente


modificar o Registro
O WSH fornece acesso ao registro do Windows através do WshShell objeto. Usando métodos que
pertencem a este objeto, você pode criar VBScripts que podem criar, modificar e excluir chaves do Registro
e valores. Os métodos de manipulação de registo fornecidos pela WshShell objeto estão listados abaixo.

◆ RegWrite (). Cria novas chaves de registro e valores ou modifica existentes


chaves de registro e valores

◆ RegRead (). Recupera dados armazenados em chaves de registro e valores

◆ RegDelete (). Exclui dados armazenados em chaves de registro e valores

NOTA

Note-se que ao contrário de métodos que pertencem a muitos objetos WSH que suportam administração de recursos
remoto através de uma conexão de rede, os métodos de manipulação de registro associados com o WshShell objeto não
fornecem a capacidade de administrar o registro do Windows em computadores remotos.

Usando o RegWrite () Método


A fim de trabalhar com qualquer um dos WshShell métodos de manipulação de registro do objeto, você deve
primeiro criar uma instância do WshShell objeto dentro de seus scripts. Uma vez feito isso você pode usar o RegWrite
() método. Este método oferece a capacidade de escrever no registro do Windows. Especificamente, ele fornece a

capacidade de:

◆ Criar uma nova chave de registro

◆ Adicionar um valor a uma chave de registo e atribuir dados a ele

◆ Modificar uma atribuição de valor existente A RegWrite () método

tem a seguinte sintaxe.

ObjectReference. RegWrite ( Nome, Valor [, Type])

ObjectReference é a variável que representa um exemplo do WshShell


objeto. Nome especifica a chave ou valor que está a ser criado ou modificado. Valor
Especifica o nome de uma nova chave, o nome de um valor a ser adicionado a um existên-
DESENVOLVIMENTO DE UM SCRIPT DE CONFIGURAÇÃO Capítulo 22 491

ing chave, ou os dados a ser atribuído a um valor existente. Tipo é um parâmetro opcional que especifica um

valor string especificando o tipo de dados associado com um valor. Ao especificar uma chave de registro, o

valor de Nome deve terminar com uma barra invertida. Ao especificar um valor de registro, a barra invertida é

omitido. o RegWrite () método irá converter automaticamente o Valor parâmetro em uma string ou inteiro.

Quando especificado, o Tipo parâmetro identifica o tipo de dados a ser usado para armazenar os dados.

Embora o registo do Windows é capaz de armazenar vários tipos de dados, como mostrado na Tabela 22.2,

a RegWrite () método suporta apenas um subconjunto destes métodos, tal como listado abaixo.

◆ REG_SZ

◆ REG_EXPAND_SZ

◆ REG_DWORD

◆ REG_BINARY

NOTA

o REG_MULTI_SZ Tipo de dados não é suportada pela RegWrite () método mas é suportada pela RegRead
() método.

Para utilizar o RegWrite () método, tudo o que você tem a fazer é fornecer-lhe o nome de uma nova chave de
registro ou valor e especificar sua localização totalmente qualificado em uma das cinco chaves-raiz do
registro.

GORJETA

Cada chave de registo contém um valor padrão, que por padrão tem um tipo de dados
REG_NONE. Se quiser, você pode mudar o tipo de dados e os dados atribuído ao valor padrão.

O exemplo a seguir demonstra como criar uma nova chave de registo e valor.

Definir WshShl = WScript.CreateObject ( “WScript.Shell”) WshShl.RegWrite

“HKCU \ TestKey \ EventLogging”, “Enabled”


492 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Quando executado, este exemplo cria a chave HKCU \ TestKey \ e adiciona um novo valor chamado EventLogging,
que é então atribuído a string "Ativado", como mostrado na Figura 22.2.

nova chave

Novo valor

valor de chave padrão

FIGURA 22.2 Examinando a nova chave de registo e valor

Você pode usar o RegWrite () método para modificar uma chave de registo existente ou valor, tal como demonstrado

abaixo.

Definir WshShl = WScript.CreateObject ( “WScript.Shell”) WshShl.RegWrite

“HKCU \ TestKey \ EventLogging”, “Disabled”

Neste exemplo, os dados atribuídos à EventLogging valor é definido igual a


Desativado. Você também pode alterar o valor padrão de uma chave, como demonstrado abaixo.

Definir WshShl = WScript.CreateObject ( “WScript.Shell”) WshShl.RegWrite “HKCU \ TestKey

\”, “Autor: Jerry Ford”, “REG_SZ”


DESENVOLVIMENTO DE UM SCRIPT DE CONFIGURAÇÃO Capítulo 22 493

Note que neste exemplo, nenhum nome valor foi fornecido. Como resultado, o método designado “Autor: Jerry
Ford” para o valor padrão da chave. O exemplo também explicitamente definido tipo de dados do valor

conforme REG_SZ.

Você pode armazenar qualquer número de valores do Registro sob uma única chave de registro. Por exemplo, as

seguintes declarações VBScript pode ser usado para armazenar dois valores adicionais sob a HKCU \ TestKey \.

Definir WshShl = WScript.CreateObject ( “WScript.Shell”) WshShl.RegWrite “HKCU \

TestKey \ DebugMode”, “Disabled” WshShl.RegWrite “HKCU \ TestKey \

NetworkNotification”, “Enabled”

Figura 22.3 mostra o estado da TestKey chave e os seus valores associados após a execução do
exemplo anterior.

FIGURA 22.3 Examinando os novos valores atribuídos à chave de registro

Usando o RegRead () Método


Depois de adicionar novas chaves de registro e valores, você pode programaticamente recuperá-los
usando o WshShell objeto de RegRead () method.This método tem a seguinte sintaxe:
494 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

ObjectReference. RegRead ( Nome)

ObjectReference é a variável que representa um exemplo do WshShell


objeto. Nome especifica a chave ou valor que está a ser recuperado. o RegRead () método pode ser usado para

recuperar qualquer um dos seguintes tipos de dados de registro do Windows:

◆ REG_BINARY

◆ REG_DWORD

◆ REG_EXPAND_SZ

◆ REG_MULTI_SZ
◆ REG_SZ

O exemplo a seguir demonstra como recuperar e exibir um dos valores de registo criados
pelos exemplos anteriores.

Definir WshShl = WScript.CreateObject ( “WScript.Shell”) strResult =

WshShl.RegRead ( “HKCU \ TestKey \ EventLogging”) MsgBox strResult

Figura 22.4 mostra a saída que aparece com este exemplo.

FIGURA 22,4 utilização RegRead () para recuperar os dados a partir do registo

Se você executar uma RegRead () operação e especificar o nome de uma chave de registro em vez de um
valor, então o método retornará o valor padrão atribuído à chave de registro, como demonstrado abaixo.

Definir WshShl = WScript.CreateObject ( “WScript.Shell”) strResult =

WshShl.RegRead ( “HKCU \ TestKey \”) MsgBox strResult


DESENVOLVIMENTO DE UM SCRIPT DE CONFIGURAÇÃO Capítulo 22 495

Usando o RegDelete () Método


Para excluir uma chave do registro ou valor, você terá que aprender como usar o
RegDelete () método. Este método tem a seguinte sintaxe:

ObjectReference. RegDelete ( Nome)

ObjectReference é a variável que representa um exemplo do WshShell


objeto. Nome especifica a chave ou valor que deve ser excluído. Se você especificar um valor de registro, em seguida,

esse valor é excluído. No entanto, se você especificar uma chave, a chave e todos os valores ou subchaves

armazenados debaixo dela são excluídos. O exemplo a seguir demonstra como excluir um valor do Registro.

Definir WshShl = WScript.CreateObject ( “WScript.Shell”)

WshShl.RegDelete “HKCU \ TestKey \ EventLogging”

Da mesma forma, você pode excluir uma chave de inteiro (juntamente com todas as suas subchaves e valores),

especificando o nome da chave totalmente qualificado seguido pelo caractere de barra invertida, como demonstrado

abaixo.

Definir WshShl = WScript.CreateObject ( “WScript.Shell”)

WshShl.RegDelete “HKCU \ TestKey \”

Proteção contra erros de registro


Se você especificar uma chave do registro ou valor que não existe quando se utiliza o
RegRead () método, irá ocorrer um erro, como demonstrado na Figura 22.5.

FIGURA 22.5 Um exemplo de um erro gerado quando um VBScript tenta ler um valor que não existe

Para evitar um erro de terminar a execução do seu script, você pode usar o On Error Resume Next declaração
e, em seguida, adicionar lógica para recuperar do erro.
496 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Por exemplo, o procedimento a seguir demonstra como usar o Errar objeto para determinar se a
execução do RegRead () método foi bem sucedido.

On Error Resume Next

Definir WshShl = WScript.CreateObject ( “WScript.Shell”)

strResult = WshShl.RegRead ( “HKCU \ TestKey \ EventLogging”)

Se Err <> 0 Then

MsgBox “Adicionar lógica para prosseguir com a configuração padrão e para registrar um evento“& _ ‘log mensagem.’ End

If

Se o RegRead () método é executado com êxito, a exemplo silenciosamente acabar. No entanto, se


ocorrer um erro (por exemplo, o valor não existe), é exibida uma mensagem de erro.

NOTA

Para mais informações sobre como trabalhar com o On Error Resume Next declaração eo Errar objeto, consulte o
Capítulo 6, “Coleta de Dados, Notificação e Relatório de Erros”.

O próximo exemplo amplia a anterior. Ele demonstra como criar uma função em um VBScript que pode
ser usado para verificar se uma chave do registro ou valor existe antes de seu script tenta acessar seu
conteúdo.

Definir WshShl = WScript.CreateObject ( “WScript.Shell”)

strRegKey = “HKCU \ TestKey \ EventLogging”

Se RegKeyExists (strRegKey) = True Then

strEvtLogStatus = WshShl.RegRead (strRegKey)


DESENVOLVIMENTO DE UM SCRIPT DE CONFIGURAÇÃO Capítulo 22 497

Outro

strEvtLogStatus = “Desativado”

WshShl.LogEvent 4, “HKCU \ TestKey \ EventLogging não encontrado - prosseguir com“& _

“Configuração padrão.” End

If

RegKeyExists função (RegKey)

Dim strKeyToTest

RegKeyExists = True

On Error Resume Next

strKeyToTest = WshShl.RegRead (RegKey)

Se Err <> 0 Then

RegKeyExists = False End If

End Function

Este exemplo começa por instanciar o WshShell objeto. Em seguida, uma variável chamada strRegKey é
definido igual a HKCU \ TestKey \ EventLogging. Em seguida uma E se
declaração executa uma função chamada RegKeyExists () e passa o valor de
strRegKey. Esta função determina se existe a chave de registo. Se existir, um valor de Verdade
é retornado da função e o valor de uma variável chamada strEvtLogStatus é definido igual ao
valor de registo, executando o
RegRead () método. Se a função não retorna um valor de Verdade, em seguida, o valor de strEvtLogStatus é

definida igual a uma setting.This padrão permite que o script para continuar a executar. Uma mensagem
informativa também é gravado no log de eventos do aplicativo do Windows, como demonstrado na Figura
22.6.
498 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

FIGURA 22.6 Examinando o formato da mensagem gravada no log de eventos do aplicativo do Windows quando ocorre um erro
no script

o RegKeyExist () função aceita um único argumento, o nome de uma chave do registro ou valor. Ele começa
definindo uma variável chamada strKeyToTest. Em seguida, ele atribui uma variável, em homenagem a função,
um valor padrão de Verdade.

NOTA

Funções retornar um resultado de suas declarações que chamam pelo atribuindo o valor a ser devolvido a uma
variável que tem o mesmo nome que a função.

Em seguida, o On Error Resume Next instrução é executada. Ao colocar esta declaração


dentro da função, o seu âmbito é limitado à função. A próxima instrução toma o strKeyToTest variável
e atribui o valor retornado pelo
RegRead () método. Em seguida, a propriedade padrão do Errar propriedade do objeto é verificado para
determinar se ocorreu um erro (se a chave ou valor existe). Se um erro aconteceu, então o valor de RegKeyExists
é definido igual a Falso. Se um erro não ocorreu, então o valor de RegKeyExists permanecerá Verdade tal
como estabelecido no início da função.
DESENVOLVIMENTO DE UM SCRIPT DE CONFIGURAÇÃO Capítulo 22 499

Criando o script de instalação


Molly está agora pronto para começar a trabalhar em escrever o primeiro roteiro de seu novo projeto. Este script
de instalação VBScript será responsável pela configuração única de entradas de registro para ser usado por
outros scripts em seu projeto. Especificamente, este script irá criar uma nova chave de registro chamada HKLM \
Software \ Intuit \ VBScripts \ MstSumRpts \. Além disso, ele irá criar oito valores de registro localizados sob essa

chave. Estes valores, bem como uma descrição das suas funções e as suas definições iniciais, estão listadas na
Tabela 22.3.

GORJETA

Molly também pode usar esse script para reinicializar os valores de registro usados ​por este projeto para os seus ajustes
iniciais. Além disso, alterando dados que estão associados a cada configuração no script, ela pode reutilizar o script para
modificar posteriormente esses valores, poupando-se assim o trabalho de editar manualmente o registro.

Tabela 22.3 VBScript Projeto valores e as chaves Key

Descrição Valor

EventLogging Um sinalizador que indica se os eventos devem ser ativado


gravado no log de eventos do aplicativo do Windows

Modo de depuração Uma bandeira que indica se intermediário Desativado


resultados hould ser exibido em caixas de diálogo

pop-up durante a execução do script

Notificação de rede Um sinalizador que indica se a rede ativado


mensagens de pop-up devem ser enviados

NtkNotifyList Uma lista de contas de usuário a quem rede MJLF001


ASCK001
mensagens de pop-up devem ser enviados

Win2000Svrs Nomes dos servidores do Windows 2000 onde SERV0001


SERV0002
a aplicação de pedido / inventário é implantado

( continuou)
500 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Tabela 22.3 VBScript Projeto chaves e valores de registro ( contínuo)

Chave Descrição Valor

Pasta compartilhada O nome atribuído à pasta compartilhada em SumReports


os servidores Windows 2000 onde os relatórios

resumidos são armazenados

RptArchive O nome da pasta no Windows d: \ Order_


2000 estação de trabalho profissional, onde o Inventário\
relatórios resumidos consolidados devem ser LogFiles
armazenada

RptFormat Um valor de Texto ou Word, indicando Texto


o tipo do relatório de síntese consolidada arquivo

A seção de inicialização
Do script Inicialização Seção, mostrado abaixo, consiste em apenas três declarações. A primeira declaração se
transforma na aplicação rigorosa de nomenclatura de variáveis. A segunda instrução define uma variável
para o WshShell objecto e uma segunda variável, que vai ser utilizado no Seção de Processamento Principal para
determinar se o script tem permissão para run.The última declaração nesta seção inicializa o WshShell objeto.

Option Explicit

Dim WshShl, IntResponse

Definir WshShl = WScript.CreateObject ( “WScript.Shell”)

A Seção de Processamento Principal


o Seção de Processamento principal, mostrado abaixo, começa ligando o GetPermissionToRun () função.
Em seguida, ele usa um E se declaração para interrogar o valor retornado por esta função para
determinar se ele é igual a 6 (isto é, Molly clicou sim quando solicitado a permitir que o script para
continuar a sua execução). Se a permissão é dada para executar, o script chama o próximo CreateRegistryEntries
() sub-rotina oito vezes, passando-lhe o nome de um valor de registo e os dados que lhe são

atribuídas. Desde o HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ chave não existirá na primeira
chamada para o CreateRegistryEntries ()
DESENVOLVIMENTO DE UM SCRIPT DE CONFIGURAÇÃO Capítulo 22 501

sub-rotina, a chave e o valor declarado será criado. As chamadas de função restantes, então,
armazenar valores adicionais sob essa chave. Uma vez que todas as chaves foram criadas, o script
termina a sua execução usando o WScript objeto de
Sair() método.

intResponse = GetPermissionToRun ()

Se intResponse = 6 Então

CreateRegistryEntries

“HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ EventLogging”, “Enabled”

CreateRegistryEntries

“HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ DebugMode”, CreateRegistryEntries

“Disabled”

“HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ NetworkNotification”, “Enabled” CreateRegistryEntries

“HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ NtkNotifiyList”, “MJLF001 ASCK001”

CreateRegistryEntries

“HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ Win2000Svrs”, “SERV0001

SERV0002” CreateRegistryEntries

“HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ SharedFolder”, “SumReports”

CreateRegistryEntries

“HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ RptArchive”, “D: \

Order_Inventory \ LogFiles” CreateRegistryEntries

“HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ RptFormat”, “Texto” End If

WScript.Quit ()

O GetPermissionToRun () Função
o GetPermissionToRun () função utiliza o VBScript embutido MsgBox ()
função para exibir um aviso que recebe a confirmação antes de permitir que o script para prosseguir.
Se o sim botão é clicado, um valor de 6 é devolvido à instrução de chamada. Se o Não botão é clicado,
um valor de 7 é retornado em vez.

Função GetPermissionToRun ()
502 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

GetPermissionToRun = MsgBox ( “Este script cria chaves de registro e“& _

“Valores para os VBScripts que são executados no Windows 2000“& _ ‘Professional estação de

gerenciamento centralizado.’ & VbCrLf & vbCrLf & _ ‘Você deseja continuar?’, 4)

End Function

Os CreateRegistryEntries () subrotina
o CreateRegistryEntries () sub-rotina, mostrado abaixo, aceita dois argumentos de entrada. Valor chave armazena
o nome da chave do registro ou valor a ser criados e
Dados contém os dados reais a serem atribuídos. o On Error Resume Next declaração é a primeira declaração

na sub-rotina. Ele foi adicionado para permitir que a sub-rotina para continuar a executar se ocorrer um erro
ao criar uma chave de registro individual ou de valor. Em seguida, o WshShell objeto de RegWrite () método é
usado para criar a nova chave ou valor. Então o Errar propriedade padrão do objeto (o Err.Number) é verificado
para ver se a operação de gravação foi bem sucedida. o MsgBox () função é usada para exibir uma
confirmação indicando se a chave foi criada ou ocorreu um erro.

Sub CreateRegistryEntries (Key_Value, dados)

On Error Resume Next

WshShl.RegWrite Key_Value, Data

Se Err <> 0 Then

MsgBox “Ocorreu um erro de escrita“e Key_Value Else

MsgBox Key_Value & “Criado com sucesso.” End If

End Sub

The Script totalmente montado


O VBScript completamente montada é mostrada abaixo. Uma vez executado, ele irá criar entradas de registro
para o resto dos scripts que Molly precisa desenvolver para este novo projeto.
DESENVOLVIMENTO DE UM SCRIPT DE CONFIGURAÇÃO Capítulo 22 503

'************************************************* ************************ 'Script Nome: 22.1.vbs script' Autor: Jerry

Ford 'Criado: 04/05/03

'Descrição: Este é o script de instalação para o Windows 2000 Professional' estação de trabalho de

gerenciamento centralizado. Ele cria uma chave de registro e atribui 'uma série de valores que serão utilizados

pelos VBScripts que correm' este computador.

'************************************************* ************************

'Seção de inicialização

Option Explicit

Dim WshShl, IntResponse

Definir WshShl = WScript.CreateObject ( “WScript.Shell”)

'Secção de Processamento Principal

intResponse = GetPermissionToRun ()

Se intResponse = 6 Então

CreateRegistryEntries

“HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ EventLogging”, “Enabled”

CreateRegistryEntries

“HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ DebugMode”, CreateRegistryEntries

“Disabled”

“HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ NetworkNotification”, “Enabled” CreateRegistryEntries

“HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ NtkNotifiyList”, “MJLF001 ASCK001”

CreateRegistryEntries

“HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ Win2000Svrs”, “SERV0001

SERV0002” CreateRegistryEntries

“HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ SharedFolder”, “SumReports”


504 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

CreateRegistryEntries

“HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ RptArchive”, “D: \ Order_Inventory

\ LogFiles” CreateRegistryEntries

“HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ RptFormat”, “Texto” End If

WScript.Quit ()

'Secção Procedimento

Função GetPermissionToRun ()

GetPermissionToRun = MsgBox ( “Este script cria chaves de registro e“& _

“valores para os VBScripts que são executados no Windows 2000 Professional“& _ ‘estação de trabalho de

gerenciamento centralizado.’ & vbCrLf & vbCrLf & _ ‘Você deseja continuar?’, 4)

End Function

Sub CreateRegistryEntries (Key_Value, dados)

On Error Resume Next

WshShl.RegWrite Key_Value, Data

Se Err <> 0 Then

MsgBox “Ocorreu um erro de escrita“e Key_Value Else

MsgBox Key_Value & “Criado com sucesso.” End If

End Sub

A Figura 22.7 mostra como a nova HKLM \ Software \ Intuit \ VBScripts \ MstRumRpts chave e seus
valores atribuídos aparecem quando vistos usando o utilitário Regedit.
DESENVOLVIMENTO DE UM SCRIPT DE CONFIGURAÇÃO Capítulo 22 505

FIGURA 22.7 Examinando a chave do Registro e valores criados pelo script de instalação

resumo
Neste capítulo, você aprendeu a trabalhar com o WshShell objeto de
RegRead (), RegWrite (), e RegDelete () métodos. Você também aprendeu sobre projeto básico do registro e os tipos

de dados que ele armazena. Você observou como Molly desenvolveu um VBScript que automatizado a
configuração de uma chave do registro que armazenados vários valores. Os valores foram então atribuído dados
que representam as definições de configuração que serão utilizados pelos VBScripts execução na estação de
trabalho do gerenciamento centralizado Windows 2000 Professional.
Esta página foi intencionalmente esquerda em branco
Capítulo 23
Coleta de Relatórios
Resumidos remoto
Eu n Neste capítulo, você vai aprender a escrever VBScripts que podem se conectar a unidades de rede
e, em seguida, administrar remotamente arquivos, copiar, mover, e excluí-los. Usando essa informação, você
vai aprender a desenvolver um script que recolhe os relatórios resumidos sobre os remotos servidores
Windows 2000 em Intuit. Como parte do desenvolvimento deste roteiro, você vai ter a oportunidade de
trabalhar ainda mais com o registro do Windows, recuperando definições de configuração do script.

Tarefas de pré-requisito
Antes de começar a trabalhar em seu novo projeto, Molly tem uma série de pequenas tarefas que precisa
realizar. Essas tarefas incluem:

◆ Criando um script de agendamento para ser usado para configurar a execu- automatizado

ção dos scripts que compõem este projecto.


◆ Criando uma conta de sistema com privilégios administrativos para ser usado para

configurar a execução programada do script de agendamento. Isto irá fornecer roteiros do projeto
com as permissões de segurança pré-requisito que eles precisam para executar.

◆ Visitar ambos os servidores Windows 2000 e criar um compartilhamento de rede


para o D: \ Order_Inventory \ SummaryRpts pastas, a fim de permitir que o script de coleta
relatório para estabelecer uma conexão de rede remota com essas pastas.

Criando uma conta de sistema


A primeira das tarefas de pré-requisitos que Molly funciona em é a criação de uma conta de sistema nível
do domínio. Ela providenciado para esta conta configurada para que sua senha nunca muda. Ao definir
esta conta-se no nível do domínio, Molly garante que ele terá os direitos de segurança e permissões que
são necessários para executar seus roteiros em ambos os servidores Windows 2000 e a estação de
trabalho do Windows 2000 Professional. O nome da conta que ela criou é ScriptSchd. Molly vai associar esta
conta com uma tarefa agendada que ela planeja criar no Windows 2000
RECOLHA DE relatórios resumidos REMOTO Capítulo 23 509

estação de trabalho profissional, a fim de configurar a execução automática de seu script de agendamento.

Criando o Script Scheduler


Molly próxima cria o script de agendamento que irá gerenciar a execução diária e mensal dos
seguintes VBScripts:

◆ O relatório de síntese remoto

◆ O script consolidação relatório

◆ O script de gestão de arquivo

Molly criou este novo script, mostrada abaixo, copiando e modificando o script de agendamento que ela
desenvolveu para o projeto anterior.

'************************************************* ************************ 'Script Nome: 23.1.vbs script' Autor: Jerry

Ford 'Criado: 04/10/03

'Descrição: Este script é executado a seguinte lista de scripts:'

O script de coleta relatório de síntese remoto '

O script consolidação Report '

O script de gerenciamento de Arquivo

'************************************************* ************************

'Seção de inicialização

Option Explicit On Error

Resume Next

WshShl Dim

Definir WshShl = WScript.CreateObject ( “WScript.Shell”)

'Secção de Processamento Principal

RunScript ( “SumRptRetrieve.vbs”)

RUNSCRIPT ( “RptConsolidator.vbs”)
510 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

RUNSCRIPT ( “ArchiveMgr.vbs”)

Se Day (Date ()) = 1 Then

RunScript ( “ArchiveMgr.vbs”) End If

'Terminar roteiro WScript.Quit execução

()

'Secção Procedimento

Sub RunScript (ScriptName)

WshShl.Run ScriptName, 1, True End Sub

Sub WriteToEventLog ()

WshShl.LogEvent 4, “Mestre Scheduler Script execução.” End Sub

Criando as pastas de rede


Próxima Molly visita ambos os servidores Windows 2000 e configura o
d: \ Order_Inventory \ SumReports pasta como uma pasta compartilhada. Ela concede o

ScriptSchd Conta de acesso a esta nova pasta de rede, conforme descrito no procedimento a seguir.

1. Depois de fazer logon em um servidor Windows 2000, Molly clica duas vezes no ícone Meu
computador. A caixa de diálogo Meu computador abre.

2. Ela então clica duas vezes em unidade D:, seguido pela pasta Order_Inventory. A pasta
Order_Inventory abre, mostrando o seu conteúdo.

3. Molly cliques direito do mouse no SummaryRpts pasta e seleciona o compartilhamento

opção no menu que aparece. Isso abre a caixa de diálogo Propriedades da pasta.

4. Em seguida, ela seleciona a opção Compartilhar esta pasta e entra SumRpts no


Partilhar campo nome, como mostrado na Figura 23.1.
RECOLHA DE relatórios resumidos REMOTO Capítulo 23 511

FIGURA 23,1 Criando um compartilhamento de rede para o SummaryRpts pasta localizada em cada um dos servidores Windows 2000

5. Em seguida, ela clica no botão Permissões. Isso exibe caixa de diálogo permissões SummaryRpts
para. A partir daqui, ela pode especificar quais usuários têm acesso remoto para a pasta
compartilhada. Ela começa por selecionar todas as contas atualmente definidas, um de cada
vez, e clicando em Remove. Ela então clica em Add e seleciona o ScriptSchd conta da lista de
contas de domínio que são exibidos.

6. Molly, em seguida, clica em OK três vezes para fechar todas as caixas de diálogo abertas.

Neste ponto, o SummaryRpts pasta é configurada como uma pasta de rede compartilhada para apenas o que ScriptSchd
conta de domínio tem acesso remoto.

NOTA

Molly também poderia ter restringido o acesso local e remoto ao SummaryRpts


pasta, configurando permissões em vez de ou para além de arquivos NTFS para compartilhar permissões de nível.
512 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Configuração das conexões para unidades de


rede e pastas
A finalidade básica do script de recuperação relatório é para recuperar os arquivos de relatório
resumo dos dois servidores Windows 2000. Para realizar esta tarefa, o script deve ter acesso às
pastas onde os relatórios residem em cada servidor. Isto significa que o script deve ter uma
conexão de rede para essas pastas da estação de trabalho do Windows 2000 Professional,
onde ele irá executar. Infelizmente, as conexões de unidade de rede são associados com perfis
de usuário individuais e, portanto, só está disponível quando um usuário com uma unidade de
rede definida ou conexão pasta está conectado no momento para o computador. Porque Molly
planeja para executar o script de recuperação relatório de síntese usando o serviço Agendador
de Tarefas do Windows num momento em que nenhum usuário estiver conectado ao
computador,

Configuração manual das conexões


A maneira tradicional de se conectar a uma unidade de rede remota ou pasta é criar um mapeamento de unidade a ele.

UMA unidade mapeada é uma conexão de rede lógica que faz com que uma unidade ou pasta olhar e agir compartilhada

como se ele estivesse conectado localmente para o computador onde a conexão mapeada é estabelecida.

NOTA

Para mapear uma unidade de rede ou pasta, você deve ser concedido o nível apropriado de direitos de
acesso e permissões no computador onde existe a unidade ou pasta compartilhada.

Os mesmos passos são seguidos para configurar manualmente qualquer conexão com uma unidade de rede ou

pasta e pode ser realizada a partir de qualquer número de pastas do Windows, incluindo o Windows Explorer e

minhas pastas de computador. Por exemplo, o procedimento a seguir descreve as etapas envolvidas na criação de

um mapeamento para uma pasta remota chamada SumReports em um computador chamado SERV0002.
RECOLHA DE relatórios resumidos REMOTO Capítulo 23 513

1. Clique em Iniciar e em Meu computador. A pasta Meu computador é exibida.

2. Clique em Ferramentas e selecione a opção do menu Mapear unidade de rede. A caixa de diálogo Mapear

unidade de rede aparece.

3. Selecione uma letra de unidade disponível na lista drop-down Drive.

4. Digite \\ SERV0002 \ SumReports no campo de pasta, tal como demonstrado em


Figura 23.2.

FIGURA 23.2 criando uma conexão manualmente mapeado para uma pasta de rede

5. Para configurar um mapeamento de unidade persistente que será restaurado na próxima vez que você fizer

logon, certifique-se de que a reconexão opção logon é selecionada. Caso contrário, desmarque esta opção.

6. Clique em Concluir. A caixa de diálogo Mapear unidade de rede se fecha e é substituído por uma
janela do Explorer mostrando o conteúdo da pasta de rede, como demonstrado na Figura 23.3.
514 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

FIGURA 23.3 Examinando o conteúdo da pasta mapeada

Depois que a conexão mapeada é estabelecida para uma unidade de rede ou pasta, você pode trabalhar com ele como

qualquer outra unidade de disco local (desde que você tenha as permissões de acesso de segurança apropriadas).

Trabalhando com o objeto WshNetwork


Porque o script de coleta relatório será executado pelo serviço Agendador de Tarefas, Molly precisa equipá-lo

com a capacidade de estabelecer suas próprias conexões de rede para cada um de pastas compartilhadas

dos servidores Windows 2000. Para conseguir isso, Molly vai precisar usar métodos associados com a WshNetwork

objeto. o WshNetwork objeto expõe uma série de recursos relacionados à rede em redes Microsoft. Ele fornece

acesso a várias propriedades que podem ser usados ​para coletar informações sobre a rede. Estas

propriedades são listadas abaixo.

◆ Nome do computador

◆ UserDomain
◆ UserName

Em adição a estes métodos, o WshNetwork objeto disponibiliza uma série de métodos que fornecem a
capacidade de trabalhar com recursos de disco de rede e impressora. Estes métodos incluem:

◆ EnumNetworkDrives ()
◆ EnumPrinterConnection ()
◆ AddPrinterConnection ()
RECOLHA DE relatórios resumidos REMOTO Capítulo 23 515

◆ RemovePrinterConnection ()
◆ SetDefaultPrinter ()
◆ MapNetworkDrive ()
◆ RemoveNetworkDrive ()

NOTA

Para saber mais sobre as propriedades e objetos associados ao WshNetwork


objeto, consulte o Capítulo 14, “Impressoras e discos de rede de mapeamento.”

Conexões mapeamento de unidade


Para automatizar a criação de um mapeamento para uma unidade de rede ou pasta, Molly precisa
aprender a trabalhar com o WshNetwork objeto de MapNetworkDrive () método. A sintaxe deste método
é descrita no capítulo 14. Uma vez executado, o MapNetworkDrive () método estabelece uma conexão
de unidade de rede que permite que um script para mover, copiar, criar e excluir arquivos e pastas na
unidade de rede ou pasta representada pela conexão.

As seguintes declarações do VBScript demonstrar como para estabelecer uma conexão temporária para uma
unidade de rede ou pasta.

WshNtk Dim

Definir WshNtk = WScript.CreateObject ( “WScript.Network”)

WshNtk.MapNetworkDrive “z:”, “\\ SERV0002 \ D”

Primeiro uma instância do WshNetwork objecto está configurado. Em seguida, a sua MapNetworkDrive () método é

executado, e que é passada uma letra de unidade para ser utilizada na criação do mapeamento e o caminho UNC

da unidade de rede ou pasta.

Desligar conexões de unidade


Para boa forma, Molly quer seu roteiro para desconectar explicitamente suas conexões de unidade de rede
temporários. Para fazer isso, ela terá de usar o WshNetwork objeto de
RemoveNetworkDrive () método. A sintaxe deste método é descrito no Capítulo 14.

Um exemplo de como a desconectar o mapeamento da unidade configurado no exemplo anterior é mostrado na


página seguinte.
516 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

WshNtk Dim

Definir WshNtk = WScript.CreateObject ( “WScript.Network”)

WshNtk.RemoveNetworkDrive “z:”

Como você pode ver, é necessária apenas a letra da unidade que representa a conexão de rede.

Gerenciamento de arquivos
Administrando arquivos, localmente ou através de uma rede, envolve copiar, mover, e excluí-los. O
WSH fornece VBScript com a capacidade de administrar ficheiros utilizando métodos que pertencem à FileSystemObject
objeto. o FileSystem objeto objeto expõe o sistema de arquivos do Windows, permitindo que seus scripts
de interagir diretamente com e gerenciar it.The FileSystemObject objeto também fornece acesso ao Arquivo
objeto, que fornece métodos adicionais para copiar, mover e excluir arquivos individuais.

Trabalhando com o objeto FileSystemObject


Para trabalhar com o FileSystemObject objeto, você deve primeiro criar uma instância que, como demonstrado
abaixo.

Definir FsoObj = New WScript.CreateObject ( “Scripting.FileSystemObject”)

o FileSystemObject objeto fornece acesso direto a métodos que você pode usar para administrar arquivos.
Alguns destes métodos estão listados abaixo.

◆ CopyFile (). Proporciona a capacidade de copiar um ou mais arquivos para um dife-

pasta ent

◆ MoveFile (). Oferece a capacidade de mover um ou mais arquivos para o espec-


pasta ified
◆ DeleteFile (). Oferece a capacidade de excluir o arquivo especificado ou arquivos Cada um destes métodos

permite que você manipule um ou mais arquivos de uma vez. Eles podem ser usados ​para administrar os arquivos

em qualquer unidade à qual o computador tem uma conexão (desde que o nível adequado de acesso de segurança

está disponível). Para mais informações sobre esses métodos, consulte o Capítulo 14.
RECOLHA DE relatórios resumidos REMOTO Capítulo 23 517

Trabalhando com o objeto de arquivo


Em adição aos métodos fornecidos pela FileSystemObject objeto, você pode usar uma série de métodos
fornecidos pelo Arquivo objeto quando se administra arquivos, como listado abaixo.

◆ Cópia de(). Fornece a capacidade de copiar um único arquivo ou pasta

◆ Mover(). Oferece a capacidade de mover um único arquivo ou pasta

◆ Excluir(). Oferece a capacidade de excluir o arquivo especificado ou pasta Uma diferença importante

entre estes três métodos e os métodos fornecidos pela FileSystemObject objeto são que o Arquivo métodos

do objeto só pode ser usado para trabalhar com um arquivo de cada vez. Outra diferença é que o Arquivo métodos

do objeto também pode ser usado para administrar pastas, enquanto que o FileSystemObject

objeto fornece um conjunto totalmente diferente dos métodos para trabalhar com pastas. Para trabalhar com o Arquivo

objeto, você deve primeiro configurar uma instância do


FileSystemObject objeto. Uma vez feito isso, você pode usar o FileSystem objeto objeto de GetFile Método

para configurar uma instância do Arquivo objeto, que irá representar o arquivo que você deseja administrar.
Você pode então executar qualquer um dos
Arquivo métodos do objeto. Dos três Arquivo métodos de objetos listados acima, Molly precisa aprender a

trabalhar com o Cópia de() método. Usando este método, ela planeja copiar o relatório de síntese de ambos

os servidores Windows 2000 todas as manhãs para o processamento na estação de trabalho do Windows

2000 Professional. Este método tem a seguinte sintaxe:

ObjectReference. Cópia de( Alvo [, Substituir])

ObjectReference é a variável que representa um exemplo do Arquivo objeto.


Alvo especifica o arquivo de destino ou pasta que está a ser copiado. sobrescrever é um parâmetro opcional

que, quando fixado igual a Verdade, obriga um arquivo existente ou pasta a ser substituído.

As seguintes declarações do VBScript demonstrar como usar o Cópia de() método para copiar um arquivo
chamado TestFile.txt localizado no D: \ Temp pasta para uma pasta em uma unidade de rede mapeada.

Definir FsoObj = CreateObject ( “Scripting.FileSystemObject”) Conjunto

NomeArquivo = FsoObj.GetFile ( “d: \ temp \ TestFile.txt”) FileName.Copy “z: \

Temp \ TestFile.txt“
518 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Desenvolver a coleção Script Relatório

Molly está agora pronto para começar a escrever o roteiro resumo do relatório coleção. Este script será
responsável por recuperar e armazenar cópias locais dos relatórios resumidos gerados a cada manhã
nos servidores Windows 2000 onde o sistema de ordem / inventário reside. Este script será executado
pelo script de programação e será imediatamente seguido por um script que processa os relatórios que
ele recupera.

A seção de inicialização
Molly começa o script, como todos os seus outros scripts, com a Option Explicit
declaração, a fim de impor a interpretação estrita de nomes de variáveis. Próxima, variáveis ​utilizadas
em todo o roteiro são definidos, ea WshNetwork, FileSystemObject, e WshShell objetos são instanciados.
Finalmente, uma constante é definido que será utilizado em todas as caixas de diálogo pop-up
mostradas pelo script.

Option Explicit

Dim strEventLog, strDebug, strSvrList, strFolderList, strArchive Dim WshNtk, FsoObj, WshShl,

strSumRptFileName

Definir WshNtk = WScript.CreateObject ( “WScript.Network”) Set FsoObj =

CreateObject ( “Scripting.FileSystemObject”) definir WshShl =

WScript.CreateObject ( “WScript.Shell”)

Const cTitleBarMsg = “Relatório Resumido Script Collection”

A Seção de Processamento Principal


No Seção de Processamento principal, mostrado na página seguinte, uma série de chamadas de sub-rotinas e
função controlar a execução global do script. o SetDefaultSettings () definições de configuração de sub-rotinas
conjuntos padrão para o script. Então o GetRegistrySettings () sub-rotina recupera configurações de script
armazenados no Registro do Windows, substituindo as configurações de script padrão correspondente. Em
seguida uma E se declaração determina se o log está habilitado e escreve uma mensagem no log de eventos
do aplicativo do Windows, se necessário.
RECOLHA DE relatórios resumidos REMOTO Capítulo 23 519

o MapNetworkDrive () função é executada duas vezes, uma para cada servidor Windows 2000. A letra
de unidade e um caminho UNC é passada para a função de cada vez. O caminho UNC é criada,
antecedendo o \\ caracteres para o nome de um dos servidores Windows 2000, que é extraído a partir
da variável strSvrList
utilizando o Esquerda() ou Certo() função, a barra invertida (\), e o nome da pasta de rede
compartilhada no servidor Windows 2000 ( Lista strFolder).

SetDefaultSettings ()

GetRegistrySettings ()

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “Resumo roteiro Coleção Relatório agora em execução.”) End If

MapNetworkDrive “X:”, “\\” & Esquerda (strSvrList, 8) e “\” & strFolderList MapNetworkDrive “Y”, “\\” & Right

(strSvrList, 8) e “\” & strFolderList

strSumRptFileName = GetSummaryRptFileName ()

CopyFolders “X: \” & strSumRptFileName, Esquerda (strSvrList, 8) CopyFolders “Y: \” &

strSumRptFileName, Direita (strSvrList, 8)

DisconnectNetworkDrive ( “X:”)

DisconnectNetworkDrive ( “Y”)

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo terminado a execução.”) End If

TerminateScript ()

A próxima instrução no Seção de Processamento Principal chama a GetSummary RptFileName () função,


que retorna o nome do relatório de síntese a ser recuperado. Então o CopyFolders () sub-rotina é
chamada duas vezes e passou o nome do arquivo a ser recuperado e o nome do servidor onde o
arquivo reside. Uma vez que ambos os arquivos relatório de síntese tenham sido recolhidos, o DisconnectNetworkDrive
() sub-rotina é executado duas vezes, a fim de desligar o anteriormente
520 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

conexões estabelecidas com pastas de rede compartilhadas do Windows 2000 Server de. Se for apropriado, outra
mensagem é gravada no log de eventos do aplicativo do Windows eo
TerminateScript () sub-rotina é executado, a fim de parar a execução de scripts.

Os SetDefaultSettings () subrotina
o SetDefaultSettings () sub-rotina, mostrada abaixo, define as configurações padrão para o script.
Estas definições serão usadas para controlar a operação do script no evento que há um problema
ao acessar valores do Registro correspondentes.

SetDefaultSettings sub ()

strEventLog = “ativado” strDebug = “Disabled”

strSvrList = “SERV0001 SERV0002”

strFolderList = “SumReports”

strArchive = “d: \ Order_Inventrory \ LogFiles”

Se strDebug = “Habilitado” Então

MsgBox “As configurações padrão inicializado:“& vbCrLf & vbCrLf & _

“StrEventLog” & vbTab & “=” & vbTab & strEventLog & vbCrLf & _ “strDebug” & vbTab & vbTab & “=” &

vbTab & strDebug & vbCrLf & _ “strSvrList” & vbTab & vbTab & “=” & vbTab & strSvrList & vbCrLf & _

“strFolderList” & vbTab & “=” & vbTab & strFolderList & vbCrLf & _ “strArchive” & vbTab & “=” & vbTab &

strArchive, cTitleBarMsg End If

End Sub

Se o script está sendo executado no modo de depuração (isto é, o valor de strDebug é igual a Ativado) em
seguida, o VBScript MsgBox () função é usada para visualizar o valor de cada variável.

Os GetRegistrySettings () subrotina
o GetRegistrySettings () sub-rotina, mostrado na página seguinte, começa por executar o On Error
Resume Next declaração, a fim de evitar que um problema em recuperar a configuração do registro
do Windows a partir de travar configuração
RECOLHA DE relatórios resumidos REMOTO Capítulo 23 521

a execução do script. Isso permitirá que o script para prosseguir através de uma configuração em caso de necessidade

padrão.

Em seguida, o sub-rotina tenta ler um valor de registro, onde uma das definições de configuração do script
é armazenado. O valor de Err.Number ( a propriedade padrão do Errar objeto) é examinado para determinar
se ocorreu um erro. Se um erro realmente ocorreu e registro estiver ativado, uma mensagem é gravada no
log de eventos do aplicativo Windows e o valor de Err.Number é reposto a zero para limpar o erro antes que
o próximo valor do registro é lido. O processo acima se repete até que todos os valores de registro do
script foram processadas.

GetRegistrySettings sub ()

On Error Resume Next

strEventLog = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ EventLogging”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strEventLog.”) Err.Number

= 0 End If End If

strDebug = WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ DebugMode”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strDebug.”)

Err.Number = 0 End If End If

strSvrList = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ Win2000Svrs”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _


522 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

“Padrão para strSvrList.”) Err.Number =

0 End If End If

strFolderList = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ SharedFolder”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strFolderList.”) Err.Number =

0 End If End If

strArchive = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ RptArchive”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strArchive.”) Err.Number

= 0 End If End If

Se strDebug = “Habilitado” Então

MsgBox “Configurações do Registro inicializado:“& vbCrLf & vbCrLf & _

“StrEventLog” & vbTab & “=” & vbTab & strEventLog & vbCrLf & _ “strDebug” & vbTab & vbTab & “=” &

vbTab & strDebug & vbCrLf & _ “strSvrList” & vbTab & vbTab & “=” & vbTab & strSvrList & vbCrLf & _

“strFolderList” & vbTab & “=” & vbTab & strFolderList & vbCrLf & _ “strArchive” & vbTab & “=” & vbTab &

strArchive, cTitleBarMsg End If

End Sub

Finalmente, se o script está sendo executado no modo de depuração, em seguida, a sub-rotina usa o VBScript MsgBox

() função de exibir o valor de cada variável. Exibindo os valores das variáveis ​uma segunda vez auxilia Molly em

rastrear seu conteúdo como ela se desenvolve a


RECOLHA DE relatórios resumidos REMOTO Capítulo 23 523

roteiro. Enquanto ela está a desenvolver e testar o script, ela configura este valor de
strDebug para igual Ativado. Mais tarde, quando é feito testando o script, ela vai mudar o valor dessa
variável no registro do Windows para Desativado.

O MapNetworkDrive () Função
o MapNetworkDrive () função, mostrada abaixo, aceita dois argumentos. O primeiro argumento é a letra da
unidade a ser usado na criação de uma conexão de rede, eo segundo argumento é o caminho UNC de
uma das pastas de rede compartilhadas que residem nos servidores Windows 2000. Numerosos
resultados intermediários são exibidos em caixas de diálogo pop-up como executa a função (se o script é
executado no modo de depuração). o FileSystemObject objeto de O arquivo existe() método é usado para
determinar se ou não a pasta de rede, como especificado strDrive, é acessível (a rede não está para baixo,
existe a pasta, e assim por diante). Se a pasta está acessível, outro exame é realizado para determinar se
ou não a letra da unidade especificada ( strLetter) está em uso. Se for, então sua conexão é eliminada, a fim
de liberar a letra da unidade para o script. No entanto, se a pasta de rede não pode ser acessado quando
testado pela primeira vez, o TerminateScript () sub-rotina é chamada eo script termina a sua execução.

Função MapNetworkDrive (strLetter, strDrive)

Se strDebug = “Habilitado” Então

MsgBox “strLetter =“& strLetter & vbCrLf & “strDrive =“& _

strDrive, cTitleBarMsg End If

Se FsoObj.DriveExists (strDrive) Em seguida

Se strDebug = “Habilitado” Então

MsgBox strDrive e “existe”, cTitleBarMsg End If

Se FsoObj.DriveExists (strLetter) Em seguida

Se strDebug = “Habilitado” Então

MsgBox “Excluindo letra de unidade“e strLetter, cTitleBarMsg


524 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Fim se

WshNtk.RemoveNetworkDrive strLetter

Fim se

WshNtk.MapNetworkDrive strLetter, strDrive

Outro

Se strDebug = “Habilitado” Então

MsgBox strDrive & “não existe”, cTitleBarMsg End If

Se strEventLog = “Habilitado” Então

WriteToEventLog “roteiro Relatório Resumido Collection - Não é possível mapear“& _ “para a rede drive“e

strDrive End If

TerminateScript () End If

End Function

finalmente, o WshNetwork objeto de MapNetworkDrive () método é executado e passou uma letra de unidade e o
caminho UNC para uma pasta de rede compartilhada.

O GetSummaryRptFileName () Função
o GetSummaryRptFileName () função, mostrada na página seguinte, determina o nome dos relatórios
resumidos atuais. Fá-lo através do preenchimento de uma série de passos. Primeiro, o Encontro() função
para obter a data atual do sistema. Então o
Substituir() função é utilizada para substituir todas as instâncias do caractere de barra invertida (/), que é

especificado dentro da data atual com o traço ( -) personagem. Finalmente, o valor da cadeia de _ SumRpt.txt é
anexado ao final da data do sistema reformatado para chegar ao nome do arquivo do relatório de síntese. Este
nome do arquivo é devolvido para a declaração que chamou esta função através da atribuição de seu valor
para uma variável que tem o mesmo nome que a função.
RECOLHA DE relatórios resumidos REMOTO Capítulo 23 525

GetSummaryRptFileName função ()

GetSummaryRptFileName = Replace (Date () “/”, “-”)

GetSummaryRptFileName = GetSummaryRptFileName & “_SumRpt.txt”

Se strDebug = “Habilitado” Então

MsgBox “Relatório Resumido Arquivos Name =“& GetSummaryRptFileName,, _

cTitleBarMsg End

If

End Function

Os CopyFolders () subrotina
o CopyFolders () sub-rotina, mostrado abaixo, começa por determinar se ou não o relatório de síntese
está acessível. Se ele não estiver acessível, a execução do script é encerrado chamando o TerminateScript
() sub-rotina. Se for acessível, o FileSystemObject objeto de GetFile () método é usada para instanciar
uma instância do Arquivo objeto e criar uma associação com um relatório de síntese (conforme
especificado pelo strFileNameToCopy).

Sub CopyFolders (strFileNameToCopy, strServerName)

strFileName Dim

If (FsoObj.FileExists (strFileNameToCopy)) então

Se strDebug = “Habilitado” Então

MsgBox “Arquivo“e strFileNameToCopy & “encontrado. Agora copiar ...”, _ cTitleBarMsg End If Else

Se strDebug = “Habilitado” Então

MsgBox “Arquivo“e strFileNameToCopy & “não existe. Parar “& _‘a execução do script.’, CTitleBarMsg

End If

TerminateScript () End If
526 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Definir strFileName = FsoObj.GetFile (strFileNameToCopy)

strFileName.Copy (strArchive & “\” & strServerName e “_” & _

Mid (strFileNameToCopy, 4)) Se Err

<> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog “roteiro Relatório Resumido Collection - Não é possível copiar“& _

strFileNameToCopy End

If

Se strDebug = “Habilitado” Então

MsgBox “roteiro Relatório Resumido Collection - Não é possível copiar“& _

strFileNameToCopy, cTitleBarMsg End If

TerminateScript () End If

End Sub

Uma vez instanciado, o Arquivo objeto de Cópia de() método é usado para copiar e mudar o nome do
relatório de síntese para uma pasta local na estação de trabalho do Windows 2000 Professional. O valor
armazenado na strArchive especifica a pasta onde o relatório de síntese deve ser armazenado. O nome do
relatório de síntese é alterado anexando o caractere de barra invertida (\), o valor de strServerName, o
sublinhado (_) caracteres, e o valor de strFileNameToCopy ( menos a letra da unidade especificada nos três
primeiros caracteres do strFileNameToCopy).

O DisconnectNetworkDrive () subrotina
Uma vez que cópias de ambos os relatórios resumidos foram copiados para a estação de trabalho do
Windows 2000 Professional, o DisconnectNetworkDrive () sub-rotina é executado duas vezes. A sub-rotina
começa executando o On Error Resume Next declaração, a fim de prevenir qualquer problema que pode
ocorrer quando desconectar uma conexão de carro de travar a execução do script. Cada vez que a
sub-rotina é chamada, uma letra de unidade diferente é passado para ele, especificando a conexão de
rede a ser desligado.

Sub DisconnectNetworkDrive (strDriveLetter)

On Error Resume Next


RECOLHA DE relatórios resumidos REMOTO Capítulo 23 527

Se strDebug = “Habilitado” Então

MsgBox “Desligar“e strDriveLetter, cTitleBarMsg End If

WshNtk.RemoveNetworkDrive strDriveLetter Se Err <> 0

Then

Se strDebug = “Habilitado” Então

MsgBox “Ocorreu um erro ao desconectar“& strDriveLetter,, _

cTitleBarMsg End

If End If

End Sub

O WriteToEventLog () subrotina
o WriteToEventLog () sub-rotina aceita um único argumento que representa uma mensagem a ser gravada no log de

eventos do aplicativo da estação de trabalho do Windows 2000 Professional. Em seguida, ele escreve esta

mensagem como um evento informativo.

Sub WriteToEventLog (strMessage)

WshShl.LogEvent 4, strMessage

End Sub

O TerminateScript () subrotina
o TerminateScript () sub-rotina, mostrado abaixo, exibe uma mensagem de terminação em uma caixa de diálogo
pop-up, se o script é executado no modo de depuração. Em seguida, ele executa o WScript objeto de Sair() método
para parar a execução do script.

Sub TerminateScript ()

Se strDebug = “Habilitado” Então

MsgBox “A execução do script encerrado.”, CTitleBarMsg End If


528 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

WScript.Quit ()

End Sub

The Script totalmente montado


O script totalmente montado é mostrado below.When executado, ele irá recuperar as suas definições de
configuração do registro do Windows, conecte-se as pastas de rede compartilhadas localizadas em cada um
dos servidores Janela 2000, e copiar relatórios de resumo do dia atual para o Windows 2000 Professional
posto de trabalho.

'************************************************* ************************ 'Script Nome: 23.2.vbs script' Autor: Jerry

Ford 'Criado: 04/11/03

'Descrição: Este script copia arquivos de servidores remotos para um centro de' pasta em uma estação de

trabalho Windows 2000 Professional.

'************************************************* ************************

'Seção de inicialização

Option Explicit

Dim strEventLog, strDebug, strSvrList, strFolderList, strArchive Dim WshNtk, FsoObj, WshShl,

strSumRptFileName

Definir WshNtk = WScript.CreateObject ( “WScript.Network”) Set FsoObj =

CreateObject ( “Scripting.FileSystemObject”) definir WshShl =

WScript.CreateObject ( “WScript.Shell”)

Const cTitleBarMsg = “Relatório Resumido Script Collection”

'Secção de Processamento Principal

SetDefaultSettings ()
RECOLHA DE relatórios resumidos REMOTO Capítulo 23 529

GetRegistrySettings ()

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “Resumo roteiro Coleção Relatório agora em execução.”) End If

MapNetworkDrive “X:”, “\\” & Esquerda (strSvrList, 8) e “\” & strFolderList MapNetworkDrive “Y”, “\\” & Right

(strSvrList, 8) e “\” & strFolderList

strSumRptFileName = GetSummaryRptFileName ()

CopyFolders “X: \” & strSumRptFileName, Esquerda (strSvrList, 8) CopyFolders “Y: \” &

strSumRptFileName, Direita (strSvrList, 8)

DisconnectNetworkDrive ( “X:”)

DisconnectNetworkDrive ( “Y”)

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo terminado a execução.”) End If

TerminateScript ()

'Secção Procedimento

SetDefaultSettings sub ()

strEventLog = “ativado” strDebug = “Disabled”

strSvrList = “SERV0001 SERV0002”

strFolderList = “SumReports”

strArchive = “d: \ Order_Inventrory \ LogFiles”

Se strDebug = “Habilitado” Então

MsgBox “As configurações padrão inicializado:“& vbCrLf & vbCrLf & _

“StrEventLog” & vbTab & “=” & vbTab & strEventLog & vbCrLf & _ “strDebug” & vbTab & vbTab &

“=” & vbTab & strDebug & vbCrLf & _


530 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

“StrSvrList” & vbTab & vbTab & “=” & vbTab & strSvrList & vbCrLf & _ “strFolderList” & vbTab & “=” &

vbTab & strFolderList & vbCrLf & _ “strArchive” & vbTab & “=” & vbTab & strArchive, , cTitleBarMsg End If

End Sub

GetRegistrySettings sub ()

On Error Resume Next

strEventLog = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ EventLogging”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strEventLog.”) Err.Number

= 0 End If End If

strDebug = WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ DebugMode”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strDebug.”)

Err.Number = 0 End If End If

strSvrList = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ Win2000Svrs”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strSvrList.”) Err.Number =

0 End If
RECOLHA DE relatórios resumidos REMOTO Capítulo 23 531

Fim se

strFolderList = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ SharedFolder”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strFolderList.”) Err.Number =

0 End If End If

strArchive = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ RptArchive”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strArchive.”) Err.Number

= 0 End If End If

Se strDebug = “Habilitado” Então

MsgBox “Configurações do Registro inicializado:“& vbCrLf & vbCrLf & _

“StrEventLog” & vbTab & “=” & vbTab & strEventLog & vbCrLf & _ “strDebug” & vbTab & vbTab & “=” &

vbTab & strDebug & vbCrLf & _ “strSvrList” & vbTab & vbTab & “=” & vbTab & strSvrList & vbCrLf & _

“strFolderList” & vbTab & “=” & vbTab & strFolderList & vbCrLf & _ “strArchive” & vbTab & “=” & vbTab &

strArchive, cTitleBarMsg End If

End Sub

Função MapNetworkDrive (strLetter, strDrive)

Se strDebug = “Habilitado” Então

MsgBox “strLetter =“& strLetter & vbCrLf & “strDrive =“& _

strDrive, cTitleBarMsg
532 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Fim se

Se FsoObj.DriveExists (strDrive) Em seguida

Se strDebug = “Habilitado” Então

MsgBox strDrive e “existe”, cTitleBarMsg End If

Se FsoObj.DriveExists (strLetter) Em seguida

Se strDebug = “Habilitado” Então

MsgBox “Excluindo letra de unidade“e strLetter, cTitleBarMsg End If

WshNtk.RemoveNetworkDrive strLetter

Fim se

WshNtk.MapNetworkDrive strLetter, strDrive

Outro

Se strDebug = “Habilitado” Então

MsgBox strDrive & “não existe”, cTitleBarMsg End If

Se strEventLog = “Habilitado” Então

WriteToEventLog “roteiro Relatório Resumido Collection - Não é possível mapear“& _ “para a rede drive“e

strDrive End If

TerminateScript () End If

End Function

GetSummaryRptFileName função ()

GetSummaryRptFileName = Replace (Date () “/”, “-”)


RECOLHA DE relatórios resumidos REMOTO Capítulo 23 533

GetSummaryRptFileName = GetSummaryRptFileName & “_SumRpt.txt”

Se strDebug = “Habilitado” Então

MsgBox “Relatório Resumido Arquivos Name =“& GetSummaryRptFileName,, _

cTitleBarMsg End

If

End Function

Sub CopyFolders (strFileNameToCopy, strServerName)

strFileName Dim

If (FsoObj.FileExists (strFileNameToCopy)) então

Se strDebug = “Habilitado” Então

MsgBox “Arquivo“e strFileNameToCopy & “encontrado. Agora copiar ...”, _ cTitleBarMsg End If Else

Se strDebug = “Habilitado” Então

MsgBox “Arquivo“e strFileNameToCopy & “não existe. Parar “& _‘a execução do script.’, CTitleBarMsg

End If

TerminateScript () End If

Definir strFileName = FsoObj.GetFile (strFileNameToCopy)

strFileName.Copy (strArchive & “\” & strServerName e “_” & _

Mid (strFileNameToCopy, 4)) Se Err

<> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog “roteiro Relatório Resumido Collection - Não é possível copiar“& _

strFileNameToCopy End

If

Se strDebug = “Habilitado” Então

MsgBox “roteiro Relatório Resumido Collection - Não é possível copiar“& _


534 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

strFileNameToCopy, cTitleBarMsg End If

TerminateScript () End If

End Sub

Sub DisconnectNetworkDrive (strDriveLetter)

On Error Resume Next

Se strDebug = “Habilitado” Então

MsgBox “Desligar“e strDriveLetter, cTitleBarMsg End If

WshNtk.RemoveNetworkDrive strDriveLetter Se Err <> 0

Then

Se strDebug = “Habilitado” Então

MsgBox “Ocorreu um erro ao desconectar“& strDriveLetter,, _

cTitleBarMsg End

If End If

End Sub

Sub WriteToEventLog (strMessage)

WshShl.LogEvent 4, strMessage

End Sub

Sub TerminateScript ()

Se strDebug = “Habilitado” Então

MsgBox “A execução do script encerrado.”, CTitleBarMsg End If


RECOLHA DE relatórios resumidos REMOTO Capítulo 23 535

WScript.Quit ()

End Sub

Figura 23.4 mostra o relatório de síntese arquivos uma vez que eles foram copiados de cada servidor
Windows 2000 pela primeira vez. Eles são armazenados na estação de trabalho do Windows 2000
Professional em D: \ Order_Inventory \ LogFiles. Como você pode ver, cada um dos nomes de arquivo relatório
de síntese foi modificado para incluir o nome do servidor a partir do qual foram recolhidas.

FIGURA 23.4 Examinando os arquivos de relatório resumo depois de terem sido copiados para a estação de trabalho
Windows 2000 Professional

resumo
Este capítulo mostrou como criar VBScripts que podem estabelecer conexões remotas para unidades de rede

compartilhadas. Você também aprendeu como copiar, mover e excluir arquivos de rede. Você observou como Molly

desenvolveu um VBScript que recolheu remotamente armazenados relatórios resumidos e armazenados-los na

estação de trabalho do Windows 2000 Professional para processamento posterior. No processo, você reforçou sua

compreensão de como recuperar as configurações de script armazenados no Registro do Windows.


Esta página foi intencionalmente esquerda em branco
Capítulo 24
Processamento e
consolidação de dados
de relatório
Eu n Neste capítulo, você vai aprender como desenvolver um VBScript que lê e processa ambos os
arquivos relatório de síntese coletados do SERV0001 e servidores SERV0002 Windows 2000. então você vai
aprender a criar o relatório de síntese consolidada em um dos dois formatos, texto e Microsoft Word.
Finalmente, você vai aprender a desenvolver um processo que é capaz de notificar operações seleccionadas
membros da equipe quando o relatório consolidado está disponível.

Analisando Índice de corda


O script desenvolvido neste capítulo fazem uso pesado de uma série de funções do VBScript que se
relacionam com a análise e manipular o conteúdo de strings. Estas funções serão usados ​durante a leitura e
processamento dos dois relatórios resumidos de forma a identificar e manipular os dados que são
processados. Você vai precisar usar essas funções novamente mais tarde no script ao escrever o relatório
de síntese consolidada.

Índice de corda indexação


Uma das funções do VBScript que serão utilizados para desenvolver script deste capítulo é a Dividido() função.
Esta função tem um argumento de cadeia e constrói uma matriz de dimensão única composta de substrings
extraídos da função string.This original será usado para processar um valor de registro cujo conteúdo representa
uma lista de nomes de usuários a quem mensagens de rede devem ser enviadas. Ao dividir-se esta lista de
nomes em uma matriz, você pode usar um A seguir loop para processar de forma iterativa cada nome de utilizador
armazenados na matriz. o Dividido() função tem a seguinte sintaxe:

Dividido( Expressão [, Delimitador [, Contagem [, Compare]]])

Expressão representa o string a ser processado. delimitador especifica um carácter opcional que identifica

limites de subcadeia. Se omitido, o caractere de espaço é assumido. Contagem é um parâmetro opcional que
pode ser usado para limitar o número de substrings recuperados, e Comparar é um parâmetro opcional que
especifica o tipo de comparação para executar (especificar um valor de 0 para realizar uma comparação
binária e um valor de 1 para realizar uma comparação de texto).
PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 539

Por exemplo, as seguintes declarações demonstram como usar o Dividido()


função. Primeiro, uma string que armazena uma lista de nomes, separados por um espaço, é definido. Então o Dividido()
função é usada para criar uma matriz de dimensão única chamada astrList que armazena cada um desses três
nomes como elementos da matriz.

strlista = “Mike Nick Mark” astrList =

Split (strlista)

Removendo esquerda e à direita espaços


Outra função VBScript que será usado no script desenvolvido neste capítulo é a Aparar() função
funcionar.Este recupera uma cópia de uma seqüência de caracteres sem espaços antes ou depois e tem
a seguinte sintaxe:

Aparar( corda)

Corda especifica a cadeia a ser processado pela função. O exemplo a seguir mostra uma instrução que

constrói uma corda preenchido com um número de espaços em branco. A declaração é seguida por uma MsgBox
() declaração de que usa o Aparar() função para remover os espaços em branco estranhos antes de exibir o

conteúdo da string.

strlista = “Mike Nick Mark “

MsgBox guarnição (strlista)

Convertendo uma string para um Integer


Outra função VBScript que será útil no desenvolvimento de VBScript deste capítulo é a CInt () função.
Esta função recupera uma expressão convertido para um subtipo inteiro. A sintaxe para esta
função é mostrado abaixo.

CInt ( Expressão)

Expressão representa uma expressão de cadeia. Esta função é útil quando se extrai valores numéricos a partir de

cadeias de texto, tal como demonstrado abaixo.

strlista = “Existem 10 unidades na mão” intCount = Cint

(idade (strlista, 11,2))

Neste exemplo, uma cadeia de caracteres está definido e, em seguida, analisada utilizando o Mediana () função para

extrair o número de unidades na mão. Enquanto VBScript normalmente faz um bom trabalho de conversão de valores de

um subtipo de variante para outra, como quando você especificar uma operação matemática, há também momentos em

que ele não faz o subtipo


540 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

ajuste corretamente. usando o CInt () função, como mostrado acima, pode explicitamente converter um valor para um

subtipo número inteiro, a fim de assegurar uma correcta interpretação.

Determinar o comprimento de uma corda


Outra função VBScript que será útil no desenvolvimento de VBScript deste capítulo é a Len () função.
Esta função recupera o número de caracteres em uma string ou variável. A sintaxe para esta
função está listado abaixo.

Len ( corda | variável)

Corda representa uma string cujo comprimento deve ser calculado. Em VBScript deste capítulo, o Len () função

será usada repetidamente para determinar se ou não uma linha em branco foi encontrado dentro de um
arquivo de relatório (ou seja, uma cadeia de comprimento zero). Por exemplo, a seguir E se declaração
demonstra como determinar se uma variável foi atribuído nenhum dado. Se não foi atribuído dados, seu
comprimento será igual a zero. Neste exemplo, uma ação seja tomada apenas quando há alguns dados a
serem processados.

Se Len (strText)> 0 Then

...

Fim se

Outras funções de VBScript


Este capítulo vai tirar proveito de uma série de outras funções do VBScript ao processar os
relatórios resumidos e criando o relatório de síntese consolidada. Estas funções, listadas abaixo, já
foram analisados ​em capítulos anteriores.

◆ Mediana (). Recupera um subconjunto de caracteres de uma cadeia

◆ Instr (). Recupera a posição de caracteres de primeira ocorrência de um


corda dentro de outro

◆ Esquerda(). Recupera um subconjunto de caracteres a partir do lado esquerdo de uma cadeia

◆ Certo(). Recupera um subconjunto de caracteres do lado direito de uma string

Trabalhando com o modelo de objeto do Word


roteiro deste capítulo irá ler dois relatórios resumidos coletados do SERV0001 e servidores SERV0002
do Windows 2000 ao Intuit. Será, então, processar e combinar
PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 541

os dados encontrados nestes dois relatórios para criar um novo relatório de síntese consolidada. Este
relatório estará disponível em dois formatos diferentes, o formato de texto padrão apresentados em
exemplos anteriores e um formato Microsoft Word opcional. A versão Word do relatório pode torná-lo mais
conveniente para muitas pessoas no Intuit para ver o relatório, que será formatado usando fontes
diferentes e caráter seletivo realce para torná-lo mais atraente do que o seu homólogo de texto simples.
Para escrever a versão do Word do relatório consolidado, você terá que aprender como fazer referência e
trabalhar com o modelo de objeto do Word. No topo do modelo de objeto do Word é o Aplicação objeto.
Quando o Word é iniciado, uma instância da Aplicação objeto é criado automaticamente. Você pode usar as
propriedades e métodos que pertencem a esse objeto para acessar objetos de nível inferior e coleções no
modelo de objeto do Word. Você pode então usar as propriedades e métodos fornecidos por esses
objetos e coleções para automatizar a criação de relatórios usando o Word. A declaração a seguir
demonstra como criar uma instância do Word a partir de um VBScript:

Definir objMsWord = WScript.CreateObject ( “Word.Application”)

Esta declaração atribui uma referência à Palavra Aplicação objecto sob a forma de uma variável
chamada objMsWord. A fim de criar a versão do Word do relatório de síntese consolidada, você terá
que aprender a trabalhar com os seguintes objetos do Word:

◆ Documentos. Uma coleção que representa todas as instâncias atualmente abertas


de documentos do Word. Esta coleção fornece propriedades e métodos necessários para
criar, abrir, salvar e fechar arquivos. o documentos coleção é acessada usando o Aplicação objeto
de documentos propriedade.

◆ Documento. Uma instância individual de um documento do Word. o Documento


objeto fornece propriedades e métodos necessários para criar, abrir, salvar e fechar arquivos.

◆ Seleção. Representa uma instância do Windows atualmente aberto


painel. o Seleção objecto é acedido usando o Aplicação
objeto de Seleção propriedade. o Seleção objeto é usado ao executar uma ação em um
documento do Word, tais como digitação de texto.

◆ Fonte. Fornece acesso a propriedades que podem ser usadas para formatar o

aparência do texto dentro de documentos. o Fonte objecto é acedido usando o Seleção objeto
de Fonte propriedade.
542 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

outra útil Aplicação propriedade do objeto é ActiveDocument, que recupera uma referência ao
documento do Word actualmente activa. O exemplo a seguir demonstra como usar esses objetos e
suas propriedades e métodos para criar, gravar e salvar um arquivo do Word. A documentação para
cada instrução usado dentro do script é fornecido por comentários embutidos dentro do próprio
script.

'Define a variável a ser utilizado para armazenar uma referência para o objecto de aplicação Dim objWordDoc

'Instantiate Palavra e definir a referência de objecto de aplicação indicados objWordDoc =

WScript.CreateObject ( ‘Word.Application’)

'Use o método Add da coleção Documentos para abrir um novo documento do Word vazio objWordDoc.Documents.Add

()

'Use o objeto Font nome, tamanho e propriedades Negrito para formatar a saída de texto

objWordDoc.Selection.Font.Name = ‘Arial’ objWordDoc.Selection.Font.Size = 12 objWordDoc.Selection.Font.Bold

= True

'Use o método do objeto Selection TypeText () para escrever uma linha de texto

objWordDoc.Selection.Typetext ( ‘Cabeçalho do Relatório’)

'Use método do objecto Selection TypeParagraph () para inserir duas alimentações de linha

objWordDoc.Selection.TypeParagraph objWordDoc.Selection.TypeParagraph

'Use o tamanho do objeto Font e propriedade Negrito para formatar a saída de texto

objWordDoc.Selection.Font.Size = 10 objWordDoc.Selection.Font.Bold = False

'Use TypeText do objeto Selection () e TypeParagraph () para escrever' texto adicional

objWordDoc.Selection.Typetext ( “Linha 1 do relatório.”)

objWordDoc.Selection.TypeParagraph

objWordDoc.Selection.Typetext ( “Linha 2 do relatório.”)

'Use propriedade ActiveDocument do objeto Applications para fazer referência ao atual documento e, em seguida, usar

SaveAs do objeto Document () para salvar a Palavra


PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 543

'Arquivo

objWordDoc.ActiveDocument.SaveAs ( “c: \ Temp \ TextFile.doc”)

'Use Fechar do objeto de documento () para fechar a objWordDoc.ActiveDocument.Close documento

do Word ()

'O Finaliza exemplo actualmente activa de Palavra objWordDoc.Quit ()

NOTA

Devido ao tamanho e complexidade do modelo de objeto do Word, não há espaço suficiente neste livro para cobri-lo
em qualquer maior profundidade. Para saber mais sobre modelo de objeto do Word, confira msdn.Microsoft.com/office.

Desenvolver um Procedimento rede de


mensagens
Uma das metas que Molly tem para este script é para equipá-lo com a capacidade de notificar a equipe de
operações selecionadas, na forma de uma mensagem de caixa de diálogo pop-up, quando o relatório de
síntese consolidada está disponível. Ela pensou sobre a tentativa de exibir uma mensagem pop-up usando o MsgBox
() funcionar na estação de trabalho do Windows 2000 Professional, onde o script é executado. Ela descobriu

que isso não iria funcionar, porque o script que cria o relatório de consolidação é executado em segundo plano
usando o WScript.exe hospedeiro execução. Portanto, mesmo se ela tenta usar o MsgBox () função para exibir
uma caixa de diálogo interativa pop-up, a caixa de diálogo pop-up não será exibida. Em vez disso, o script iria
parar o processamento enquanto esperava para o usuário responder à caixa de diálogo pop-up, que nunca
viria, uma vez que a caixa de diálogo pop-up não foi exibido. Depois de fazer um pouco de pesquisa, Molly veio
através do Windows net Send comando. Este comando fornece a capacidade de enviar uma mensagem de texto
através de uma rede para um usuário ou computador especificado. A sintaxe do net Send comando é mostrado
abaixo.

net send ( nomear | * | / domínio[: name] | / Comercial) mensagem


544 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Nome representa o nome de um usuário ou computador para quem a mensagem está a ser enviada. Para que o

usuário receber ou computador para receber e exibir a mensagem pop-up, o serviço de mensagens do

Windows deve estar em execução no seu computador. Além disso, o usuário deve estar conectado ao seu

computador no momento em que a mensagem é enviada. O asterisco (*) pode ser usado para enviar a

mensagem para todos os usuários dentro do domínio ou grupo de trabalho ao qual o computador de envio é

membro. O / nome do domínio parâmetro pode ser usado para enviar a mensagem a todos os nomes definidos no

domínio do Windows. O / Comercial parâmetro fornece a capacidade de enviar a mensagem a todos os usuários

com uma conexão de rede ativa para o computador de envio. mensagem representa o texto da mensagem que

está a ser exibido na caixa de diálogo pop-up. Para utilizar o net Send comando de dentro de um script, você

precisa usar o

WshShell objeto de Corre() Método, tal como demonstrado abaixo.

Definir WshShl = WScript.CreateObject ( “WScript.Shell”) strUser = “Jford”

strMsgTest = “Este é um teste!”

WshShl.Run “Net Send“& strUser & ““& strMsgTest

Quando executado, este exemplo mostra a caixa de diálogo pop-up mostrado na Figura 24.1 no computador onde o

usuário cujo nome de usuário é Jford está conectado no momento.

FIGURA 24.1 Examinar o conteúdo de uma mensagem de rede criada usando o net Send mand com-

Criando a Consolidação Script Relatório

O script de criação de relatório de síntese consolidada realiza uma série de tarefas diferentes. Ele lê e
armazena o conteúdo de ambos os relatórios resumidos em duas matrizes distintas. Em seguida, ele gira
através de ambas as matrizes, análise fora dado a ser usada para criar o relatório de síntese consolidada.
Este processo envolve várias funções stringrelated VBScript. Além de criar o relatório de texto padrão, o
script tem
PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 545

a capacidade de criar uma versão do Word. Outras actividades de script incluem a recuperação de definições de

configuração do registro do Windows, suportando um modo de depuração, mensagens de log de eventos do aplicativo

e enviar mensagens de notificação de rede.

A seção de inicialização
Do script Inicialização Seção, mostrada abaixo, define as variáveis ​usadas globalmente em todo o script.
Além disso, ele define três matrizes dinâmicas, que serão usados ​para armazenar o conteúdo dos
relatórios, enquanto eles estão sendo processados. Um conjunto de constantes e instâncias do WshShell
e FileSystemObject
objetos também são definidos aqui.

Option Explicit

Dim strEventLog, strDebug, strSvrList, strArchive, strConsolFolder Dim strRpt1, strRpt2, strConSolRptName,

strRptFormat, strNetworkNotification

ReDim astrServ0001Array (0) ReDim

astrServ0002Array (0) ReDim

astrProductionArray (0)

Dim FsoObj, WshShl

Const cTitleBarMsg = “Relatório Criador consolidado sucinto” Const cForReading = 1

Const cForWriting = 2 Const cForAppending = 8

Definir WshShl = WScript.CreateObject ( “WScript.Shell”) Set FsoObj =

CreateObject ( “Scripting.FileSystemObject”)

A Seção de Processamento Principal


Do script Seção de Processamento principal, mostrado abaixo, consiste de uma série de
procedimento calls.The SetDefaultSettings () e GetRegistrySettings ()
sub-rotinas são chamados para configurar as definições de configuração do script, como tem sido demonstrado
em scripts anteriores. As mensagens são gravadas no log de eventos do aplicativo Windows pela WriteToEventLog
() sub-rotina, se o registro de eventos é
546 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

ativado quando o script inicia a execução. o IdentifyRptsToProcess ()


sub-rotina cria uma variável que especifica o nome de relatórios resumidos do dia atual. o ReadSummaryReport
() sub-rotina é então chamado duas vezes e passou o nome de um servidor Windows 2000. Esta

sub-rotina lê e armazena o conteúdo de cada relatório de síntese em uma matriz. o CreateConsolidatedTextReport


() sub-rotina é então chamado para escrever a versão texto do relatório de síntese consolidada.

Se necessário, a

CreateConsolidatedWordReport () sub-rotina é então executado, a fim de criar uma versão do


Word do relatório. Se Notificação de rede estiver ativada, o
NotifyOperationsStaff () sub-rotina é executada em seguida. Finalmente, uma mensagem opcional está
escrito, se o registro de eventos é habilitado e execução do script é encerrado chamando o TerminateScript
() sub-rotina.

SetDefaultSettings () ()

GetRegistrySettings

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “Summary Relatório Consolidado Criador execução.”) End If

IdentifyRptsToProcess ()

ReadSummaryReport (Esquerda (strSvrList, 8))

ReadSummaryReport (Direito (strSvrList, 8))

CreateConsolidatedTextReport ()

Se strRptFormat = “Palavra” Então

CreatConsolidatedWordReport () End If

Se strNetworkNotification = “Habilitado” Então

NotifyOperationsStaff () End If

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “Summary Relatório Consolidado Criador terminou.”) End If


PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 547

TerminateScript ()

Os SetDefaultSettings () subrotina
Como demonstrado nos scripts anteriores, o SetDefaultSettings () sub-rotina, mostrado abaixo, estabelece
definições de configuração padrão para o script.

SetDefaultSettings sub ()

strEventLog = “Habilitado” strDebug = “Desativado” strSvrList =

“SERV0001 SERV0002” strArchive = “d: \ Order_Inventrory \

LogFiles” strRptFormat = “Text”

strNetworkNotification = “Habilitado”

strConsolFolder = “d: \ Order_Inventory \ ConsolidatedRpts”

Se strDebug = “Habilitado” Então

MsgBox “Configurações do Registro recuperadas:“& vbCrLf & vbCrLf & _ ‘strEventLog’ & vbTab & ‘=’ & vbTab &

strEventLog & vbCrLf & _ ‘strDebug’ & vbTab & vbTab & ‘=’ & vbTab & strDebug & vbCrLf & _ “ strSvrList”&

vbTab & vbTab &‘=’& vbTab & strSvrList & vbCrLf & _‘strArchive’& vbTab &‘=’& vbTab & strArchive & vbCrLf &

_‘strRptFormat’& vbTab &‘=’& vbTab & strRptFormat & vbCrLf & _ “strNetworkNotification” & vbTab & “=” & vbTab

& strNetworkNotification & _

vbCrLf & _

“StrConsolFolder” & vbTab & “=” & vbTab & strConsolFolder, cTitleBarMsg End If

End Sub

Os GetRegistrySettings () subrotina
o GetRegistrySettings () sub-rotina, mostrado abaixo, recupera as configurações de registro do
Windows e registra mensagens no log de eventos do aplicativo do Windows se ocorrer erros.

GetRegistrySettings sub ()
548 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

On Error Resume Next

strEventLog = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ EventLogging”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando default“& _

“Para strEventLog.”)

Err.Number = 0 End If End If

strDebug = WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ DebugMode”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strDebug.”)

Err.Number = 0 End If End If

strSvrList = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ Win2000Svrs”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strSvrList.”) Err.Number =

0 End If End If

strArchive = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ RptArchive”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strArchive.”)


PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 549

Err.Number = 0 End

If End If

strRptFormat = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ RptFormat”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strRptFormat.”) Err.Number

= 0 End If End If

strNetworkNotification =

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ NetworkNotification”)

Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando padrão para strNetworkNotification.”)

Err.Number = 0 End

If End If

strConsolFolder = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ ConsolFolder”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strConsolFolder.”) Err.Number =

0 End If End If

Se strDebug = “Habilitado” Então

MsgBox “Configurações do Registro recuperadas:“& vbCrLf & vbCrLf & _ ‘strEventLog’ & vbTab &

‘=’ & vbTab & strEventLog & vbCrLf & _ ‘strDebug’ & vbTab & vbTab & ‘=’ & vbTab & strDebug &

vbCrLf & _
550 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

“StrSvrList” & vbTab & vbTab & “=” & vbTab & strSvrList & vbCrLf & _ “strArchive” & vbTab & “=” & vbTab &

strArchive & vbCrLf & _ “strRptFormat” & vbTab & “=” & vbTab & strRptFormat & vbCrLf & _

“strNetworkNotification” & vbTab & “=” & vbTab & strNetworkNotification & _

vbCrLf & _

“StrConsolFolder” & vbTab & “=” & vbTab & strConsolFolder, cTitleBarMsg End If

End Sub

O IdentifyRptsToProcess () subrotina
A lógica apresentada no IdentifyRptsToProcess () sub-rotina já foi demonstrado inúmeras vezes
em outras VBScripts apresentados neste livro. Esta sub-rotina é responsável por definir o valor
atribuído a uma variável que identifica o nome de relatórios resumidos do dia atual.

Sub IdentifyRptsToProcess ()

strFileNameString Dim

strFileNameString = Replace (Date () “/”, “-”)

strConSolRptName = strConsolFolder & “\” & strFileNameString & _

“_ConsolSumRpt.txt”

strFileNameString = strFileNameString & “_SumRpt.txt”

strRpt1 = strArchive & “\” & Esquerda (strSvrList, 8) e “_” e strFileNameString strRpt2 = strArchive & “\” & Right

(strSvrList, 8) e “_” e strFileNameString

Se strDebug = “Habilitado” Então

MsgBox “1º relatório de síntese de processo =“& strRpt1 & vbCrLf & _ “segundo relatório de

síntese de processo =“& strRpt2, cTitleBarMsg End If

End Sub
PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 551

O ReadSummaryReport () subrotina
o ReadSummaryReport () sub-rotina, ilustrada a seguir, utiliza o FileSystem objeto objeto de O
arquivo existe(), OpenTextFile (), ReadLine (), e
Fechar() métodos e um Fazer enquanto loop para processar o relatório de síntese adequada. O relatório a ser

processada é identificada por um argumento passado para a sub-rotina. A sub-rotina armazena o conteúdo
de cada relatório em um array chamado quer
astrServ0001Array ou astrServ0002Array.

Sub ReadSummaryReport (strServerName)

Se strDebug = “Habilitado” Então

MsgBox “O servidor =“& strServerName, cTitleBarMsg End If

Dim strSourFile

Se strServerName = “SERV0001”, em seguida,

strSourFile = strRpt1 Else

strSourFile = strRpt2 End If

Dim fileref, strRptLine

Dim intArrayCounter, IntErrLevel

intArrayCounter = 0

If (FsoObj.FileExists (strSourFile)) então

Definir fileRef = FsoObj.OpenTextFile (strSourFile, cForReading)

Do Until FileRef.AtEndOfStream

strRptLine = FileRef.ReadLine ()

Se strServerName = “SERV0001” Então

Se Instr (1, intArrayCounter, “Date”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “Parte”) <> 1 Em seguida,

ReDim Preservar astrServ0001Array (intArrayCounter)

astrServ0001Array (intArrayCounter) = strRptLine


552 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

End If

End If Else

Se Instr (1, intArrayCounter, “Date”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “Parte”) <> 1 Em seguida,

ReDim Preservar astrServ0002Array (intArrayCounter)

astrServ0002Array (intArrayCounter) = strRptLine End If End If End If

intArrayCounter = intArrayCounter + 1

laço

FileRef.Close ()

Outro

WriteToEventLog ( “Relatório Consolidado Resumo Criador - não é possível abrir“& _

strSourFile)

TerminateScript () End If

End Sub

O CreateConsolidatedTextReport () subrotina
o CreateConsolidatedTextReport (), mostrado abaixo, cópias cada relatório de síntese em uma matriz e em
seguida cria o relatório de síntese consolidada por processar os conteúdos de ambas as matrizes. Ele usa
uma variedade de funções de análise VBScript para testar, extracto, e manipular o conteúdo de cada linha em
cada relatório de síntese antes de adicionar os seus dados para o relatório de síntese consolidada.

Sub CreateConsolidatedTextReport ()

Dim intArrayCounter, outputFile, strMessage, strLocator Dim intQtyOne, intQtyTwo, intTotalQty, intSpacing,

strMatch, strMatchlist Dim intInStockOne, intInStockTwo, intTotalInStock, intSpaces, intCounter2

intArrayCounter = 0
PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 553

strLocator = “false”

Definir outputfile = FsoObj.OpenTextFile (strConSolRptName, 2, “True”)

Se strDebug = “Habilitado” Então

MsgBox “Agora criando ao relatório consolidado sucinto” End If

'Começar a criar o relatório de síntese consolidada

OutPutFile.WriteLine

“************************************************* ******************************”

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “relatório Resumo Mestre consolidado“& Date () OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine

“************************************************* ******************************”

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “erros:”

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “Data Tempo Código Svr Descrição”

'Processar os erros: seção para o primeiro servidor para cada

intArrayCounter Em astrServ0001Array

Se Instr (1, intArrayCounter, “Erros:”) = 1 Em seguida,

strLocator = End “True” Se

Se strLocator = “True” Então

Se Instr (1, intArrayCounter, “Erros:”) <> 1, então

Se Instr (1, intArrayCounter, “Data Tempo Código Descrição”) <> 1

Então

Se Instr (1, intArrayCounter, “-----”) <> 1 Em seguida,

Se Len (intArrayCounter)> 0 Then

intArrayCounter = Mid (intArrayCounter, 1, 17) e “Sr1“& _

Mediana (intArrayCounter, 19)


554 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

OutPutFile.WriteLine intArrayCounter End If Else

Sair Para End If

End If End If End If

Próximo

intArrayCounter = 0 strLocator

= “false”

'Processar os erros: seção para o segundo servidor para cada

intArrayCounter Em astrServ0002Array

Se Instr (1, intArrayCounter, “Erros:”) = 1 Em seguida,

strLocator = End “True” Se

Se strLocator = “True” Então

Se Instr (1, intArrayCounter, “Erros:”) <> 1, então

Se Instr (1, intArrayCounter, “Data Tempo Código Descrição”) <> 1

Então

Se Instr (1, intArrayCounter, “-----”) <> 1 Em seguida,

Se Len (intArrayCounter)> 0 Then

intArrayCounter = Mid (intArrayCounter, 1, 17) e “Sr2“& _

Mid (intArrayCounter, 19) OutPutFile.WriteLine

intArrayCounter End If Else

Sair Para End If

End If End If End If


PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 555

Próximo

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “---------------------------------------------- ---”& _

“------------------------------”

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “Resumo de vendas:”

OutPutFile.WriteBlankLines (1) OutPutFile.WriteLine

“Governo:” OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “Part # Qty Descrição”

OutPutFile.WriteBlankLines (1)

intArrayCounter = 0 strLocator

= “false”

'Processo o resumo de vendas: seção para o primeiro servidor para cada

intArrayCounter Em astrServ0001Array

Se Instr (1, intArrayCounter, “Resumo de Vendas”) = 1 Then

strLocator = End “True” Se

Se strLocator = “True” Então

Se Instr (1, intArrayCounter, “Resumo de vendas:”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “Part # Quantidade Descrição”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “-----”) <> 1 Em seguida,

Se Len (intArrayCounter)> 0 Then

intArrayCounter = idade (intArrayCounter, 1, 17) & _

Mid (intArrayCounter, 19) OutPutFile.WriteLine

intArrayCounter End If Else

Sair Para End If

End If End If
556 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Fim se

Próximo

OutPutFile.WriteBlankLines (1) OutPutFile.WriteLine

“outros clientes:” OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “Part # Qty Descrição”

OutPutFile.WriteBlankLines (1)

intArrayCounter = 0 strLocator

= “false”

'Processo o resumo de vendas: seção para o segundo servidor para cada

intArrayCounter Em astrServ0002Array

Se Instr (1, intArrayCounter, “Resumo de vendas:”) = 1 Then

strLocator = End “True” Se

Se strLocator = “True” Então

Se Instr (1, intArrayCounter, “Resumo de vendas:”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “Part # Quantidade Descrição”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “-----”) <> 1 Em seguida,

Se Len (intArrayCounter)> 0 Then

intArrayCounter = idade (intArrayCounter, 1, 17) & _

Mid (intArrayCounter, 19) OutPutFile.WriteLine

intArrayCounter End If Else

Sair Para End If

End If End If End If

Próximo
PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 557

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “---------------------------------------------- ----”& _

“-----------------------------”

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “retorna resumo:”

OutPutFile.WriteBlankLines (1) OutPutFile.WriteLine

“Governo:” OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “Part # Qty Descrição”

OutPutFile.WriteBlankLines (1)

intArrayCounter = 0 strLocator

= “false”

'Processo o resumo do retorno: seção para o primeiro servidor para cada

intArrayCounter Em astrServ0001Array

Se Instr (1, intArrayCounter, “Resumo do Retorno”) = 1, então

strLocator = End “True” Se

Se strLocator = “True” Então

Se Instr (1, intArrayCounter, “Return resumo:”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “Part # Quantidade Descrição”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “-----”) <> 1 Em seguida,

Se Len (intArrayCounter)> 0 Then

intArrayCounter = idade (intArrayCounter, 1, 17) & _

Mid (intArrayCounter, 19) OutPutFile.WriteLine

intArrayCounter End If Else

Sair Para End If

End If End If End If


558 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Próximo

OutPutFile.WriteBlankLines (1) OutPutFile.WriteLine

“outros clientes:” OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “Part # Qty Descrição”

OutPutFile.WriteBlankLines (1)

intArrayCounter = 0 strLocator

= “false”

'Processo o resumo do retorno: seção para o segundo servidor para cada

intArrayCounter Em astrServ0002Array

Se Instr (1, intArrayCounter, “Return resumo:”) = 1 Then

strLocator = End “True” Se

Se strLocator = “True” Então

Se Instr (1, intArrayCounter, “Return resumo:”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “Part # Quantidade Descrição”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “-----”) <> 1 Em seguida,

Se Len (intArrayCounter)> 0 Then

intArrayCounter = idade (intArrayCounter, 1, 17) & _

Mid (intArrayCounter, 19) OutPutFile.WriteLine

intArrayCounter End If Else

Sair Para End If

End If End If End If

Próximo

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “---------------------------------------------- ---- “& _


PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 559

“-----------------------------”

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “Resumo Diário de Produção:”

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “Part # Quantidade Descrição Em estoque"

OutPutFile.WriteBlankLines (1)

intArrayCounter = 0 strLocator

= “false” intCounter2 = 0

'Processar a seção Resumo produção diária para o primeiro servidor para cada intArrayCounter Em

astrServ0001Array

Se Instr (1, intArrayCounter, “Resumo de Produção Daily”) = 1, então

strLocator = End “True” Se

Se strLocator = “True” Então

Se Instr (1, intArrayCounter, “Resumo Diário de Produção”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “Part # Quantidade Descrição Em" & _

“Ações”) <> 1 Em seguida,

Se Len (intArrayCounter)> 0 Then

ReDim Preservar astrProductionArray (intCounter2) astrProductionArray

(intCounter2) = intArrayCounter intCounter2 = intCounter2 + 1

End If

End If End If End If

Próximo

intCounter2 = 0
560 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

intArrayCounter = 0 strLocator

= “false”

'Processar a seção Resumo produção diária para o primeiro servidor para cada intArrayCounter Em

astrServ0002Array

Se Instr (1, intArrayCounter, “Resumo de Produção Daily”) = 1, então

strLocator = End “True” Se

Se strLocator = “True” Então

Se Instr (1, intArrayCounter, “Resumo Diário de Produção”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “Part # Quantidade Descrição Em" & _

“Ações”) <> 1 Em seguida,

Se Len (intArrayCounter)> 0 Then

intArrayCounter = idade (intArrayCounter, 1, 17) & _

Mediana (intArrayCounter, 19)

'Girar embora astrProductionArray e determinar se existem' entradas correspondentes para

processar intCounter2 = 0 strMatch = ‘false’

Para Cada intCounter2 Em astrProductionArray

Se idade (intArrayCounter, 1, 5) = meio (intCounter2, 1, 5) Então

strMatch = “True”

strMatchlist = strMatchList & ““& _

Mediana (intArrayCounter, 1, 5)

'Extrato qty para ambas as entradas, adicionar esses valores juntos e' escrever uma única

entrada

intQtyOne = idade (intArrayCounter, 9, 5) intQtyOne =

CInt (guarnição (intQtyOne)) intQtyTwo = idade

(intCounter2, 9, 5) intQtyTwo = CInt (guarnição

(intQtyTwo)) intTotalQty = intQtyOne + intQtyTwo


PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 561

intSpacing = Len (intTotalQty) intSpacing =

5 - intSpacing

'Extrato Em armazém valor para ambas as entradas, adicionar esses valores' juntos e

escrever uma única entrada intInStockOne = Mid (intArrayCounter, 39, 3) intInStockOne =

CInt (Trim (intInStockOne)) intInStockTwo = Mid (intCounter2, 40, 3) intInStockTwo = CInt

(guarnição (intInStockTwo)) intTotalInStock = intInStockOne + intInStockTwo intSpaces =

len (intTotalInStock) intSpaces = 4 - intSpaces

OutPutFile.WriteLine Mid (intArrayCounter, 1, 5) & “ “& _

intTotalQty & Space (intSpacing) & _ Mid (intArrayCounter, 14, 25) e espaço

(intSpaces) & _ intTotalInStock End If Next

Se strmatch <> “True” Então

OutPutFile.Writeline intArrayCounter End If

End If End

If End If End If

Próximo

'não-duplicados dados de inventário de produção processo no segundo servidor para cada intArrayCounter

Em astrProductionArray

Se Instr (1, strMatchList, idade (intArrayCounter, 1, 5)) = 0 Then

OutPutFile.WriteLine intArrayCounter End If Next

Se strDebug = “Habilitado” Então


562 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

MsgBox “Feito escrito ao Relatório Resumido” End If

OutPutFile.Close ()

End Sub

O CreateConsolidatedWordReport () subrotina
o CreateConsolidatedWordReport () sub-rotina, mostrado abaixo, cria uma versão do Word do relatório de
síntese consolidada. Para simplificar a criação deste relatório, Molly decidiu que, em vez de recriar o
relatório a partir do zero, ela iria configurar uma Fazer ... Até loop e usá-lo para copiar o conteúdo da versão
de texto do relatório em uma sub-rotina array.This, então, processar a matriz usando um For Each ... Next lacete
e os métodos e as propriedades do modelo de objectos de palavra. Para tornar a versão do Word do
relatório de síntese consolidada mais fácil de ler, Molly modificou o Fonte objeto de Nome, tamanho, e Negrito propriedades
cada vez que o sub-rotina escreveu um cabeçalho do relatório. Ela conseguiu isso através da criação de
uma série de E se declarações que usam o Instr () função para identificar os cabeçalhos como o

For Each ... Next loop de iteração através de cada linha da versão de texto do relatório de síntese
consolidada.

Sub CreatConsolidatedWordReport ()

objWordDoc Dim, strSourFile, fileref, strRptLine, intWordCounter Dim strFileNameString

ReDim astrWordVersionArray (0)

Definir objWordDoc = WScript.CreateObject ( “Word.Application”)

Definir fileRef = FsoObj.OpenTextFile (strConSolRptName, cForReading)

strFileNameString = Replace (Date () “/”, “-”)

strConSolRptName = strConsolFolder & “\” & strFileNameString & _ “_ConsolSumRpt.doc”


PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 563

intWordCounter = 0

Se strDebug = “Habilitado” Então

MsgBox “Escrevendo a versão do Word do relatório de síntese consolidada.” End If

'Leia o artigo completo em uma matriz Do Until

FileRef.AtEndOfStream

strRptLine = FileRef.ReadLine ()

ReDim Preservar astrWordVersionArray (intWordCounter)

astrWordVersionArray (intWordCounter) = strRptLine

intWordCounter = intWordCounter + 1

laço

FileRef.Close ()

'Começar a criar o documento

objWordDoc.Documents.Add Word ()

objWordDoc.Selection.Font.Name = “Courier”

objWordDoc.Selection.Font.Size = 8

objWordDoc.Selection.Font.Bold = False

'Spin através da matriz, formato e escrever a versão do Word do relatório para cada intWordCounter em

astrWordVersionArray

'Alterar as propriedades de fonte para títulos de relatório selecionados Se Instr (1,

intWordCounter, ‘Resumo Mestre Consolidado’) Then

objWordDoc.Selection.Font.Name = “Arial”

objWordDoc.Selection.Font.Size = 12

objWordDoc.Selection.Font.Bold = True

Fim se
564 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Se Instr (1, intWordCounter, “Erros:”) Then

objWordDoc.Selection.Font.Name = “Arial”

objWordDoc.Selection.Font.Size = 10

objWordDoc.Selection.Font.Bold = True End If

Se Instr (1, intWordCounter, “Resumo de vendas:”) Then

objWordDoc.Selection.Font.Name = “Arial”

objWordDoc.Selection.Font.Size = 10

objWordDoc.Selection.Font.Bold = True End If

Se Instr (1, intWordCounter, “Retorna resumo:”) Then

objWordDoc.Selection.Font.Name = “Arial”

objWordDoc.Selection.Font.Size = 10

objWordDoc.Selection.Font.Bold = True End If

Se Instr (1, intWordCounter, “Resumo Diário de Produção”) Then

objWordDoc.Selection.Font.Name = “Arial”

objWordDoc.Selection.Font.Size = 10

objWordDoc.Selection.Font.Bold = True End If

'Escrever uma linha do relatório

objWordDoc.Selection.Typetext (intWordCounter)

'Adicionar um marcador de parágrafo (avanço de linha .eg)

objWordDoc.Selection.TypeParagraph

'Reset Font padrão propriedades

objWordDoc.Selection.Font.Name = ‘Courier’

objWordDoc.Selection.Font.Size = 8

objWordDoc.Selection.Font.Bold = False

Próximo
PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 565

'Salve o arquivo do Word

objWordDoc.ActiveDocument.SaveAs (strConSolRptName)

'Feche o documento

objWordDoc.ActiveDocument.Close ()

'Saia do Word

objWordDoc.Quit ()

End Sub

O NotifyOperationsStaff () subrotina
o NotifyOperationsStaff () sub-rotina, ilustrada a seguir, utiliza o VBScript
Dividido() funções para criar uma matriz contendo os nomes dos membros da equipe de operações selecionados que

devem ser enviados uma mensagem de rede indicando que o relatório de síntese consolidada já está disponível.

UMA For Each ... Next laço é então configurado para girar através da matriz e enviar uma mensagem para cada nome

de utilizador usando o net Send comando.

Sub NotifyOperationsStaff ()

On Error Resume Next

Dim strUserName, strNtkNotifyList

astrNotifyArray Dim

strNtkNotifyList = “MJLF001 ASCK001”

strNtkNotifyList = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ NtkNotifyList”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando default“& _

“Para strNtkNotifyList.”) Err.Number

= 0 End If
566 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Fim se

astrNotifyArray = split (strNtkNotifyList)

Para Cada strUserName Em astrNotifyArray

WshShl.Run “Net Send“& strUserName & ““& “Ordem \ Inventory“& _

“Relatório consolidado já está disponível.” Next

End Sub

O WriteToEventLog () subrotina
Como é o caso com scripts anteriores, o WriteToEventLog () sub-rotina escreve mensagens informativas no log
de eventos do aplicativo do Windows usando uma string passado para ele como um argumento.

Sub WriteToEventLog (strMessage)

WshShl.LogEvent 4, strMessage

End Sub

O TerminateScript () subrotina
o TerminateScript () sub-rotina, ilustrada a seguir, utiliza o WScript objeto de
Sair() método para terminar a execução do script.

Sub TerminateScript ()

WScript.Quit ()

End Sub

The Script totalmente montado


O VBScript completamente montada é mostrada abaixo. Molly vai executá-lo como uma tarefa em segundo
plano na estação de trabalho do Windows 2000 Professional localizado no centro de comando de operações.
Dependendo suas configurações do registro, ele irá
PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 567

criar uma versão em texto e, possivelmente, uma versão do Word do relatório de síntese consolidada e, em seguida,

notificar os membros do pessoal de operações seleccionadas de sua disponibilidade.

'************************************************* ************************ 'Script Nome: 24.1.vbs script' Autor: Jerry

Ford 'Criado: 04/13/03

'Descrição: Este script lê e processa os relatórios de resumo diários de' Windows 2000 Server onde o sistema

Order \ Inventory reside '************************ *************************************************

'Seção de inicialização

Option Explicit

Dim strEventLog, strDebug, strSvrList, strArchive, strConsolFolder Dim strRpt1, strRpt2, strConSolRptName,

strRptFormat, strNetworkNotification

ReDim astrServ0001Array (0) ReDim

astrServ0002Array (0) ReDim

astrProductionArray (0)

Dim FsoObj, WshShl

Const cTitleBarMsg = “Relatório Criador consolidado sucinto” Const cForReading = 1

Const cForWriting = 2 Const cForAppending = 8

Definir WshShl = WScript.CreateObject ( “WScript.Shell”) Set FsoObj =

CreateObject ( “Scripting.FileSystemObject”)

'Secção de Processamento Principal

SetDefaultSettings () ()

GetRegistrySettings
568 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “Summary Relatório Consolidado Criador execução.”) End If

IdentifyRptsToProcess ()

ReadSummaryReport (Esquerda (strSvrList, 8))

ReadSummaryReport (Direito (strSvrList, 8))

CreateConsolidatedTextReport ()

Se strRptFormat = “Palavra” Então

CreatConsolidatedWordReport () End If

Se strNetworkNotification = “Habilitado” Então

NotifyOperationsStaff () End If

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “Summary Relatório Consolidado Criador terminou.”) End If

TerminateScript ()

'Secção Procedimento

SetDefaultSettings sub ()

strEventLog = “Habilitado” strDebug = “Desativado” strSvrList =

“SERV0001 SERV0002” strArchive = “d: \ Order_Inventrory \

LogFiles” strRptFormat = “Text”

strNetworkNotification = “Habilitado”

strConsolFolder = “d: \ Order_Inventory \ ConsolidatedRpts”


PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 569

Se strDebug = “Habilitado” Então

MsgBox “Configurações do Registro recuperadas:“& vbCrLf & vbCrLf & _ ‘strEventLog’ & vbTab & ‘=’ & vbTab &

strEventLog & vbCrLf & _ ‘strDebug’ & vbTab & vbTab & ‘=’ & vbTab & strDebug & vbCrLf & _ “ strSvrList”&

vbTab & vbTab &‘=’& vbTab & strSvrList & vbCrLf & _‘strArchive’& vbTab &‘=’& vbTab & strArchive & vbCrLf &

_‘strRptFormat’& vbTab &‘=’& vbTab & strRptFormat & vbCrLf & _ “strNetworkNotification” & vbTab & “=” & vbTab

& strNetworkNotification & _ vbCrLf & _

“StrConsolFolder” & vbTab & “=” & vbTab & strConsolFolder, cTitleBarMsg End If

End Sub

GetRegistrySettings sub ()

On Error Resume Next

strEventLog = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ EventLogging”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strEventLog.”) Err.Number

= 0 End If End If

strDebug = WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ DebugMode”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strDebug.”)

Err.Number = 0 End If End If

strSvrList = _
570 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ Win2000Svrs”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strSvrList.”) Err.Number =

0 End If End If

strArchive = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ RptArchive”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strArchive.”) Err.Number

= 0 End If End If

strRptFormat = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ RptFormat”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strRptFormat.”) Err.Number

= 0 End If End If

strNetworkNotification =

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ NetworkNotification”)

Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando padrão para strNetworkNotification.”)

Err.Number = 0 End

If End If
PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 571

strConsolFolder = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ ConsolFolder”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strConsolFolder.”) Err.Number =

0 End If End If

Se strDebug = “Habilitado” Então

MsgBox “Configurações do Registro recuperadas:“& vbCrLf & vbCrLf & _ ‘strEventLog’ & vbTab & ‘=’ & vbTab &

strEventLog & vbCrLf & _ ‘strDebug’ & vbTab & vbTab & ‘=’ & vbTab & strDebug & vbCrLf & _ “ strSvrList”&

vbTab & vbTab &‘=’& vbTab & strSvrList & vbCrLf & _‘strArchive’& vbTab &‘=’& vbTab & strArchive & vbCrLf &

_‘strRptFormat’& vbTab &‘=’& vbTab & strRptFormat & vbCrLf & _ “strNetworkNotification” & vbTab & “=” & vbTab

& strNetworkNotification & _ vbCrLf & _

“StrConsolFolder” & vbTab & “=” & vbTab & strConsolFolder, cTitleBarMsg End If

End Sub

Sub IdentifyRptsToProcess ()

strFileNameString Dim

strFileNameString = Replace (Date () “/”, “-”)

strConSolRptName = strConsolFolder & “\” & strFileNameString & _

“_ConsolSumRpt.txt”

strFileNameString = strFileNameString & “_SumRpt.txt”

strRpt1 = strArchive & “\” & Esquerda (strSvrList, 8) e “_” e strFileNameString strRpt2 = strArchive & “\” & Right

(strSvrList, 8) e “_” e strFileNameString


572 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Se strDebug = “Habilitado” Então

MsgBox “1º relatório de síntese de processo =“& strRpt1 & vbCrLf & _ “segundo relatório de

síntese de processo =“& strRpt2, cTitleBarMsg End If

End Sub

Sub ReadSummaryReport (strServerName)

Se strDebug = “Habilitado” Então

MsgBox “O servidor =“& strServerName, cTitleBarMsg End If

Dim strSourFile

Se strServerName = “SERV0001”, em seguida,

strSourFile = strRpt1 Else

strSourFile = strRpt2 End If

Dim fileref, strRptLine

Dim intArrayCounter, IntErrLevel

intArrayCounter = 0

If (FsoObj.FileExists (strSourFile)) então

Definir fileRef = FsoObj.OpenTextFile (strSourFile, cForReading)

Do Until FileRef.AtEndOfStream

strRptLine = FileRef.ReadLine ()

Se strServerName = “SERV0001” Então

Se Instr (1, intArrayCounter, “Date”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “Parte”) <> 1 Em seguida,

ReDim Preservar astrServ0001Array (intArrayCounter)

astrServ0001Array (intArrayCounter) = strRptLine


PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 573

End If

End If Else

Se Instr (1, intArrayCounter, “Date”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “Parte”) <> 1 Em seguida,

ReDim Preservar astrServ0002Array (intArrayCounter)

astrServ0002Array (intArrayCounter) = strRptLine End If End If End If

intArrayCounter = intArrayCounter + 1

laço

FileRef.Close ()

Outro

WriteToEventLog ( “Relatório Consolidado Resumo Criador - não é possível abrir“& _

strSourFile)

TerminateScript () End If

End Sub

Sub CreateConsolidatedTextReport ()

Dim intArrayCounter, outputfile, strMessage, strLocator Dim intQtyOne, intQtyTwo, intTotalQty, intSpacing,

strMatch, strMatchlist Dim intInStockOne, intInStockTwo, intTotalInStock, intSpaces, intCounter2

intArrayCounter = 0 strLocator = “false”

Definir outputfile = FsoObj.OpenTextFile (strConSolRptName, 2, “True”)

Se strDebug = “Habilitado” Então

MsgBox “Agora criando ao relatório consolidado sucinto” End If


574 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

'Começar a criar o relatório de síntese consolidada

OutPutFile.WriteLine

“************************************************* ******************************”

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “relatório Resumo Mestre consolidado“& Date () OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine

“************************************************* ******************************”

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “erros:”

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “Data Tempo Código Svr Descrição”

'Processar os erros: seção para o primeiro servidor para cada

intArrayCounter Em astrServ0001Array

Se Instr (1, intArrayCounter, “Erros:”) = 1 Em seguida,

strLocator = End “True” Se

Se strLocator = “True” Então

Se Instr (1, intArrayCounter, “Erros:”) <> 1 Então se Instr (1,

intArrayCounter, “Data Tempo Código Descrição”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “-----”) <> 1 Em seguida,

Se Len (intArrayCounter)> 0 Then

intArrayCounter = Mid (intArrayCounter, 1, 17) e “Sr1“& _

Mid (intArrayCounter, 19) OutPutFile.WriteLine

intArrayCounter End If Else

Sair Para End If

End If End If End If


PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 575

Próximo

intArrayCounter = 0 strLocator

= “false”

'Processar os erros: seção para o segundo servidor para cada

intArrayCounter Em astrServ0002Array

Se Instr (1, intArrayCounter, “Erros:”) = 1 Em seguida,

strLocator = End “True” Se

Se strLocator = “True” Então

Se Instr (1, intArrayCounter, “Erros:”) <> 1, então

Se Instr (1, intArrayCounter, “Data Tempo Código Descrição”) <> 1

Então

Se Instr (1, intArrayCounter, “-----”) <> 1 Em seguida,

Se Len (intArrayCounter)> 0 Then

intArrayCounter = Mid (intArrayCounter, 1, 17) e “Sr2“& _

Mid (intArrayCounter, 19) OutPutFile.WriteLine

intArrayCounter End If Else

Sair Para End If

End If End If End If

Próximo

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “---------------------------------------------- ----”& _

“-----------------------------”

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “Resumo de vendas:”

OutPutFile.WriteBlankLines (1)
576 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

OutPutFile.WriteLine “Governo:”

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “Part # Qty Descrição”

OutPutFile.WriteBlankLines (1)

intArrayCounter = 0 strLocator

= “false”

'Processo o resumo de vendas: seção para o primeiro servidor para cada

intArrayCounter Em astrServ0001Array

Se Instr (1, intArrayCounter, “Resumo de Vendas”) = 1 Then

strLocator = End “True” Se

Se strLocator = “True” Então

Se Instr (1, intArrayCounter, “Resumo de vendas:”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “Part # Quantidade Descrição”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “-----”) <> 1 Em seguida,

Se Len (intArrayCounter)> 0 Then

intArrayCounter = idade (intArrayCounter, 1, 17) & _

Mid (intArrayCounter, 19) OutPutFile.WriteLine

intArrayCounter End If Else

Sair Para End If

End If End If End If

Próximo

OutPutFile.WriteBlankLines (1) OutPutFile.WriteLine

“outros clientes:” OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “Part # Qty Descrição”

OutPutFile.WriteBlankLines (1)
PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 577

intArrayCounter = 0 strLocator

= “false”

'Processo o resumo de vendas: seção para o segundo servidor para cada

intArrayCounter Em astrServ0002Array

Se Instr (1, intArrayCounter, “Resumo de vendas:”) = 1 Then

strLocator = End “True” Se

Se strLocator = “True” Então

Se Instr (1, intArrayCounter, “Resumo de vendas:”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “Part # Quantidade Descrição”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “-----”) <> 1 Em seguida,

Se Len (intArrayCounter)> 0 Then

intArrayCounter = idade (intArrayCounter, 1, 17) & _

Mid (intArrayCounter, 19) OutPutFile.WriteLine

intArrayCounter End If Else

Sair Para End If

End If End If End If

Próximo

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “---------------------------------------------- ----”& _

“-----------------------------”

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “retorna resumo:”

OutPutFile.WriteBlankLines (1) OutPutFile.WriteLine

“Governo:” OutPutFile.WriteBlankLines (1)


578 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

OutPutFile.WriteLine “Part # Qty Descrição”

OutPutFile.WriteBlankLines (1)

intArrayCounter = 0 strLocator

= “false”

'Processo o resumo do retorno: seção para o primeiro servidor para cada

intArrayCounter Em astrServ0001Array

Se Instr (1, intArrayCounter, “Resumo do Retorno”) = 1, então

strLocator = End “True” Se

Se strLocator = “True” Então

Se Instr (1, intArrayCounter, “Return resumo:”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “Part # Quantidade Descrição”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “-----”) <> 1 Em seguida,

Se Len (intArrayCounter)> 0 Then

intArrayCounter = idade (intArrayCounter, 1, 17) & _

Mid (intArrayCounter, 19) OutPutFile.WriteLine

intArrayCounter End If Else

Sair Para End If

End If End If End If

Próximo

OutPutFile.WriteBlankLines (1) OutPutFile.WriteLine

“outros clientes:” OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “Part # Qty Descrição”

OutPutFile.WriteBlankLines (1)

intArrayCounter = 0
PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 579

strLocator = “false”

'Processo o resumo do retorno: seção para o segundo servidor para cada

intArrayCounter Em astrServ0002Array

Se Instr (1, intArrayCounter, “Return resumo:”) = 1 Then

strLocator = End “True” Se

Se strLocator = “True” Então

Se Instr (1, intArrayCounter, “Return resumo:”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “Part # Quantidade Descrição”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “-----”) <> 1 Em seguida,

Se Len (intArrayCounter)> 0 Then

intArrayCounter = idade (intArrayCounter, 1, 17) & _

Mid (intArrayCounter, 19) OutPutFile.WriteLine

intArrayCounter End If Else

Sair Para End If

End If End If End If

Próximo

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “---------------------------------------------- ----”& _

“-----------------------------”

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “Resumo Diário de Produção:”

OutPutFile.WriteBlankLines (1)

OutPutFile.WriteLine “Part # Quantidade Descrição Em estoque"

OutPutFile.WriteBlankLines (1)

intArrayCounter = 0
580 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

strLocator = “false”

intCounter2 = 0

'Processar a seção Resumo produção diária para o primeiro servidor para cada intArrayCounter Em

astrServ0001Array

Se Instr (1, intArrayCounter, “Resumo de Produção Daily”) = 1, então

strLocator = End “True” Se

Se strLocator = “True” Então

Se Instr (1, intArrayCounter, “Resumo Diário de Produção”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “Part # Quantidade Descrição Em" & _

“Ações”) <> 1 Em seguida,

Se Len (intArrayCounter)> 0 Then

ReDim Preservar astrProductionArray (intCounter2) astrProductionArray

(intCounter2) = intArrayCounter intCounter2 = intCounter2 + 1

End If

End If End If End If

Próximo

intCounter2 = 0

intArrayCounter = 0 strLocator

= “false”

'Processar a seção Resumo produção diária para o primeiro servidor para cada intArrayCounter Em

astrServ0002Array

Se Instr (1, intArrayCounter, “Resumo de Produção Daily”) = 1, então

strLocator = End “True” Se


PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 581

Se strLocator = “True” Então

Se Instr (1, intArrayCounter, “Resumo Diário de Produção”) <> 1 Em seguida,

Se Instr (1, intArrayCounter, “Part # Quantidade Descrição Em" & _

“Ações”) <> 1 Em seguida,

Se Len (intArrayCounter)> 0 Then

intArrayCounter = idade (intArrayCounter, 1, 17) & _

Mediana (intArrayCounter, 19)

'Girar embora astrProductionArray e determinar se existem' entradas correspondentes para

processar intCounter2 = 0 strMatch = ‘false’

Para Cada intCounter2 Em astrProductionArray

Se idade (intArrayCounter, 1, 5) = meio (intCounter2, 1, 5) Então

strMatch = “True”

strMatchlist = strMatchList & ““& _

Mediana (intArrayCounter, 1, 5)

'Extrato qty para ambas as entradas, adicionar esses valores juntos e' escrever uma única

entrada

intQtyOne = idade (intArrayCounter, 9, 5) intQtyOne =

CInt (guarnição (intQtyOne)) intQtyTwo = idade

(intCounter2, 9, 5) intQtyTwo = CInt (guarnição

(intQtyTwo)) intTotalQty = intQtyOne + intQtyTwo

intSpacing = Len (intTotalQty) intSpacing = 5 - intSpacing

'Extrato Em armazém valor para ambas as entradas, adicionar esses valores' juntos e

escrever uma única entrada intInStockOne = Mid (intArrayCounter, 39, 3) intInStockOne =

CInt (Trim (intInStockOne)) intInStockTwo = Mid (intCounter2, 40, 3) intInStockTwo = CInt

(guarnição (intInStockTwo)) intTotalInStock = intInStockOne + intInStockTwo intSpaces =

Len (intTotalInStock)
582 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

intSpaces = 4 - intSpaces

OutPutFile.WriteLine Mid (intArrayCounter, 1, 5) & “ “& _

intTotalQty & Space (intSpacing) & _ Mid (intArrayCounter, 14, 25) e espaço

(intSpaces) & _ intTotalInStock End If Next

Se strmatch <> “True” Então

OutPutFile.Writeline intArrayCounter End If

End If End

If End If End If

Próximo

'não-duplicados dados de inventário de produção processo no segundo servidor para cada intArrayCounter

Em astrProductionArray

Se Instr (1, strMatchList, idade (intArrayCounter, 1, 5)) = 0 Then

OutPutFile.WriteLine intArrayCounter End If Next

Se strDebug = “Habilitado” Então

MsgBox “Feito escrito ao Relatório Resumido” End If

OutPutFile.Close ()

End Sub

Sub CreatConsolidatedWordReport ()

objWordDoc Dim, strSourFile, fileref, strRptLine, intWordCounter Dim strFileNameString


PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 583

ReDim astrWordVersionArray (0)

Definir objWordDoc = WScript.CreateObject ( “Word.Application”)

Definir fileRef = FsoObj.OpenTextFile (strConSolRptName, cForReading)

strFileNameString = Replace (Date () “/”, “-”)

strConSolRptName = strConsolFolder & “\” & strFileNameString & _ “_ConsolSumRpt.doc”

intWordCounter = 0

Se strDebug = “Habilitado” Então

MsgBox “Escrevendo a versão do Word do relatório de síntese consolidada.” End If

'Leia o artigo completo em uma matriz Do Until

FileRef.AtEndOfStream

strRptLine = FileRef.ReadLine ()

ReDim Preservar astrWordVersionArray (intWordCounter)

astrWordVersionArray (intWordCounter) = strRptLine

intWordCounter = intWordCounter + 1

laço

FileRef.Close ()

'Começar a criar o documento

objWordDoc.Documents.Add Word ()

objWordDoc.Selection.Font.Name = “Courier”

objWordDoc.Selection.Font.Size = 8

objWordDoc.Selection.Font.Bold = False
584 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

'Spin através da matriz, formato e escrever a versão do Word do relatório

Para Cada intWordCounter em astrWordVersionArray

'Alterar as propriedades de fonte para títulos de relatório selecionados Se Instr (1,

intWordCounter, ‘Resumo Mestre Consolidado’) Then

objWordDoc.Selection.Font.Name = “Arial”

objWordDoc.Selection.Font.Size = 12

objWordDoc.Selection.Font.Bold = True

Fim se

Se Instr (1, intWordCounter, “Erros:”) Then

objWordDoc.Selection.Font.Name = “Arial”

objWordDoc.Selection.Font.Size = 10

objWordDoc.Selection.Font.Bold = True End If

Se Instr (1, intWordCounter, “Resumo de vendas:”) Then

objWordDoc.Selection.Font.Name = “Arial”

objWordDoc.Selection.Font.Size = 10

objWordDoc.Selection.Font.Bold = True End If

Se Instr (1, intWordCounter, “Retorna resumo:”) Then

objWordDoc.Selection.Font.Name = “Arial”

objWordDoc.Selection.Font.Size = 10

objWordDoc.Selection.Font.Bold = True End If

Se Instr (1, intWordCounter, “Resumo Diário de Produção”) Then

objWordDoc.Selection.Font.Name = “Arial”

objWordDoc.Selection.Font.Size = 10

objWordDoc.Selection.Font.Bold = True End If

'Escrever uma linha do relatório


PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 585

objWordDoc.Selection.Typetext (intWordCounter)

'Adicionar um marcador de parágrafo (avanço de linha .eg)

objWordDoc.Selection.TypeParagraph

'Reset Font padrão propriedades

objWordDoc.Selection.Font.Name = ‘Courier’

objWordDoc.Selection.Font.Size = 8

objWordDoc.Selection.Font.Bold = False

Próximo

'Salve o arquivo do Word

objWordDoc.ActiveDocument.SaveAs (strConSolRptName)

'Feche o documento

objWordDoc.ActiveDocument.Close ()

'Saia do Word

objWordDoc.Quit ()

End Sub

Sub NotifyOperationsStaff ()

On Error Resume Next

Dim strUserName, strNtkNotifyList

astrNotifyArray Dim

strNtkNotifyList = “MJLF001 ASCK001”

strNtkNotifyList = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ NtkNotifyList”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _


586 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

“Padrão para strNtkNotifyList.”) Err.Number = 0

End If End If

astrNotifyArray = split (strNtkNotifyList)

Para Cada strUserName Em astrNotifyArray

WshShl.Run “Net Send“& strUserName & ““& ‘Ordem \ Inventory relatório consolidado já está disponível.’

Próximo

End Sub

Sub WriteToEventLog (strMessage)

WshShl.LogEvent 4, strMessage

End Sub

Sub TerminateScript ()

WScript.Quit ()

End Sub

A Figura 24.2 ilustra uma porção da amostra do relatório Palavra criado pelo roteiro. Como você pode ver,
alterando as propriedades da fonte, o relatório foi feito mais fácil de ler.
PROCESSAMENTO E CONSOLIDAÇÃO relatório de dados Capítulo 24 587

FIGURA 24.2 Examinando a versão do Word do relatório de síntese consolidada

resumo
Neste capítulo, você aprendeu a desenvolver um VBScript que processa os relatórios de resumo recolhidas a
partir dos dois servidores Windows 2000 que suportam sistema de ordem / estoque da Intuit. Você também
aprendeu a trabalhar com o modelo de objeto do Word, a fim de desenvolver uma versão do Word do
relatório consolidado. Além disso, você aprendeu a usar o net Send comando para criar um processo de
notificação de rede.
Esta página foi intencionalmente esquerda em branco
Capítulo 25
Gestão de
Arquivo
Eu n Neste capítulo, você irá copiar e modificar o script de gestão de arquivo desenvolvido no capítulo
20, “Manutenção de um Resumo de 30 dias Log Archive,” a fim de desenvolver um novo script que mantém
um arquivo de três meses de relatórios sobre o Windows 2000 Professional localizado no Centro de
Comando de Operações estação de trabalho. Este novo script será então executado mensalmente pelo
script de programação desenvolvida no capítulo 23, “Coleta de Relatórios Resumidos remotos.”

Administrando arquivos de relatório


O último script desenvolvido por Molly como parte deste projeto é o script de gestão de arquivo. Ele será
executado em uma base programada no primeiro dia de cada mês. Sua função é manter três arquivos
separados de três meses na estação de trabalho do Windows 2000 Professional, conforme descrito na
lista a seguir.

◆ D: \ Order_Inventory \ Sr1_SummaryRpts. Esta pasta será usada


para armazenar um mínimo de pena de 90 dias de relatórios resumidos criados pelo servidor
SERV0001 Windows 2000.

◆ D: \ Order_Inventory \ Sr2_SummaryRpts. Esta pasta será usada


para armazenar um mínimo de pena de 90 dias de relatórios resumidos criados pelo servidor
SERV0002 Windows 2000.

◆ D: \ Order_Inventory \ ConsolidatedRpts. Esta pasta será usada


para armazenar um mínimo de pena de 90 dias de relatórios consolidados criados a partir de
informações extraídas dos relatórios resumidos copiada do SERV0001 e SERV0002. Figura 25.1
mostra o conteúdo do d: \ Order_Inventory pastas na estação de trabalho do Windows 2000 Professional.
o LogFiles pasta é usada para armazenar temporariamente os arquivos de relatório resumo copiada pelo
script de recuperação relatório. O script consolidação relatório, em seguida, lê os relatórios resumidos
localizados no

LogFiles pasta, a fim de criar os relatórios consolidados, que são armazenados no ConsolidatedRpts pasta.
Quando o script de gestão de arquivo é executado, ele copia os arquivos armazenados na LogFiles pasta,
quer ao Sr1_SummaryRpts
ou Sr2_SummaryRpts pastas, conforme apropriado. Finalmente, a gestão de arquivos
GESTÃO DE ARQUIVO Capítulo 25 591

script exclui quaisquer relatórios armazenados no ConsolidatedRpts, Sr1_SummaryRpts, ou Sr2_SummaryRpts


pastas que são mais de três meses de idade.

resumidos coletados de relatórios resumidos SERV0001 Lojas coletadas de SERV0002


Armazena os relatórios resumidos consolidadas

pasta de armazenamento temporário para os relatórios copiada do SERV0001 e SERV0002 Lojas relatórios

FIGURA 25.1 Examinando a estrutura de pastas utilizada para gerenciar e armazenar relatórios na estação de trabalho do Windows 2000

Professional

Trabalhando com o Windows pastas e arquivos

A fim de executar tarefas de gerenciamento de arquivo, Molly vai precisar de trabalhar com o

FileSystemObject objeto de DeleteFile () método novamente. A sintaxe para esse método é fornecida
no Capítulo 20. Além disso, ela terá de aprender a trabalhar com um número de outros métodos
que pertencem ao FileSystemObject. Estes métodos incluem:

◆ FolderExists (). Oferece a capacidade de determinar se é ou não um


existe pasta

◆ Criar pasta(). Oferece a capacidade de criar uma nova pasta

◆ MoveFile (). Oferece a capacidade de mover um ou mais arquivos para um espe-


pasta fied
592 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Determinar se existe uma pasta


Ao desenvolver seu roteiro, Molly terá de determinar se existem determinadas pastas antes de
tentar acessar seu conteúdo ou armazenar arquivos neles. Para executar este teste, ela planeja
usar o FileSystemObject objeto de FolderExists ()
método, que retorna um valor booleano Verdade ou Falso baseado na existência da pasta
especificada. A sintaxe do FolderExists () método é mostrado abaixo.

ObjectReference. FolderExists ( Nome da pasta)

ObjectReference é a variável que representa um exemplo do FileSystem- objeto objeto. Nome da


pasta especifica o caminho completo e nome da pasta cuja existência é para ser testado.

As seguintes declarações do VBScript demonstrar como para determinar se o


d: \ Order_Inventory \ LogFiles existe pasta.

Dim FsoObj

Definir FsoObj = CreateObject ( “Scripting.FileSystemObject”)

Se (FsoObj.FolderExists (d: \ Order_Inventory \ LogFiles) = false) Em seguida,

MsgBox “A pasta especificada não existe.” Else

“Existe a pasta especificada.” MsgBox End If

Com base nos resultados do teste, um script pode executar qualquer número de ações, incluindo:

◆ Criar a pasta se não existir


◆ Salvar um arquivo na pasta

◆ Copiar ou mover um arquivo para a pasta

◆ Excluindo a pasta
◆ Examinando o conteúdo da pasta

Criação de uma pasta


A primeira vez que o script de gestão de arquivo é executado, o Sr1_SummaryRpts e
Sr2_SummaryRpts pastas não existirá. Em vez de criar manualmente estas duas pastas como ela tem
feito por outras pastas utilizados por seus roteiros, Molly decidiu
GESTÃO DE ARQUIVO Capítulo 25 593

para deixar o script de gerenciamento de arquivo de executar esta tarefa. Para automatizar esta tarefa,
Molly vai precisar usar o FileSystemObject objeto de Criar pasta()
método. A sintaxe deste método é descrito a seguir.

ObjectReference. Criar pasta( Nome da pasta)

ObjectReference é a variável que representa um exemplo do FileSystemObject objeto. Nome da


pasta especifica o nome da pasta a ser criada.

NOTA

Sempre use o FileSystemObject objeto de FolderExists () método para determinar que a pasta ainda não
existir antes de tentar criá-lo. Caso contrário, ocorrerá um erro.

Criação de uma pasta é uma tarefa simples. Primeiro você deve instanciar o
FileSystemObject. Em seguida, você pode verificar para certificar-se de que a pasta ainda não existir
usando o FolderExists () método antes de finalmente usando o Criar pasta() Método, tal como
demonstrado no seguinte exemplo.

Dim FsoObj, strWorkingFolder

Definir FsoObj = CreateObject ( “Scripting.FileSystemObject”)

Se (FsoObj.FolderExists ( “d: \ Order_Inventory \ Sr1_SummaryRpts“) = false) Em seguida,

Definir strWorkingFolder = _

FsoObj.CreateFolder ( “d: \ Order_Inventory \ Sr1_SummaryRpts“) End If

Neste exemplo, o script cria uma pasta chamada Sr1_SummaryRpts no


D: \ Order_Inventory pasta se a Sr1_SummaryRpts pasta ainda não existir.

GORJETA

Você não pode usar o Criar pasta() método para reinicializar uma pasta existente. Se você tentar fazer isso, o
script irá receber um erro. No entanto, você pode usar o DeleteFolder () método para excluir a pasta e, em
seguida, recriá-lo novamente usando o Criar pasta() método.
594 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Movendo arquivos entre o estadiamento e Pastas de arquivo


O script de gestão de arquivo terá que ser capaz de mover os arquivos do log Files encenar
pasta para o Sr1_SummaryRpts e Sr2_SummaryRpts pastas de arquivo. Para executar esta tarefa,
Molly vai precisar usar o FileSystemObject
objeto de MoveFile () método. Este método tem a seguinte sintaxe:

ObjectReference. MoveFile (S ource, Target)

ObjectReference é uma variável que representa um exemplo do FileSystemObject objeto. Fonte especifica
a localização do arquivo ou arquivos a serem movidos e
Alvo especifica a pasta de destino onde o arquivo ou arquivos serão armazenados.

GORJETA

Como uma alternativa para o FileSystemObject objeto de MoveFile () método, você poderia usar o Arquivo objeto Mover()
método. No entanto, este método só processa um arquivo de cada vez, de modo a fim de usá-lo, você tem que criar
um loop para processar todos os arquivos no LogFiles pasta.

As seguintes declarações do VBScript demonstrar como usar o DeleteFile ()


método para mover todos os arquivos de texto localizados no d: \ Order_Inventory \ Arquivos de Log pasta
para o d: \ Order_Inventory \ Sr1_SummaryRpts pasta.

Dim FsoObj

Definir FsoObj = CreateObject ( “Scripting.FileSystemObject”)

Definir FsoObj = CreateObject ( “Scripting.FileSystemObject”) FsoObj.MoveFile

“d:. \ Order_Inventory \ LogFiles \ * txt”, _

“D: \ Order_Inventory \ Sr1_SummaryRpts“

Desenvolvendo o roteiro de Gestão Arquivo

Molly pretende copiar e modificar o script de gestão de arquivo que foi apresentado no Capítulo 20
ao desenvolver o script de gerenciamento de arquivo para a estação de trabalho Windows 2000
Professional. Além disso a já a funcionalidade
GESTÃO DE ARQUIVO Capítulo 25 595

fornecido por esse roteiro, Molly tem a intenção de permitir que o script para suportar as seguintes operações:

◆ Executado em um modo de depuração opcional

◆ Leia definições de configuração do registro do Windows

◆ Gerenciar vários arquivos de log

◆ Mover arquivos de log entre pastas como parte da gestão de arquivos


processo

A seção de inicialização
o Inicialização Seção, mostrado abaixo, começa com o Option Explicit declaração, a fim de fazer cumprir
nomenclatura de variáveis ​script de todo o script. Em seguida, ele define variáveis ​que são usadas globalmente.
Em seguida, ele define uma constante que especifica uma cadeia de texto a ser usado por todas as caixas de
diálogo pop-up exibidos pelo script quando executado no modo de depuração. Finalmente, ele instancia o FileSystemObject

e WshShell objetos.

Option Explicit

Dim strVerifyExecutionSchedule, strDeleteMonth, strEventLog, strDebug Dim strSvrList, strArchive,

strSvr1Folder, strSvr2Folder, strConsolFolder Dim FsoObj, WshShl

Const cTitleBarMsg = “Mestre Gestão de Arquivo Script”

Definir WshShl = WScript.CreateObject ( “WScript.Shell”) Set FsoObj =

CreateObject ( “Scripting.FileSystemObject”)

A Seção de Processamento Principal


o Seção de Processamento principal, mostrado abaixo, é constituído por um conjunto de sub-rotinas e
chamadas de função. Ele começa por executar o OkToRunToday () , que devolve um valor de Verdade se
o script está sendo executado no primeiro dia do mês. O valor retornado por esta função é atribuída à strVerify
ExecutionSchedule variável, que é então testado para determinar se ou não o script pode executar. Se
o valor não está definido igual a Verdade, uma mensagem é gravada no log de eventos do aplicativo do
Windows eo TerminateScript () sub-rotina é executado, a fim de parar a execução do script.
596 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

strVerifyExecutionSchedule = OkToRunToday ()

Se strVerifyExecutionSchedule = “True” Então

SetDefaultSettings () GetRegistrySettings () Se

strEventLog = “Habilitado” Então

WriteToEventLog ( “Summary Relatório Consolidado Archive Manager execução.”) End If

MoveSummaryReports () MonthToDelete ()

RemoveOldReportFiles () Se strEventLog =

“Habilitado” Então

WriteToEventLog ( “Summary Relatório Consolidado Archive Manager terminou.”) End If Else

WriteToEventLog ( “Summary Relatório Consolidado Archive execução Manager” & _

“Terminado - horário inválido execução.”) TerminateScript () End If

TerminateScript ()

Se o valor atribuído ao strVerifyExecutionSchedule variável é definida igual a Verdade, então o SetDefaultSettings


() sub-rotina é chamada a fim de estabelecer definições de configuração padrão. Próximo GetRegistrySettings

() É executado. Esta sub-rotina extrai as configurações armazenadas no registro do Windows,

substituindo as configurações de configuração padrão correspondente. Se o registo de eventos está


ativada, uma mensagem é então gravado no log de eventos do aplicativo do Windows especificando que
o script está funcionando agora. Em seguida, o MoveSummaryReports () sub-rotina é executada. Ele copia
relatórios resumidos sobre a pasta de teste para uma das duas pastas de arquivo para armazenamento
de longo prazo. Então o MonthToDelete () runs sub-rotina e descobre quais mês valor de resumo e
relatórios consolidados devem ser excluídos. Esta informação é então usada pelo RemoveOldReportFiles () sub-rotina,
que executa a exclusão real de arquivos de relatório. Finalmente, outra mensagem é gravada no log de
eventos do aplicativo do Windows se o registro de eventos é habilitado e execução do script é
interrompida chamando o TerminateScript () sub-rotina.
GESTÃO DE ARQUIVO Capítulo 25 597

O OkToRunToday () subrotina
o OkToRunToday () sub-rotina, ilustrada a seguir, utiliza o VBScript Dia() e
Encontro() funções para determinar se o script está sendo executado no primeiro dia do mês. Se for, então o

valor de uma variável chamada OkToRunToday é definido igual a Verdade.

OkToRunToday função ()

Se Day (Date ()) = 1 Then

OkToRunToday = End “True”

Se

Se strDebug = “Habilitado” Então

MsgBox “OkToRunToday =“& OkToRunToday End If

End Function

Se a depuração está habilitado, o valor de OkToRunToday é exibida usando o VBScript MsgBox () função.

Os SetDefaultSettings () subrotina
o SetDefaultSettings () sub-rotina, mostrada abaixo, define as definições de configuração padrão para o script
para que ele possa continuar a executar no caso em que ela experimenta um problema ao recuperar suas
configurações de seus valores de Registro associados. Se a depuração está habilitado, o valor de cada
variável modificada por esta sub-rotina é exibido em uma caixa de diálogo pop-up.

SetDefaultSettings sub ()

strEventLog = “Habilitado” strDebug = “Desativado” strSvrList = “SERV0001

SERV0002” strArchive = “d: \ Order_Inventrory \ LogFiles” strSvr1Folder = “d: \

Order_Inventory \ Sr1_SummaryRpts” strSvr2Folder = “d: \ Order_Inventory \

Sr2_SummaryRpts” strConsolFolder = “d : \ \ Order_Inventory ConsolidatedRpts”


598 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Se strDebug = “Habilitado” Então

MsgBox “As configurações padrão inicializado:“& vbCrLf & vbCrLf & _ ‘strEventLog’ & vbTab & ‘=’ & vbTab &

strEventLog & vbCrLf & _ ‘strDebug’ & vbTab & vbTab & ‘=’ & vbTab & strDebug & vbCrLf & _ “ strSvrList”&

vbTab & vbTab &‘=’& vbTab & strSvrList & vbCrLf & _‘strArchive’& vbTab &‘=’& vbTab & strArchive & vbCrLf &

_“strSvr1Folder “& vbTab &‘=’& vbTab & strSvr1Folder & vbCrLf & _ “strSvr2Folder” & vbTab & “=” & vbTab &

strSvr2Folder & vbCrLf & _ “strConsolFolder” & vbTab & “=” & vbTab & strConsolFolder, cTitleBarMsg End If

End Sub

Os GetRegistrySettings () subrotina
o GetRegistrySettings () sub-rotina, mostrado abaixo, começa especificando o On Error Resume Next declaração.
Isto irá assegurar que a execução deste script não é interrompida em caso de um problema ao
recuperar valores do Registro. Como cada valor de registo são lidos utilizando o WshShell objeto de RegRead
() método, o valor da Errar propriedade padrão do objeto ( Err.Number) é verificado para determinar se
ocorreu um erro. Se ocorreu um erro, uma mensagem é gravada no log de eventos do aplicativo
Windows e o valor de Err.Number é reposto a zero.

GetRegistrySettings sub ()

On Error Resume Next

strEventLog = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ EventLogging”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strEventLog.”) Err.Number

= 0 End If End If

strDebug = WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ DebugMode”)


GESTÃO DE ARQUIVO Capítulo 25 599

Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strDebug.”)

Err.Number = 0 End If End If

strSvrList = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ Win2000Svrs”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strSvrList.”) Err.Number =

0 End If End If

strArchive = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ RptArchive”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strArchive.”) Err.Number

= 0 End If End If

strSvr1Folder = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ Svr1Folder”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strSvr1Folder.”) Err.Number =

0 End If End If
600 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

strSvr2Folder = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ Svr2Folder”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strSvr2Folder.”) Err.Number =

0 End If End If

strConsolFolder = _

“WshShl.RegRead (‘HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ ConsolFolder’) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strConsolFolder.”) Err.Number =

0 End If End If

Se strDebug = “Habilitado” Então

MsgBox “Configurações do Registro recuperadas:“& vbCrLf & vbCrLf & _ ‘strEventLog’ & vbTab & ‘=’ & vbTab &

strEventLog & vbCrLf & _ ‘strDebug’ & vbTab & vbTab & ‘=’ & vbTab & strDebug & vbCrLf & _ “ strSvrList”&

vbTab & vbTab &‘=’& vbTab & strSvrList & vbCrLf & _‘strArchive’& vbTab &‘=’& vbTab & strArchive & vbCrLf &

_“strSvr1Folder “& vbTab &‘=’& vbTab & strSvr1Folder & vbCrLf & _ “strSvr2Folder” & vbTab & “=” & vbTab &

strSvr2Folder & vbCrLf & _ “strConsolFolder” & vbTab & “=” & vbTab & strConsolFolder, cTitleBarMsg End If

End Sub

Os MoveSummaryReports () subrotina
o MoveSummaryReports () sub-rotina, mostrado abaixo, é responsável por mover os relatórios
resumidos coletados dos servidores Windows 2000 (armazenado no
LogFiles encenar pasta na estação de trabalho do Windows 2000 Professional) para o
GESTÃO DE ARQUIVO Capítulo 25 601

Sr1_SummaryRpts e Sr2_SummaryRpts pastas de arquivo. Começa-se por exemplo a especificação de um

localizada do On Error Resume Next declaração, a fim de evitar um erro durante uma das duas operações de
movimentação do script de terminar a execução do script. Se a depuração estiver ativada, uma caixa de diálogo
pop-up irá exibir o nome de cada relatório de síntese, uma vez que está sendo processado.

MoveSummaryReports sub ()

On Error Resume Next

Dim strNewFolder1, strNewFolder2

Se strDebug = “Habilitado” Então

MsgBox “Moving .......” & vbCrLf & vbCrLf & _

strArchive & “\” & Esquerda (strSvrList, 8) e “*. *” & vbCrLf & _ strArchive & “\” & Right

(strSvrList, 8) e “*. *” End If

Se (FsoObj.FolderExists (strArchive) = false) Em seguida,

TerminateScript () Else

Se (FsoObj.FolderExists (strSvr1Folder) = false) Em seguida,

Definir strNewFolder1 = FsoObj.CreateFolder (strSvr1Folder) End If

Se (FsoObj.FolderExists (strSvr2Folder) = false) Em seguida,

Definir strNewFolder2 = FsoObj.CreateFolder (strSvr2Folder) End If

FsoObj.MoveFile strArchive & “\” & Esquerda (strSvrList, 8) e “*. *”, _

strSvr1Folder

FsoObj.MoveFile strArchive & “\” & Right (strSvrList, 8) e “*. *”, _

strSvr2Folder End

If

End Sub

Em seguida, o FileSystemObject objeto de FolderExists () método é usado para verificar que o LogFiles
pasta de teste está acessível. Se não for, o TerminateScript () sub-rotina é chamado para parar a
execução do script. Caso contrário, o script usa o FolderCreate () método para criar o Sr1_SummaryRpts
e
602 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Sr2_SummaryRpts pastas de arquivo se eles não existem (por exemplo, se o script está sendo executado

pela primeira vez). finalmente, o FileSystemObject objeto de MoveFile () método é usado para mover os
relatórios de resumo para o arquivo adequado folder.The Esquerda() e Certo() funções são usadas para
analisar o nome do servidor embutido no strSvrList variável para que a sub-rotina vai saber a que pasta de
arquivo para mover os relatórios de síntese.

O MonthToDelete () subrotina
o MonthToDelete () sub-rotina, mostrado abaixo, é responsável por determinar qual mês valor de
resumo e arquivos de relatório consolidado deve ser excluído. Ele começa definindo três
variáveis. o intGetSlashPosition variável é usada para armazenar um valor que indica a localização
do primeiro caractere barra invertida (/) na data atual. o strCurrentMonth variável será usado para
armazenar um valor numérico que indica o mês atual. O valor atribuído ao intGetSlashPosition é
determinada usando o

Instr () função de pesquisa para o caractere de barra invertida (/) na data como recuperado pela Encontro()
função. O valor de strCurrentMonth é então determinada usando a Mediana () função para analisar a
porção mês da data (o qual está no formato de mm / dd / aaaa). O valor do mês é analisado para fora,
tendo todos os caracteres a partir da primeira posição de caracteres até que a ocorrência do carácter
primeira barra invertida (/) (expresso como intGetSlashPosition - 1).

O valor de strDeleteMonth é então determinada por subtracção a partir de quatro strCurrentMonth. Se, por
exemplo, a data atual é 01 de junho, em seguida, o valor de
strDeleteMonth será de 1 (5-4 = 1). quatro Se então declarações são então configurado para ajustar o
valor de strDeleteMonth no caso em que o mês atual é ou janeiro, fevereiro, março ou abril. Por
exemplo, se o mês atual é abril, em seguida, 4 menos 4 será igual a zero. Desde o mês que deve
ser excluído neste caso é de dezembro, o primeiro E se instrução verifica para ver se o valor
atribuído ao strDeleteMonth é 0 e muda o seu valor para 12 se for. Da mesma forma, ajustes
semelhantes são feitas para os primeiros três meses do ano.

Sub MonthToDelete ()

Dim intGetSlashPosition, strCurrentMonth

intGetSlashPosition = Instr (Date () “/”)


GESTÃO DE ARQUIVO Capítulo 25 603

strCurrentMonth = idade (Data (), 1, intGetSlashPosition - 1) = strDeleteMonth

strCurrentMonth - 4

Se strDeleteMonth = 0 Then

strDeleteMonth = “12” End If

Se strDeleteMonth = -1 Então

strDeleteMonth = “11” End If

Se strDeleteMonth = -2 Então

strDeleteMonth = “10” End If

Se strDeleteMonth = -3 Então

strDeleteMonth = “9” End If

Se strDebug = “Habilitado” Então

MsgBox “strDeleteMonth =“& strDeleteMonth End If

End Sub

Os RemoveOldReportFiles () subrotina
o RemoveOldReportFiles () sub-rotina, mostrado abaixo, é responsável pela exclusão de resumo e relatórios
consolidados mais de três meses de idade. Ela começa com a On Error Resume Next declaração, a fim de
evitar quaisquer erros que ocorrem ao excluir os arquivos de travar a execução do script. Se o modo de
depuração estiver ativada, uma caixa de diálogo pop-up é exibida, mostrando a string que a sub-rotina usará
para identificar quais resumo e relatórios consolidados ele irá apagar. Em seguida, o DeleteFile () método é
usado para excluir os arquivos. Como você pode ver, o string que especifica quais arquivos estão a ser
excluída é um pouco envolvidos. É montado, especificando o nome da pasta de arquivo onde os relatórios
estão armazenados (o Sr1_SummaryRpts ou Sr2_SummaryRpts pastas) e, em seguida, anexando o caractere
de barra invertida (\), seguido do nome dos arquivos a ser excluído.
604 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

O nome que indica quais arquivos estão a ser excluída é estabelecido por executando as seguintes etapas:

1. Use o Esquerda() e Certo() funções para analisar os nomes de servidor


de strSvrList variável.
2. Acrescente o caractere sublinhado (_).

3. Acrescente o número do mês cujos arquivos serão apagados (conforme especificado pelo strDeleteMonth).

4. Acrescente o _ SumRpt.txt corda. Por exemplo, a string necessário para


excluir todos os relatórios resumidos para o mês de janeiro seria
d: \ Order_Inventory \ Summaryrpts \ SERV0001_1_SumRpt.txt.

RemoveOldReportFiles sub ()

On Error Resume Next

strSummaryRptPath Dim

Se strDebug = “Habilitado” Então

MsgBox “Excluindo ......” & vbCrLf & vbCrLf & _

strSvr1Folder & “\” & Esquerda (strSvrList, 8) e “_” e strDeleteMonth & _

“* _SumRpt.txt” & vbCrLf & _

strSvr2Folder & “\” & Right (strSvrList, 8) e “_” e strDeleteMonth & _ “* _SumRpt.txt” & vbCrLf & _

strConsolFolder & “\” & strDeleteMonth & “* _ConsolSumRpt.txt” End If

strSummaryRptPath = “d: \ Order_Inventory \ SummaryRpts \”

FsoObj.DeleteFile strSvr1Folder & “\” & Esquerda (strSvrList, 8) e “_” & _

strDeleteMonth & “* _SumRpt.txt”

FsoObj.DeleteFile strSvr2Folder & “\” & Right (strSvrList, 8) e “_” & _

strDeleteMonth & “* _SumRpt.txt”

FsoObj.DeleteFile strConsolFolder & “\” & strDeleteMonth & _

“* _ConsolSumRpt.txt”

End Sub
GESTÃO DE ARQUIVO Capítulo 25 605

O WriteToEventLog () subrotina
o WriteToEventLog () sub-rotina, ilustrada a seguir, utiliza o WshShell objeto de
RegistrarEvento () método para escrever uma mensagem informativa, passado para ele como um argumento, no log de

eventos do aplicativo do Windows.

Sub WriteToEventLog (strMessage)

WshShl.LogEvent 4, strMessage

End Sub

O TerminateScript () subrotina
o TerminateScript () sub-rotina, mostrado abaixo, pára a execução do script usando o WScript objeto
de Sair() método.

Sub TerminateScript ()

WScript.Quit ()

End Sub

The Script totalmente montado


O script de gestão de arquivo totalmente montado é mostrado abaixo. Ele será executado no primeiro dia
de cada mês e manter um arquivo de três meses de relatórios resumidos coletadas de ambos os
servidores Windows 2000, bem como um arquivo de três meses de relatórios resumidos consolidadas.

'************************************************* ************************ 'Script Nome: 25.1.vbs script' Autor: Jerry

Ford 'Criado: 04/13/03

'Descrição: Este script mantém um arquivo de log de 90 dias de ambos resumo' e relatórios Order_Inventory

consolidadas

'************************************************* ************************

'Seção de inicialização
606 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

Option Explicit

Dim strVerifyExecutionSchedule, strDeleteMonth, strEventLog, strDebug Dim strSvrList, strArchive,

strSvr1Folder, strSvr2Folder, strConsolFolder Dim FsoObj, WshShl

Const cTitleBarMsg = “Mestre Gestão de Arquivo Script”

Definir WshShl = WScript.CreateObject ( “WScript.Shell”) Set FsoObj =

CreateObject ( “Scripting.FileSystemObject”)

'Secção de Processamento Principal

strVerifyExecutionSchedule = OkToRunToday ()

Se strVerifyExecutionSchedule = “True” Então

SetDefaultSettings () GetRegistrySettings () Se

strEventLog = “Habilitado” Então

WriteToEventLog ( “Summary Relatório Consolidado Archive Manager execução.”) End If

MoveSummaryReports () MonthToDelete ()

RemoveOldReportFiles () Se strEventLog =

“Habilitado” Então

WriteToEventLog ( “Summary Relatório Consolidado Archive Manager terminou.”) End If Else

WriteToEventLog ( “Summary Relatório Consolidado Archive execução Manager” & _

“Terminado - horário inválido execução.”) TerminateScript () End If

TerminateScript ()
GESTÃO DE ARQUIVO Capítulo 25 607

'Secção Procedimento

OkToRunToday função ()

Se Day (Date ()) = 1 Then

OkToRunToday = End “True”

Se

Se strDebug = “Habilitado” Então

MsgBox “OkToRunToday =“& OkToRunToday End If

End Function

SetDefaultSettings sub ()

strEventLog = “Habilitado” strDebug = “Desativado” strSvrList = “SERV0001

SERV0002” strArchive = “d: \ Order_Inventrory \ LogFiles” strSvr1Folder = “d: \

Order_Inventory \ Sr1_SummaryRpts” strSvr2Folder = “d: \ Order_Inventory \

Sr2_SummaryRpts” strConsolFolder = “d : \ \ Order_Inventory ConsolidatedRpts”

Se strDebug = “Habilitado” Então

MsgBox “As configurações padrão inicializado:“& vbCrLf & vbCrLf & _ ‘strEventLog’ & vbTab & ‘=’ & vbTab &

strEventLog & vbCrLf & _ ‘strDebug’ & vbTab & vbTab & ‘=’ & vbTab & strDebug & vbCrLf & _ “ strSvrList”&

vbTab & vbTab &‘=’& vbTab & strSvrList & vbCrLf & _‘strArchive’& vbTab &‘=’& vbTab & strArchive & vbCrLf &

_“strSvr1Folder “& vbTab &‘=’& vbTab & strSvr1Folder & vbCrLf & _ “strSvr2Folder” & vbTab & “=” & vbTab &

strSvr2Folder & vbCrLf & _ “strConsolFolder” & vbTab & “=” & vbTab & strConsolFolder, cTitleBarMsg End If

End Sub
608 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

GetRegistrySettings sub ()

On Error Resume Next

strEventLog = _

“WshShl.RegRead (‘HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ EventLogging’) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strEventLog.”) Err.Number

= 0 End If End If

strDebug = WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ DebugMode”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strDebug.”)

Err.Number = 0 End If End If

strSvrList = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ Win2000Svrs”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strSvrList.”) Err.Number =

0 End If End If

strArchive = _

“WshShl.RegRead (‘HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ RptArchive’) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _


GESTÃO DE ARQUIVO Capítulo 25 609

“Padrão para strArchive.”) Err.Number

= 0 End If End If

strSvr1Folder = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ Svr1Folder”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strSvr1Folder.”) Err.Number =

0 End If End If

strSvr2Folder = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ Svr2Folder”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strSvr2Folder.”) Err.Number =

0 End If End If

strConsolFolder = _

WshShl.RegRead ( “HKLM \ Software \ Intuit \ VBScripts \ MstSumRpts \ ConsolFolder”) Se Err <> 0 Then

Se strEventLog = “Habilitado” Então

WriteToEventLog ( “roteiro Coleção de relatório Resumo - Usando“& _

“Padrão para strConsolFolder.”) Err.Number =

0 End If End If

Se strDebug = “Habilitado” Então

MsgBox “Configurações do Registro recuperadas:“& vbCrLf & vbCrLf & _ ‘strEventLog’ & vbTab

& ‘=’ & vbTab & strEventLog & vbCrLf & _


610 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

“StrDebug” & vbTab & vbTab & “=” & vbTab & strDebug & vbCrLf & _ “strSvrList” & vbTab & vbTab & “=” &

vbTab & strSvrList & vbCrLf & _ “strArchive” & vbTab & “=” & vbTab & strArchive & vbCrLf & _ “strSvr1Folder“&

vbTab & ‘=’ & vbTab & strSvr1Folder & vbCrLf & _ ‘strSvr2Folder’ & vbTab & ‘=’ & vbTab & strSvr2Folder &

vbCrLf & _ ‘strConsolFolder’ & vbTab & ‘=’ & vbTab & strConsolFolder, cTitleBarMsg End If

End Sub

MoveSummaryReports sub ()

On Error Resume Next

Dim strNewFolder1, strNewFolder2

Se strDebug = “Habilitado” Então

MsgBox “Moving .......” & vbCrLf & vbCrLf & _

strArchive & “\” & Esquerda (strSvrList, 8) e “*. *” & vbCrLf & _ strArchive & “\” & Right

(strSvrList, 8) e “*. *” End If

Se (FsoObj.FolderExists (strArchive) = false) Em seguida,

TerminateScript () Else

Se (FsoObj.FolderExists (strSvr1Folder) = false) Em seguida,

Definir strNewFolder1 = FsoObj.CreateFolder (strSvr1Folder) End If

Se (FsoObj.FolderExists (strSvr2Folder) = false) Em seguida,

Definir strNewFolder2 = FsoObj.CreateFolder (strSvr2Folder) End If

FsoObj.MoveFile strArchive & “\” & Esquerda (strSvrList, 8) e “*. *”, _

strSvr1Folder

FsoObj.MoveFile strArchive & “\” & Right (strSvrList, 8) e “*. *”, _

strSvr2Folder End

If

End Sub
GESTÃO DE ARQUIVO Capítulo 25 611

Sub MonthToDelete ()

Dim intGetSlashPosition, strCurrentMonth

intGetSlashPosition = Instr (Date () “/”)

strCurrentMonth = idade (Data (), 1, intGetSlashPosition - 1) = strDeleteMonth

strCurrentMonth - 4

Se strDeleteMonth = 0 Then

strDeleteMonth = “12” End If

Se strDeleteMonth = -1 Então

strDeleteMonth = “11” End If

Se strDeleteMonth = -2 Então

strDeleteMonth = “10” End If

Se strDeleteMonth = -3 Então

strDeleteMonth = “9” End If

Se strDebug = “Habilitado” Então

MsgBox “strDeleteMonth =“& strDeleteMonth End If

End Sub

RemoveOldReportFiles sub ()

On Error Resume Next

strSummaryRptPath Dim

Se strDebug = “Habilitado” Então


612 projeto 3 CRIAÇÃO DE UMA ESTAÇÃO DE RELATÓRIO DE GESTÃO CENTRALIZADO

MsgBox “Excluindo ......” & vbCrLf & vbCrLf & _

strSvr1Folder & “\” & Esquerda (strSvrList, 8) e “_” e strDeleteMonth & _

“* _SumRpt.txt” & vbCrLf & _

strSvr2Folder & “\” & Right (strSvrList, 8) e “_” e strDeleteMonth & _ “* _SumRpt.txt” & vbCrLf & _

strConsolFolder & “\” & strDeleteMonth & “* _ConsolSumRpt.txt” End If

strSummaryRptPath = “d: \ Order_Inventory \ SummaryRpts \”

FsoObj.DeleteFile strSvr1Folder & “\” & Esquerda (strSvrList, 8) e “_” & _

strDeleteMonth & “* _SumRpt.txt”

FsoObj.DeleteFile strSvr2Folder & “\” & Right (strSvrList, 8) e “_” & _

strDeleteMonth & “* _SumRpt.txt”

FsoObj.DeleteFile strConsolFolder & “\” & strDeleteMonth & _

“* _ConsolSumRpt.txt”

End Sub

Sub WriteToEventLog (strMessage)

WshShl.LogEvent 4, strMessage

End Sub

Sub TerminateScript ()

WScript.Quit ()

End Sub

resumo
Neste capítulo, você aprendeu como criar um script de gestão de arquivos que manteve três arquivos de
relatórios separados, cada qual armazena um mínimo de valor de relatórios de três meses. Além disso,
você observado como Molly acrescentou lógica de depuração para o roteiro e adaptou-a para recuperar
suas configurações do registro do Windows.
PARTE V
Project Professional 4
Esta página foi intencionalmente esquerda em branco
projeto 4
Relatórios de
aplicação Dados de
Resumo via Web