SCCM 2007 – Автоматизация установки агентов

Методов установки SCCM 2007 агентов великое множество, прежде всего штатных, но общепризнанная проблема состоит в том что полностью автоматизировать этот процесс довольно сложно.

В случае установки push-методом контролировать процесс приходится вручную (если компьютер новый то становиться сразу, если нет то приходится делать лишние телодвижения), при установке через WSUS всегда допускается неработающий WSUS-клиент.

Предлагаю всеобщему вниманию одну из методик.

Она требует некоторой доработки, но вполне работоспособна и с успехом используется в продуктивном окружении.

Кратко по скрипту приведенному ниже.

Скрипт помещается либо в автозагрузку, либо как логон-скрипт для ПК на котором должен быть установлен агент.

именно отсюда идет

strComputer = "."

Далее происходит проверка наличия сервиса ccmexec

в случае его отсутствия будет произведена попытка его установки с помощью строки

strCommand = "\\DFS_PATH\CcmSetup.exe /mp:" & strSiteServer & " SmsSiteCode=" & strSiteCode

нелишним будет добавить что этот путь должен быть исправлен на существующий и для учетной записи ПК туда должен быть доступ на чтение.

В случае если сервис установлен то будет предпринята попытка запустить ClientActions.

В завершении процесса в случае если были ошибки, например не живой WMI или не удалось что то сделать то на мыло администратора приходит примерно такая штука

ComputerName is Computer-name
OS Version: Windows XP
Couldn't get the client actions
For Details please visit http://wiki/index.php/SCCM_Installer

Best regards
SCCMInstaller Service user.

В ближайших планах есть научить этот скрипт понимать Windows 7

on error resume next

Dim Results, Service, StateResults, StartMode

strComputer = "."
strService = "CcmExec"

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecQuery("Select * from Win32_Service Where Name=’" & strService & "’")
Set WshShell = WScript.CreateObject("WScript.Shell")

If err<>0 Then
SendReport "WMI Connection is failing. Please ckeck this machine." & CHR(13) & "WMI Error message: "& Err.description
WScript.Quit
Else
If colServices.Count = 0 Then
strSiteCode = "Sxx"
strSiteServer = "site_server"
strCommand = "\\DFS_PATH\CcmSetup.exe /mp:" & strSiteServer & " SmsSiteCode=" & strSiteCode

retVal = WshShell.Run(strCommand)
If RetVal=0 Then
sendReport "Setup Program complete with code – " & CStr(RetVal)
else
sendReport "Setup Program failed with code – " & CStr(RetVal)
end if
Else
CheckSccmServiceState
WScript.Quit
End If
End If

Function getManagementPoint
Dim oSMSClient, getMP
Set oSMSClient = CreateObject ("Microsoft.SMS.Client")

If Err.Number <> 0 Then
sendReport "Could not create SMS Client Object – quitting"
WScript.Quit
End If
getMP=oSMSClient.GetCurrentManagementPoint
getManagementPoint=getMP
‘WScript.Echo "Current Management Point is : " & oSMSClient.GetCurrentManagementPoint
End Function

Function GetAssignedSite
Dim smsClient,getSite
Set smsClient = CreateObject ("Microsoft.SMS.Client")

If Err.Number <> 0 then
SendReport "Could not create SMS Client Object – quitting"
WScript.Quit
End If
getSite=smsClient.GetAssignedSite
GetAssignedSite=getSite
End Function

Function getCacheInfo
Dim smsClient, getCache, oUIResManager, oCache, CacheSize
CacheSize=1500

Set smsClient = CreateObject ("Microsoft.SMS.Client")
If Err.Number <> 0 then
SendReport "Could not create SMS Client Object – quitting"
WScript.Quit
End If

Set oUIResManager = createobject("UIResource.UIResourceMgr")
Set oCache=oUIResManager.GetCacheInfo()
If oCache Is Nothing Then
Set oUIResManager=Nothing
SendReport "Could not get cache info – quitting"
WScript.Quit
End If

oCache.TotalSize=CacheSize

getCache=oCache.TotalSize
getCacheInfo=getCache
End Function

