SCCM 2007 – Автоматизация установки агентов
Методов установки SCCM 2007 агентов великое множество, прежде всего штатных, но общепризнанная проблема состоит в том что полностью автоматизировать этот процесс довольно сложно.
В случае установки push-методом контролировать процесс приходится вручную (если компьютер новый то становиться сразу, если нет то приходится делать лишние телодвижения), при установке через WSUS всегда допускается неработающий WSUS-клиент.
Предлагаю всеобщему вниманию одну из методик.
Она требует некоторой доработки, но вполне работоспособна и с успехом используется в продуктивном окружении.
Кратко по скрипту приведенному ниже.
Скрипт помещается либо в автозагрузку, либо как логон-скрипт для ПК на котором должен быть установлен агент.
именно отсюда идет
Далее происходит проверка наличия сервиса ccmexec
в случае его отсутствия будет произведена попытка его установки с помощью строки
нелишним будет добавить что этот путь должен быть исправлен на существующий и для учетной записи ПК туда должен быть доступ на чтение.
В случае если сервис установлен то будет предпринята попытка запустить 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
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
Похожие статьи
Приглашаю присоединиться ко мне в следующих сервисах:
Вы можете оставить комментарий.