Implantando sistemas operacionais com o uso do recurso Download and Execute do SMS 2003
Implantando sistemas operacionais com o uso do recurso Download and Execute do SMS 2003
Um feature pack para o SMS 2003 chamado de SMS OSD Feature Pack permite que o SMS implante novos sistemas operacionais em computadores. Essa versão do SMS OSD Feature Pack não fornece suporte para download desta nova imagem de sistema operacional para a unidade de disco rígido do computador antes do início do processo de atualização. Em vez disso, ela acessa os arquivos de pacote do sistema operacional diretamente a partir do ponto de distribuição do SMS. Isso limita a escalabilidade do SMS OSD Feature Pack, pois ele passa a ser limitado pelas velocidades da rede e pelas contagens do ponto de distribuição.
O processo e os scripts descritos neste documento mostram como habilitar o download dos arquivos de pacote do sistema operacional na unidade de disco rígido local de um computador antes da instalação real do novo sistema operacional. Isso permite que os arquivos sejam “pré-testados” nas máquinas que usam os recursos padrão Advanced Client Download and Execute do SMS 2003, que proporcionam uma escalabilidade muito maior (considerando um planejamento avançado suficiente).
Aviso As etapas descritas neste documento, bem como as alterações feitas pelos scripts inclusos, não são suportadas pelo Microsoft PSS (Product Support Services). Use-as por sua conta e risco.
Nesta página
Introdução
Processo de configuração
Scripts usados nesse processo
Introdução
O SMS 2003 introduziu um novo recurso de software denominado Download and Execute. Esse recurso usa os recursos do BITS (Background Intelligent Transfer Service), que foram introduzidos no sistema operacional Microsoft Windows 2000 e posteriores, para permitir a recuperação de arquivos com o uso do HTTP (Hypertext Transfer Protocol). Essas transferências de arquivos podem ser suspensas e reiniciadas, a partir do ponto em que foram interrompidas, possibilitando uma melhora em termos de flexibilidade, especialmente em situações de pouca largura de banda.
Esses recursos Download and Execute também são úteis em outras situações. Por exemplo, se você estiver instalando um pacote SMS grande em vários computadores, poderá pré-colocar em cache o conteúdo do pacote no computador antes de executar o pacote. Isso é feito por meio da configuração apropriada de um anúncio do SMS.
-
O horário inicial do anúncio deve ser definido como um horário apropriado no futuro.
-
A data de execução obrigatória deve ser definida como um horário após o horário inicial do anúncio.
Quando o SMS 2003 Advanced Client encontrar um anúncio com um horário de execução obrigatório no futuro, ele começará automaticamente o download dos arquivos necessários para esse anúncio assim que o horário inicial desse anúncio tiver passado.
Se você fornecer tempo suficiente entre o horário inicial do anúncio e o horário de execução obrigatório, vários computadores poderão armazenar em cache todo o conteúdo do pacote. Isso permite que o mesmo grande conteúdo de computadores execute o pacote ao mesmo tempo sem qualquer impacto negativo sobre a rede.
Como os pacotes de sistema operacional são significativamente maiores que a maioria dos pacotes normalmente implantados pelo SMS, esse recurso pode ser extremamente vantajoso desde que as seguintes limitações sejam reconhecidas:
-
Os computadores clientes devem ter espaço em disco suficiente. Os computadores devem ser capazes de suportar os arquivos originais do sistema operacional, o backup de estados de usuários (opcionalmente, já que ele seria armazenado na rede) e o pacote completo do sistema operacional. (O SMS OSD Feature Pack removerá os arquivos antigos do sistema operacional antes de expandir a nova imagem.) O tamanho do cache do SMS 2003 Advanced Client também deve aumentar de forma a ser grande o suficiente para manter o pacote completo do sistema operacional (cujo tamanho deve oscilar entre gigabytes).
-
O impacto na rede ainda deve ser levado em consideração. Todos os computadores SMS 2003 Advanced Client começarão o download do conteúdo assim que o horário inicial do anúncio for atingido. Se você especificar muitos computadores na coleção ou se especificar um horário inicial de anúncio que ocorra em um horário inapropriado (por exemplo, no meio do dia útil), a rede e os servidores SMS poderão ficar gravemente sobrecarregados. Embora isso não cause problemas no pacote de implantação do sistema operacional, poderá causar outros problemas operacionais (por exemplo, lento acesso a e-mails, lento à Internet ou lenta entrega de outros pacotes do SMS).
-
Apenas o Windows 2000 e versões posteriores do sistema operacional suporte o recurso Download and Execute. Para clientes Microsoft Windows NT® 4.0 Workstation, o conteúdo ainda pode ser copiado para a unidade de disco rígido do computador e ser executado a partir desse local, mas isso apenas pode ser feito como parte da execução do anúncio; nenhum pré-escalonamento pode ser realizado. Além disso, como o Windows NT 4.0 apenas suporte uma partição de inicialização de 7,8 GB ou menor, é muito mais provável que não haverá espaço suficiente em disco para manter o sistema operacional original, o backup de estado do usuário e o pacote completo do sistema operacional.
Observação É necessário realizar os testes corretos e a análise de impacto. Essas atividades estão além do escopo destes exemplos.
Para usar o Download and Execute com pacotes e anúncios de sistema operacional do SMS 2003, é necessário fazer modificações diretamente nos programas e nos anúncios de sistema operacional usando a API (interface de programa de aplicativos) do SMS, pois o console SMS Administrator proíbe especificamente essas modificações. O restante desses exemplos descreve como fazer essas modificações.
Processo de configuração
As atividades de configuração a serem realizadas são as seguintes:
-
Definição de coleções que contêm apenas os computadores que atendam aos requisitos. Por exemplo, talvez seja apropriado selecionar apenas os computadores que executem o Windows 2000 ou posterior com pelo menos 2 GB de espaço livre em disco (assumindo que todas as máquinas atendam aos requisitos do pacote do sistema operacional que está sendo implantando, como velocidade do processador ou memória).
-
Configuração do tamanho de cache do SMS 2003 Advanced Client de forma que haja capacidade suficiente para armazenar o pacote do sistema operacional.
-
Configuração do programa e do anúncio do sistema operacional usado para implantar o pacote do sistema operacional na coleção de computadores definida na atividade anterior.
Definindo coleções
Como nem todos os computadores terão espaço em disco suficiente para armazenar em cache o pacote completo do sistema operacional, é necessário criar uma coleção de computador que contenha apenas os computadores nos quais o armazenamento será possível. Isso pode ser feito com o uso das seguintes etapas:
-
Crie uma nova coleta denominada Implantar Windows XP com Download and Execute (ou outro nome adequado).
-
Na guia Membership, clique no ícone de cilindro para criar uma nova regra de consulta denominada Windows 2000 com espaço em disco suficiente (ou outro nome adequado).
-
Edite a instrução de consulta para selecionar apenas os computadores que executam o Windows 2000 e com mais de 2 GB de espaço em disco livre. (Pressupondo que o pacote do sistema operacional tenha no máximo 1,5 GB, permita cerca de 500 MB para o espaço de rascunho e para a funcionalidade de rotina.)
A regra de consulta deve ser semelhante à Figura 1.
Ou, examinando a linguagem da consulta, a regra deve ser semelhante à Figura 2.
Os requisitos exatos variarão para cada cliente. Certifique-se de verificar se a coleção contém os resultados apropriados antes de continuar com as seguintes etapas.
Configurando computadores SMS 2003 Advanced Client
Em geral, um SMS 2003 Advanced Client é configurado com um tamanho de cache entre 256 MB e 512 MB. Isso não será suficiente para a maioria dos pacotes de sistema operacional, cujo tamanho pode variar de 500 MB a vários gigabytes. Para oferecer suporte a esses pacotes, o tamanho máximo do cache precisa ser aumentado. Para isso, conclua as seguintes etapas:
-
Crie um diretório que contenha um Microsoft Visual Basic® Scripting Edition (VBScript) que altere o tamanho do cache.
-
Use esse diretório para criar um novo pacote. Nesse pacote, crie um programa que execute o VBScript. Expanda esse pacote a todos os pontos de distribuição do SMS.
-
Distribua esse script à coleção de computadores definida na seção anterior, criando um anúncio obrigatório para o novo pacote. (Esse pacote deve ser executado antes do pacote do sistema operacional.)
O código do VBScript mostrado na Listagem 20 é necessário para alterar o tamanho do cache.
Listagem 20. VBScript necessário para alterar o tamanho do cache
Set ui = CreateObject("UIResource.UIResourceMgr")
Set cacheInfo = ui.GetCacheInfo
cacheInfo.TotalSize = 2000 ' Change maximum size to 2GB (approx)
Observe que isso deve tornar o tamanho do cache maior somente na medida do necessário para o pacote do sistema operacional. Nesse exemplo, pressuponha que o tamanho do cache anterior era 500 MB e o pacote do sistema operacional é 1500 MB; esse script torna o novo tamanho do cache grande o suficiente para suportar os 500 MB de conteúdo existente e o novo pacote do sistema operacional de 1,5 GB. Isso permite que outros pacotes residam no cache ao mesmo tempo, o que pode ser necessário dependendo do tempo durante o qual o pacote do sistema operacional estará presente no cache (o que, por sua vez, depende da diferença entre a data inicial do anúncio e a data do anúncio obrigatória) e quantos outros pacotes obrigatórios foram recentemente executados ou serão executados em breve a partir do cache.
Configurando programas e anúncios do sistema operacional
Para permitir que um pacote de sistema operacional do SMS 2003 ofereça suporte para Download and Execute, crie antes o pacote de sistema operacional usando as etapas padrão (capturando um arquivo .wim, criando o pacote a partir desse arquivo, definindo um programa de sistema operacional com as configurações e ações personalizadas necessárias e assim por diante). Você também deve criar um anúncio para esse pacote, mas ainda não direcione a coleção inteira. Em vez disso, direcione uma coleção vazia, que possa ser usada para finalidades de teste. Quando os testes estiverem concluídos, um novo anúncio poderá ser criado para a coleção completa (tomando muito cuidado para especificar o horário inicial apropriado do anúncio e o horário obrigatório do anúncio).
Dois scripts foram fornecidos para habilitar o suporte de Download and Execute:
-
ZTICache.vbs. Esse script é usado como front-end para o executável do programa do SMS OSD Feature Pack, osdlaunch.exe. Ele garante que o conteúdo do pacote em cache seja movido para um local seguro, C:\MININT\PackageSource, antes da execução de osdlaunch.exe. Ele também protege esse conteúdo de forma que osdlauch.exe não possa removê-lo durante sua limpeza normal da estrutura de diretório de C:\MININT.
-
ZTICacheUtil.vbs. Esse script faz chamadas de API do SMS para modificar objetos existentes de programas e anúncios do sistema operacional de forma a habilitar front-end do ZTICache.vbs (descrito anteriormente) e a habilitar Download and Execute no anúncio. Observe que você não poderá ver essas modificações no console SMS Administrator; ele continuará a mostrar que a execução a partir do ponto de distribuição está habilitada, mesmo quando o download a partir do ponto de distribuição tiver sido configurado.
Esses arquivos devem ser copiados para um local acessível no servidor (por exemplo, \\SERVER1\ZTI\) no qual o console SMS Administrator possa acessá-los com o uso de um caminho UNC (Universal Naming Convention).
Para fazer as alterações necessárias, o script ZTICache.vbs deve primeiro ser adicionado como arquivo necessário a uma ação personalizada existente (por exemplo, a ação personalizada Instalação do BDD Zero Touch - Validação). Isso fará com que o SMS OSD Feature Pack inclua esse arquivo no diretório do pacote (necessário uma vez que esse script é executado quando o programa do sistema operacional é iniciado pela primeira vez pelo anúncio). Quando o arquivo for adicionado, todos os pontos de distribuição do pacote deverão ser atualizados.
Após a adição do script ZTICache.vbs, os objetos de programas e anúncios do sistema operacional poderão ser modificados com o uso do script ZTICacheUtil.vbs. A Listagem 21 mostra como usar o script para habilitar Download and Execute no anúncio do SMS XXX20001; isso também fará com que o programa associado do sistema operacional seja modificado para executar ZTICache.vbs.
Listagem 21. Comando para executar ZTICacheUtil.vbs
cscript.exe ZTICacheUtil.vbs /server:SERVER1 /advertisement:XXX20001 /enable:true
Uma saída semelhante à Listagem 22 deve ser gerada.
Listagem 22. Exemplo de saída para execução de ZTICacheUtil.vbs
Microsoft (R) Windows Script Host Version 5.6 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. Connecting to SMS provider server SERVER1 and site MTN. Retrieving advertisement object for advertisement XXX20001. Enabled download and execute on advertisement XXX20001. Retrieving program object for package XXX00001 and program Install XP. Enabled ZTICache.vbs on package XXX00001 program Install XP. Be sure to include ZTICache.vbs in the OS package by including it as a required file on at least one custom action. OS Package ID: XXX00001 OS Package Name: XP Master OS Program Name: Install XP OS Program command line: wscript //b ZTICache.vbs OS Program cache enabled: True OS Advertisement ID: XXX20001 OS Advertisement flags: 48 Download enabled: True
Lembre-se de que a modificação do programa do sistema operacional afeta todos os anúncios que usam esse programa. Portanto, modifique apenas um programa que esteja sendo usado exclusivamente para suporte de Download and Execute. Isso pode exigir a criação de um segundo programa no pacote do sistema operacional.
Para desfazer as alterações feitas para suportar Download and Execute, reconfigure o anúncio e o programa do sistema operacional, como mostra a Listagem 23 (substituindo o ID de anúncio, o ID de pacote e o nome do programa apropriados).
Listagem 23. Desfazendo alterações feitas para suportar Download and Execute
cscript.exe ZTICacheUtil.vbs /server:SERVER1 /package:XXX00001 /program:"Install XP" /enable:false cscript.exe ZTICacheUtil.vbs /server:SERVER1 /advertisement:XXX20001 /enable:false
Para obter mais informações sobre ZTICacheUtil.vbs, é possível executar o script sem parâmetros. Ele exibirá uma instrução de uso, bem como informações sobre cada pacote de sistema operacional, programa e anúncio atualmente definido no servidor SMS especificado.
Quando Download and Execute tiver sido habilitado em um programa e anúncio de sistema operacional, ele deverá ser testado. Isso pode ser feito por meio da adição de um ou mais computadores (preferivelmente computadores de teste) à coleção vazia criada anteriormente.
Quando estiver satisfeito com os resultados, um anúncio poderá ser criado para a coleção principal com base em consulta. Lembre-se de especificar um horário apropriado no futuro para a data inicial do anúncio. Teoricamente, esse horário deve corresponder a uma ocasião em que os clientes não percebam o impacto na rede (por exemplo, na sexta-feira à meia-noite). Além disso, lembre-se de que os clientes não começarão a baixar o conteúdo até que o anúncio seja obrigatório; portanto, adicione uma data de atribuição obrigatória apropriada.
Scripts usados nesse processo
Nós na Microsoft Corporation esperamos que os exemplos de scripts (ZTICacheUtil.vbs na Listagem 24 e ZTICache.vbs na Listagem 25) sejam úteis para você. Entretanto, o uso desses exemplos é de sua inteira responsabilidade. Eles são fornecidos no estado em que se encontram, sem garantias, expressas ou implícitas, quanto à precisão, integridade, adequação para finalidades específicas, direitos ou não-violação. A Microsoft Corporation não se responsabilizará por nenhum dano ocorrido devido ao uso destes exemplos de scripts, sejam os danos diretos, indiretos, especiais, incidentais ou conseqüentes, mesmo que tenha sido informada sobre a possibilidade de tais danos.
Código-fonte para ZTICacheUtil.vbs
A Listagem 24 contém o código-fonte de ZTICacheUtil.vbs. Copie e cole o código relacionado na Listagem 24 em um editor de texto e salve-o como ZTICacheUtil.vbs.
Listagem 24. Código-fonte para ZTICacheUtil.vbs
Observação Algumas partes do trecho de código a seguir foram exibidas em várias linhas para ficarem mais legíveis. Elas devem ser inseridas em uma única linha.
'//--------------------------
-------------------------------------------------
'//
'//
'// File: ZTICacheUtil.vbs
'//
'// Input: none
'//
'// Return: 0 = Success, anything else indicates failure
'//
'// Purpose: By default, the OS Deployment Feature Pack
does not support
'// "download and execute" with OS packages.
This script enables
'// that support in two ways:
'//
'// 1. By modifying the OSD advertisement to
enable "download and
'// execute". By default, the SMS Administrator
Console will
'// prevent this. (Even after the script changes
this through
'// the SMS APIs, the GUI will still show
that it is not enabled.)
'//
'// 2. By modifying the OSD program to run the
ZTICache.vbs
'// script which ensures that the locally-cached
OSD package files
'// are kept in a safe location, C:\MININT\PackageSource.
(This
'// can be done even without
enabling "download and execute" on
'// the OSD advertisement; in this case,
the ZTICache.vbs script
'// will copy the OSD package files
from the distribution point
'// directly to C:\MININT\PackageSource.
See the ZTICache.vbs
'// script for more details.)
'//
'// This script is driven by command line
parameters. It assumes
'// that the script is being run by someone
with the necessary SMS
'// permissions to modify package, program,
and advertisement objects.
'// It also assumes that the user knows the
package ID, program name,
'// and advertisement ID of the objects that
they want to modify, as
'// well as the server name of the SMS site
owning those objects.
'//
'// This script also requires Windows Scripting Host 5.6.
'//
'//------------------------------------------
---------------------------------
' Initialization
Set sh = CreateObject("WScript.Shell")
Set argsNamed = WScript.Arguments.Named
Set oLocator = CreateObject("WbemScripting.SWbemLocator")
' Get parameters
sServer = UCase(argsNamed("server"))
sPackage = UCase(argsNamed("package"))
sProgram = argsnamed("program")
sAdvertisement = UCase(argsNamed("advertisement"))
sEnable = UCase(argsNamed("enable"))
If argsNamed.Count = 0 then
WScript.Echo ""
WScript.Echo "USAGE:"
WScript.Echo ""
WScript.Echo WScript.ScriptName &
" [/server:<serverName>]
[/package:<packageID>]" &_
" [/program:<programName>]
[/advertisement:<advertisementID>]
[/enable:<true|false>]"
WScript.Echo ""
WScript.Echo "Options:"
WScript.Echo VBTAB & "/server:
SMS server name (Default=This server)."
WScript.Echo VBTAB & "/package:
OS package ID (Default=Null)."
WScript.Echo VBTAB & "/program:
OS program name (Default=null)."
WScript.Echo VBTAB & "/advertisement:
OS advertisement ID (Default=null)."
WScript.Echo ""
WScript.Echo "Examples:"
WScript.Echo ""
WScript.Echo WScript.ScriptName &
" /advertisement:XXX20001 /enable:true"
WScript.Echo WScript.ScriptName &
" /package:XXX00001
/program:""Install XP"" /enable:true"
WScript.Echo ""
End if
' Connect to SMS provider
Set oServices = oLocator.ConnectServer(sServer, "root\sms")
Set oProviderLocation = oServices.ExecQuery("select * from
SMS_ProviderLocation where ProviderForLocalSite = 1")
For Each o In oProviderLocation
sProviderServer = o.Machine
sProviderSite = o.SiteCode
Next
Set oServices = Nothing
WScript.Echo "Connecting to SMS provider server " &
sProviderServer &_
" and site " & sProviderSite & "."
Set oServices = oLocator.ConnectServer(sProviderServer,
"root\sms\site_" &_
sProviderSite)
' See what we need to do
If sAdvertisement <> "" then
' Get the specified advertisement
WScript.Echo "Retrieving advertisement
object for advertisement " &_
sAdvertisement & "."
Set oAdvert = oServices.Get
("SMS_Advertisement.AdvertisementID='" &_
sAdvertisement & "'")
' Modify the program as appropriate.
Select Case sEnable
Case "YES", "TRUE"
If oAdvert.RemoteClientFlags <> 48 then
oAdvert.RemoteClientFlags = 48
oAdvert.Put_
WScript.Echo "Enabled download and execute
on advertisement " &_
sAdvertisement & "."
' Force the package and program to be checked if
no other values were specified.
If sPackage = "" and sProgram = "" then
sPackage = oAdvert.PackageID
sProgram = oAdvert.ProgramName
End if
End if
Case Else
If oAdvert.RemoteClientFlags <> 40 then
oAdvert.RemoteClientFlags = 40
oAdvert.Put_
WScript.Echo "Disabled download and execute
on advertisement " &_
sAdvertisement & "."
End if
End Select
End if
If sPackage <> "" and sProgram <> "" then
' Get the specified program
WScript.Echo "Retrieving program object
for package " & sPackage &_
" and program " & sProgram & "."
Set oProgram = oServices.Get
("SMS_Program.PackageID='" & sPackage &_
"',ProgramName='" & sProgram & "'")
' Modify the program as appropriate.
Select Case sEnable
Case "YES", "TRUE"
If oProgram.CommandLine <>
"wscript //b ZTICache.vbs" then
oProgram.CommandLine = "wscript //b
ZTICache.vbs"
oProgram.Put_
WScript.Echo "Enabled ZTICache.vbs
on package " & sPackage &_
" program " & sProgram & "."
WScript.Echo "Be sure to include ZTICache.vbs
in the OS package by including it as a"
WScript.Echo "required file on at
least one custom action."
End if
Case Else
If oProgram.CommandLine <> "osdlaunch.exe" then
oProgram.CommandLine = "osdlaunch.exe"
oProgram.Put_
WScript.Echo "Disabled ZTICache.vbs
on package " & sPackage &_
" program " & sProgram & "."
End if
End Select
End if
' Finally, report on the current state
Set oPackages = oServices.ExecQuery("select *
from SMS_Package where ImageFlags = 1")
For each oPackage in oPackages
WScript.Echo " "
WScript.Echo "OS Package ID:
" & oPackage.PackageID
WScript.Echo "OS Package Name:
" & oPackage.Name
Set oPrograms = oServices.ExecQuery("select
* from SMS_Program where PackageID = '" &_
oPackage.PackageID & "'")
For each oProgram in oPrograms
WScript.Echo " OS Program Name:
" & oProgram.ProgramName
WScript.Echo " OS Program command line:
" & oProgram.CommandLine
If Instr(oProgram.CommandLine, "ZTICache.vbs") > 0 then
bEnabled = true
Else
bEnabled = false
End if
WScript.Echo " OS Program cache enabled:
" & bEnabled
Set oAdverts = oServices.ExecQuery("select *
from SMS_Advertisement where PackageID = '" &_
oProgram.PackageID & "' and ProgramName =
'" & oProgram.ProgramName & "'")
For each oAdvert in oAdverts
WScript.Echo " OS Advertisement ID:
" & oAdvert.AdvertisementID
WScript.Echo " OS Advertisement flags:
" & oAdvert.RemoteClientFlags
If oAdvert.RemoteClientFlags = 48 then
bDownloadEnabled = true
Else
bDownloadEnabled = false
End if
WScript.Echo " Download enabled:
" & bDownloadEnabled
' Sanity check
If bDownloadEnabled and (not bEnabled) then
WScript.Echo " "
WScript.Echo "Warning: ZTICache.vbs
must be enabled on " &_
oPackage.PackageID & " and " &
oProgram.ProgramName
WScript.Echo "in order for download and
execute to be successful for advertisement " &_
oAdvert.AdvertisementID & "."
WScript.Echo " "
End if
Next
Next
Next
' Cleanup
Set oServices = Nothing
Código-fonte para ZTICache.vbs
A Listagem 25 contém o código-fonte de ZTICache.vbs. Copie e cole o código relacionado na Listagem 25 em um editor de texto e salve-o como ZTICache.vbs.
Listagem 25. Código-fonte para ZTICache.vbs.
Observação Algumas partes do trecho de código a seguir foram exibidas em várias linhas para ficarem mais legíveis. Elas devem ser inseridas em uma única linha.
'//---------------------------
------------------------------------------------
'//
'//
'// File: ZTICache.vbs
'//
'// Input: none
'//
'// Return: Return code from OSDLaunch.exe (0 = Success)
'//
'// Purpose: By default, the OS Deployment Feature
Pack does not support
'// "download and execute" with OS packages.
This script is
'// designed to enable this by moving or
copying the OS package
'// files to a safe location on the hard drive,
C:\MININT\PackageSource,
'// where they will not be removed when OSD
cleans the hard drive.
'// After doing this, it will run OSDLaunch.exe
to kick off the
'// normal OSD process. But because OSDLaunch
"cleans" the C:\MININT
'// directory when it starts, the script must
also protect the
'// contents of the C:\MININT\PackageSource
directory. It does
'// this by opening all the files in the directory,
which prevents
'// their deletion because they are in use.
'//
'// If the OSD advertisement has been set to
enable "download and execute",
'// the package files (and this script) will be
in the SMS advanced client
'// cache directory (typically "%WINDIR\System32
\ccm\cache\<package>"). In
'// order to prevent there being two copies
of the files on the hard drive,
'// the files are moved to C:\MININT\
PackageSource instead of copied.
'//
'// If this script is run on an NT 4.0
workstation (through the same OSD
'// advertisement), "download and execute"
is not available. However, the
'// script will still copy the files to the
hard drive before initiating
'// the OSD process. This at least enables
some of the benefits of
'// download and execute for NT 4.0 client.
'//
'// This script is inserted into an existing
OSD program by the
'// ZTICacheUtil.vbs script. See that script
for further information.
'// This script must be added to one of the
OSD custom actions as
'// a required file so that it is included
in the OSD package files.
'// After doing this, the distribution points
need to be updated.
'//
'//---------------------------------------------
------------------------------
' Initialization
Set fso = CreateObject("Scripting.FileSystemObject")
Set sh = CreateObject("WScript.Shell")
' Find the directory we are running from
- that's the source.
sCacheDir = fso.GetParentFolderName
(WScript.ScriptFullName)
' Create the OSD directory structure
If not fso.FolderExists("C:\MININT") then
fso.CreateFolder "C:\MININT"
End if
If fso.FolderExists("C:\MININT\PackageSource") then
fso.DeleteFolder "C:\MININT\PackageSource", true
End if
fso.CreateFolder "C:\MININT\PackageSource"
' If we are running from a local path, move the
contents to the PackageSource directory.
' Otherwise, just copy it. (When running from a
local path, SMS must have already copied
' the files locally using BITS.)
If Left(sCacheDir,2) = "\\" then
fso.CopyFile sCacheDir & "\*.*",
"C:\MININT\PackageSource\", True
sh.LogEvent 0, "Copied files in " & sCacheDir
For each f in fso.GetFolder(sCacheDir).Subfolders
sh.LogEvent 0, "Copying folder " & f.Path
fso.CopyFolder f.Path, "C:\MININT\PackageSource\", true
Next
Else
fso.MoveFile sCacheDir & "\*.*",
"C:\MININT\PackageSource\"
sh.LogEvent 0, "Moved files in " &
sCacheDir
For each f in fso.GetFolder(sCacheDir).
Subfolders
sh.LogEvent 0, "Moving folder " & f.Path
fso.MoveFolder f.Path,
"C:\MININT\PackageSource\"
Next
End if
' Log the count of files in the folder
sh.LogEvent 0, "Files in C:\MININT\PackageSource folder: " &_
fso.GetFolder("C:\MININT\PackageSource").Files.Count
' Because OSDLaunch will "clean up" the C:\MININT
directory, we need to keep the package
' source files from being deleted in the process.
Open each one of them and keep them open
' until OSDLaunch.exe completes.
sh.LogEvent 0, "Opening C:\MININT\
PackageSource files"
Set oFiles = CreateObject
("Scripting.Dictionary")
For each f in fso.GetFolder
("C:\MININT\PackageSource").Files
Set oFile = fso.OpenTextFile(f, 1)
oFiles.Add f, oFile
Next
For each s in fso.GetFolder
("C:\MININT\PackageSource").SubFolders
For each f in s.Files
Set oFile = fso.OpenTextFile(f, 1)
oFiles.Add f, oFile
Next
Next
' Run OSDLaunch.exe from the new directory.
It will try to clean up C:\MININT, but the
' open files will keep that from causing problems.
OSDLaunch will then install OSDAgent
' as a service and that will drive the
rest of the process.
sh.LogEvent 0, "Setting working directory"
sh.CurrentDirectory = "C:\MININT\PackageSource"
sh.LogEvent 0, "Running OSDLaunch"
rc = sh.Run("OSDLaunch.exe", 0, true)
sh.LogEvent 0, "Return code from
OSDLaunch = " & rc
' Quit with the return code from OSDLaunch.
The files will automatically be closed.
WScript.Quit rc