Function GetOSSP
Dim objWMIService,os,getWinOS,GetWinSP
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
For Each os In objWMIService.InstancesOf("Win32_OperatingSystem Where Primary=True")
Select Case os.Version
Case "6.0.6001": getWinOS = "VISTA SP1"
Case "6.0.6000": getWinOS = "VISTA"
Case "5.2.3790": getWinOS = "Windows Server 2003"
Case "5.1.2600": getWinOS = "Windows XP"
Case "5.0.2195": getWinOS = "W2K"
Case Else : getWinOS = "Other"
End Select
Next
GetOSSP = getWinOS
End Function

Sub CheckSccmServiceState
set Results = objWMIService.ExecQuery("select state from Win32_Service where name=’" & strService & "’")

For Each objService In Results
StateResults = objService.State
ServiceState = StateResults
‘WScript.Echo " State " & objService.State

if ServiceState = "Stopped" then
‘WScript.Echo " Starting " & objService.Name
objService.StartService()
WScript.Sleep 10000
SendReport "Service State : Not Running" & CHR(13) & _
"Action        : Start Service" & CHR(13) & _
"Current MP    : " & getManagementPoint & CHR(13) & _
"Assigned Site : " & GetAssignedSite & CHR(13) & _
"Cache Size    : " & getCacheInfo & CHR(13) & _
" " & CHR(13) & _
"Initiate PerformAction"
PerformAction
else
‘SendReport "Service State : Running." & CHR(13) & _
‘"Current MP    : " & getManagementPoint & CHR(13) & _
‘"Assigned Site : " & GetAssignedSite & CHR(13) & _
‘"Cache Size    : " & getCacheInfo & CHR(13) & _
‘" " & CHR(13) & _
‘"Initiate PerformAction"
PerformAction
end if
Next

set Results = objWMIService.ExecQuery("select state from Win32_Service where name=’" & strService & "’")

For Each objService In Results
if objService.State = "Stopped" then

SendReport "Service ccmexec – found." & CHR(13) & _
"State – not running" & CHR(13) & _
"Start service Failed. " & CHR(13) & _
"Current MP    : " & getManagementPoint & CHR(13) & _
"Assigned Site : " & GetAssignedSite & CHR(13) & _
"Cache Size    : " & getCacheInfo & CHR(13) & _
" " & CHR(13)
else
‘WScript.echo "start service"
end if
next
end Sub

Sub PerformAction
On Error Resume Next
Dim oCPAppletMgr, oClientAction, oClientActions

Set  oCPAppletMgr=CreateObject("CPApplet.CPAppletMgr")
if err.number <> 0 Then
SendReport "Couldn’t create control panel application manager"
Exit Sub
End If

Set oClientActions=oCPAppletMgr.GetClientActions
If err.number<>0 Then
SendReport "Couldn’t get the client actions"
Set oCPAppletMgr=Nothing
Exit Sub
End If

For Each oClientAction In oClientActions
‘WScript.echo oClientAction.name
oClientAction.PerformAction
Next

Set oClientActions=Nothing
Set oCPAppletMgr=Nothing
End Sub

Sub SendReport (strMessage)
Dim objMessage
Dim WshShell

Set objMessage = CreateObject("CDO.Message")
Set WshShell = WScript.CreateObject("WScript.Shell")

ComputerName = WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")

objMessage.Subject = "SCCM Client Installation report"
objMessage.From = "sccm.installer@domain.com"
objMessage.To = "SCCMAdministrators@domain.com"

objMessage.TextBody = "ComputerName is " & ComputerName & CHR(13) _
& "OS Version: " & GetOSSP & CHR(13) _
& strMessage _
& CHR(13) & CHR(13) & "For Details please visit http://wiki/index.php/SCCM_Installer " _
& CHR(13) & CHR(13) & "Best regards " _
& CHR(13) & "SCCMInstaller Service user."

objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.100.10"
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25

objMessage.Configuration.Fields.Update

objMessage.Send
End Sub

Буду благодарен, если поделитесь этой статьей:

Приглашаю присоединиться ко мне в следующих сервисах:
facebook Google Plus вКонтакте Twitter
Если Вам понравилась статья, то вы можете подписаться на RSS. А также бесплатно подписаться по E-mail и получать актуальную информацию в числе первых.
Получать обновления на email

Вы можете оставить комментарий.

Добавить комментарий

XHTML: Вы можете использовать тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>