Showing posts with label SCCM 2007. Show all posts
Showing posts with label SCCM 2007. Show all posts

Monday, January 19, 2009

Unable to import AI license file

So our software licensing team asked about using SCCM's Asset Intelligence to track software license usage at our company. After going through all of our normal internal testing we were ready to import our xml formated license file into our site. However when we tried to import it on our production server we received a single message:

error

Unable to connect to the site database

Not very useful since my console and site server were obviously talking to the site database just fine. I spent many hours troubleshooting this one myself before calling Premier support. At which time I spent many more hours troubleshooting on the phone with them and fearing that the issue would be unresolved. We went through all kinds of troubleshooting of both my SQL server setup and my site server setup.

The only error message with any meaning behind it was when we tried to run the import manually:

D:\SMSPROV\bin\i386>mvlsimport.exe /file //server/share/MSLtest.xml

Failed to get Site Database configuration information.Failed to get Site Database connection.Failed to intialize.

Yes, those are forward slashes, per explicit instructions by Microsoft Support.

My gut told me it was a bug in SCCM, but how my site differed eluded both me and Microsoft support. Ultimately, by sheer luck a stumbled across the steps that would enable me to reproduce the bug on my own. My site had an unrelated hardware failure and I had to rebuild and recover it. As I rebuilt it I tried the import several times along the way, until it finally failed. Once I was able to reproduce the bug I let Microsoft know how my site differed from a working site. Turns out there is a bug importing the license file if the smsprovider is installed on another computer other than the site server. Support was then finally able to confirm that this was a bug that they could reproduce and would notify the development team. In the absence of an actual fix, they provided me with a workaround. The workaround is to export the sql node of the sms registry key from the site server and import it onto the smsprovider computer. If you are switching architecture you will have to update the key to compensate for wow6432node as well.

Export this key from your 32-bit site server: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\SQL Server]

Import this key into your 32-bit smsprovider computer.

Or, if your provider is 64-bit, find and replace \software\Microsoft\ with \software\wow6432node\Microsoft

Key will now be in this format:

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\SMS\SQL Server]

Now import the new key onto your 64-bit smsprovider computer.

Thursday, January 15, 2009

wsutil to change your wsus server's ports

Following up on my recovery of a sccm site.  My original recovery doc did not specify that during the wsus install, wsus needs to be setup to use its own custom website on ports 8530 (for http) and 8531 (for https).  I later found that if you miss this step  (When you notice your site fails to sync with its wsus database) then there is a simple utility installed with wsus that will allow you to change it.  From the command line:

wsusutil.exe usecustomwebsite true

Also, if your site just isn't syncing for no apparent reason, I've found that a wsus reset may help:

wsusutil.exe reset

You can find wsutil on the wsus server in the program files\Update Services\Tools folder.

Friday, January 9, 2009

Recovery of SCCM Site Failure

Despite the fact that Microsoft has recovery information posted in their online support docs ( http://technet.microsoft.com/en-us/library/bb680474.aspx), site recovery is still a confusing task.  I've gone through several site recoveries and here are the notes from my last one, where the central site happened to fail.  An important note that I don't think is explained very well is that you have to have a functioning site setup the same way as the old site before you can recover the old site.

So before starting the site recovery review the original site setup procedure.  If you don't have one documented, then see the excellent write up by Ying Li: http://myitforum.com/cs2/blogs/yli628/archive/2008/06/25/setup-configmgr-2007-sp1-from-start-to-finish.aspx

Notes from recovery of Central site on 12/17/08.

1. OS, Server name, Site Code, and Drive layout (OS on C: and program files on drive d: ) should match original hardware.  (Do not move from 64-bit to 32-bit OS).

2. Install the OS and configure as normal

3. Give the machine account admin rights on the SQL server

4. Install WSUS 3.0 with SP1.  Do not use the default website.  Use custom website.  During install point it to the remote SQL server (if you use a remote sql server to host wsus metadata).  Do not overwrite the contents of the database.  Do not use the configuration wizard to setup wsus.  Simply exit when the configuration wizard starts.

5. Start copying the backup files to the local machine since it can take 1/2 hour.

6. Install the correct version of SCCM

a. Make sure to reuse the same program path (d:\sms for our Primary sites since they were upgrades from sms.  d:\sccm for our Secondary sites, since they were fresh installs when we set them up).  This part is critical.  When you do the recovery step, your site will to use the original setup paths that were in use prior to the site failure.  Changing the paths will cause a significant headache!

b. On a new fully patched system you will not pass the prereq check.  Double click on each item to see how to resolve the issue.  You should be able to resolve every error.

c. After resolving the MMC sp3 issue, it will still show up as an warning in prereq check, that is fine if you are sure you have applied sp3 for MMC.  The setup routine does not correctly query the registry to see that lastest version of the hotfix that Microsoft issued.

d. You can ignore the warning about SQL server authentication mode if you typically run SQL under the system account (without hardening SQL).

e. If you are attempting to restore a site that has a remote provider and point it back to the correct remote provider machine, the installer will complain that machine already has a provider.

1. On the provider machine, the registry key is blocking the install of the new remote provider, so remove the HKLM\SOFTWARE\Microsoft\SMS\Providers key.

2. On the provider machine, connect to root\sms with WBEMTEST and press the 'Enum Classes button'. No input is necessary, just press 'OK' to do an 'Immediate only' search. In the Query Results dialog window, click on the 'SMS_ProviderLocation' and press the 'Delete' key. Close out of all of these dialogs.

3. Delete the SMSPROV folder on the root.

4. Add the new site server machine as a local administrator and remove the old site server (if applicable).

Note: Provider fix, pasted from http://social.technet.microsoft.com/forums/en-US/configmgrsetup/thread/bb307748-7638-404d-a6a4-982827a051c8/

f. All other site servers will install the provider on themselves.

g. On the SQL DB server detach the old DB.  Create a new DB with the same name and file locations.  Give the smssite server db_owner on the db.

7. After the install has completed successfully run the site recovery wizard.

a. Close the console if open

b. Start>all programs>Microsoft System Center>Config Mgr 2007>Config Mgr Site Repair Wizard

c. Redsite and ROSsite do not have local DP's installed.  Choose the option to skip package verification.

8. Reset permissions for site in AD.

a. Open AD users and Computers> System> System Management

b. Open properties and give site server full control on Systems Management container.

c. Open advance properties and change permissions so that they apply to "This object and all descendant objects"  (this is not the default so be sure to do it).

9. Restore the site control file

a. Copy  site_control_files sitectrl_<SiteCode>.ct0 to D:\sms\inboxes\sitectrl.box

b. Rename file from sitectrl_<SiteCode>.ct0 to sitectrl.ct0

10. After recovery perform a site reset

a. Rerun setup from Start>all programs>Microsoft System Center>Config Mgr 2007>

b. Choose site reset

11. Set user group permissions for recovered site and related site servers

a. Computer mgmt>local users and groups>Groups

b. Sms_sitetositeconnection_<sitecode>  should contain the parent server and any child servers that need to connect to the site.

c. Sms_siteSystemtoSiteServer_<sitecode> should contain any parent or child site that needs to write to the site's DB.

d. Sms Reporting Users should contain any domain accounts that have reporting rights.

e. Sms admins should contain your sms administrators domain accounts.

12. If this was the central site with the wsus updates, then the wsus updates folders need to be reshared with the same share names.  Check the software updates deployment packages nodes.  On each package open the package properties.  The general tab will show the share name that the packages is expected to be found on.  The central site's machine account will need full control of this share.

13. Reset the wsus db:

a. From the cmd prompt:  c:\program files\Update Services\tools\wsusutil.exe reset

b. Wait 1 hour

c. Force a Synchronization on the Update Repository

d. Verify wsus is syncing properly: wsyncmgr.log for errors.

14. Verify backup share permissions for newly restored site.  Our backups are set for a share on another server, which is then backed up to tape.  This can be verified in the site maintenance node and by reviewing the smsbkup.log located in the backup share.

15. If this was the central site, recreate the backup schedule for the site control file.  A scheduled task that runs every 15 mins to dump the site control file and copy them to another machine:

a. site_control_file_backup.bat

D:\sms\bin\i386\00000409\preinst.exe /Dump

xcopy d:\*.ct0 backup_location\site_control_files /C /Y

16. Check and review system logs for errors for the next several days.

17. Monitor Site Status for errors.  The only errors should be on the central site and be related to unapproved clients trying to get policy.  Recheck in 24 hours.

18. Verify successful backups by reviewing the smsbkup.log located in the backup share.

Wednesday, December 10, 2008

Config Manager Usability Study

Microsoft is conducting a usability study for the next version of SCCM.  If your in the Redmond area and available Jan 12-23rd you can participate.  To join send an email to itusable@microsoft.com.  Put ConfigMgr in the subject line: Source

Monday, December 1, 2008

Client Health Check Script- Take 2

In final testing of the Client Health Check Script, I found that ccmsetup doesn't finish running the install during machine startup on any XP machine that I tested.  I spent over 16 hours trying to figure out why before going with an alternative solution.  Instead of running ccmsetup during machine startup, I now create a system scheduled task to run ccmsetup 5 minutes in the future.  Since it's a one time task it cleans itself up.  Here is the modified script:

Attached: Download

'==========================================================================
' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 4.0
'
' NAME: SCCM_Client_Health_Check.vbs
' AUTHOR: Bill Phillips , ESRI
' DATE : 10/20/2008
'
' COMMENT: Code rewrite for SCCM client taken from 1E ClientHealth Script for SMS client
' Run sccm_client_health_check.vbs /smsserver:smsserver /email:1stemail@company.com /email1:2ndemail@company.com
'==========================================================================
On Error Resume Next

Dim smsserver, platform, email
Dim domainrole, ComSpec, diffdate, enddate, fso, filedate, SmsClient, returncode, Results
Dim ISmsClient, DiscoveredSite, AssignedSite
Dim servicename, startdate, strMessage, strSMSPolEval, windir, wmi, colItems, wShShell, Compname, present, objShare
Dim BitsVersion, tempdir, logfile, logsize

Set WshShell = WScript.CreateObject("WScript.Shell")
WinDir = WshShell.ExpandEnvironmentStrings("%windir%")
Compname = WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
ComSpec = WshShell.ExpandEnvironmentStrings("%COMSPEC%")
tempdir = WshShell.ExpandEnvironmentStrings("%temp%")

'Set up the loggong
Set fso = CreateObject("Scripting.FileSystemObject")
Set logfile = fso.OpenTextFile(tempdir & "\SCCM_Client_Health_Check.Log",2,True)



logfile.writeline "####################################"
logfile.writeline "Begining SCCM Client Health Check Script"
logfile.writeline "####################################"

'********************************************************HARD CODED COMMAND LINE

OVERRIDES********************************************************
'***********************************************************UNCOMMENT ONLY IF

NECESSARY***********************************************************
'smsserver = "smsserver" 'Should reflect the PMP/PDP for each office
'platform = "" 'No need to modify
'Email = "wphillips@company.com" 'Should be set to go to an alias that includes the needed peoeple.
'********************************************************HARD CODED COMMAND LINE

OVERRIDES********************************************************
'***********************************************************UNCOMMENT ONLY IF

NECESSARY***********************************************************
checkSCCMserverCMD()
checkPlatformCMD()
checkEmailCMD()
checkEmail1CMD()
checkAdminShare()
checkCCMSetupRunning()
checkClient()
checkLogsUpdate()
checkBITSversion()
checkServices()
checkAssignment()
logfile.writeline "Cleaning Up"
Call Cleanup
logfile.writeline "Ending Processing"
WScript.Quit


'Check to see if SCCM server is specifed as an argument or hardcoded into script
Function checkSCCMserverCMD()
On Error Resume Next
If smsserver = "" Then
If Wscript.Arguments.Named.Exists("smsserver") Then
If Wscript.Arguments.Named("smsserver") <> "" Then
logfile.writeline "smsserver specified in command line is " & WScript.Arguments.Named("smsserver")
Else
logfile.writeline "/smsserver parameter is the incorrect format. Please see documentation"
WScript.Quit
End If
Else
logfile.writeline "Missing /smsserver: in command line"
WScript.Quit
End If
Else
logfile.WriteLine "The SCCMserver hardcoded command line override specified as = " & smsserver
End If
End Function

Function checkPlatformCMD()
On Error Resume Next
logfile.writeline "CheckingPlatformCMD"
If platform = "" Then
domainrole = GetDomainRole()
If Wscript.Arguments.Named.Exists("platform") Then
If Wscript.Arguments.Named("platform") <> "" Then
platform = Wscript.Arguments.Named("platform")
logfile.WriteLine "platform = " & platform
If Not CInt(platform) = CInt(domainrole) Then
logfile.WriteLine "System running is not the correct platform as specified"
WScript.Quit
End If
End If
End If
Else
logfile.WriteLine "platform hardcoded command line override specified as = " & platform
domainrole = GetDomainRole()
If Not CInt(Platform) = CInt(domainrole) Then
logfile.WriteLine "System running is not the correct platform as specified"
WScript.Quit
End If
End If
End Function

Function checkEmailCMD()
On Error Resume Next
logfile.WriteLine "Inside checkEmailCMD"
If email = "" Then
If WScript.Arguments.Named.Exists("email") Then
email = True
logfile.WriteLine ("Email command line argument specified as = " & WScript.Arguments.Named("email"))
End If
Else
logfile.WriteLine ("Email hardcoded command line override specified as = " & email)
email = True
End If
End Function
Function checkEmail1CMD()
On Error Resume Next
logfile.WriteLine "Inside checkEmail1CMD"
If email1 = "" Then
If WScript.Arguments.Named.Exists("email1") Then
email1 = True
logfile.WriteLine ("Email1 command line argument specified as = " & WScript.Arguments.Named("email1"))
End If
Else
logfile.WriteLine ("Additional email hardcoded command line override specified as = " & email)
email1 = True
End If
End Function


Function checkAdminShare()
On Error Resume Next
logfile.WriteLine "Inside checkAdminShare"
'Check for Admin$ - If not present then log
Set wmi = getobject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colItems = wmi.ExecQuery("Select * From Win32_Share",,48)
present = "FALSE"
For Each objShare In colItems
If LCASE(objShare.Name) = "admin$" Then
present = "TRUE"
End If
Next
If present <> "TRUE" Then
If Email = True Then
logfile.writeline "Sending email that Admin$ is missing"
Call EmailMessage("Admin$ Missing", Compname & " does not have an Admin$.")
Else
logfile.writeline "Admin$ is missing."
End If
End If
End Function

Function checkCCMSetupRunning()
On Error Resume Next
logfile.writeline "Inside checkCCMSetupRunning"
'Abort if ccmsetup running
Results = ServiceState("ccmsetup")
If LCase(Results) = LCase("Running")Then
logfile.writeline "Sending email that ccmsetup service is running and script is aborting"
Call EmailMessage("Aborting Client Installation", "ccmsetup is running on " & CompName)
WScript.Quit

logfile.writeline "Exiting script processing because ccmsetup service is running"
WScript.Quit

Elseif LCase(Results) = LCase("Stopped")Then
logfile.WriteLine "ccmsetup service is in a stopped state, attempting to start"
KickService("ccmsetup")
End If
End Function

Function checkBITSrunning()
On Error Resume Next
logfile.writeline "Inside checkBITSRunning"
'Start BITS running
Results = ServiceState("BITS")
If LCase(Results) = LCase("Running")Then
logfile.writeline "BITS is running"

Else
logfile.WriteLine "BITS service is in a stopped state, attempting to start"
KickService("BITS")
End If
End Function

Function checkClient()
On Error Resume Next
logfile.writeline "Inside checkClient"
' SMS Client COM object available, Version Installed, & WMI Namespace available
Set SmsClient = GetObject("winmgmts:ROOT/CCM:SMS_Client=@")
If Err Then
'Advanced client not installed
logfile.writeline "Advanced Client not installed, calling AdvCliInst to install the client"
Call AdvCliInst(ComSpec)
WScript.Sleep 1000
Call Cleanup
WScript.Quit
Else
logfile.writeline SmsClient.ClientVersion
Select Case SmsClient.ClientVersion
'IMPORTANT! >>>>>>>>> Adjust CASE as necessary, but do *not* remove it! <<<<<<<<IMPORTANT!
'Alter this by adding an additional CASE statement followed by the version in quotes for each SMS client
'version which is allowed in the hierarchy. This can also be used as an additional cleanup method after
'upgrading clients for those that might have missed this via software distribution
'Case "2.50.3174.1018"
'Case "2.50.4160.2000" 'SP2 Version
Case "4.00.6221.1000" 'configMGR sp1 client
logfile.writeline "SMS Client Version Passed"
WScript.Sleep 1
Case Else
logfile.writeline "Calling AdvCliInst routine to install SMS Advanced client"
Call AdvCliInst(ComSpec)
WScript.Sleep 1000
Call Cleanup
WScript.Quit
End Select
End If
End Function

Function checkLogsUpdate()
On Error Resume Next
Set SmsClient = GetObject("winmgmts://./root/ccm:SMS_Client")
' SMS Logs recently updated
logfile.writeline "Begining to evaluate " & windir & "\system32\CCM\Logs\PolicyEvaluator.log"
strSMSPolEval = windir & "\system32\CCM\Logs\PolicyEvaluator.log"
startdate = ShowFileAccessInfo(strSMSPolEval, Compname)
logfile.writeline "startdate = " & startdate
enddate = date()
logfile.writeline "enddate = " & enddate

If isDate(startdate) Then
diffdate = DateDiff("d", startdate, enddate)
logfile.writeline "diffdate = " & diffdate
End If

If diffdate > 21 Then
If Email = True Then
logfile.writeline "diffdate is greater than 21 days, sending email"
Call EmailMessage("Log files are out of date", Compname & " has not updated is logs in 21 days or more - attempting client repair")
End If
logfile.writeline "diffdate is greater than 21 days, attempting to repair SMS Client"
smsClient.RepairClient
wscript.quit
End If
End Function

Function checkBITSversion()
On Error Resume Next
'Check BITS version, email if out of date
logfile.writeline "Checking BITS version by looking at " & windir & "\system32\QMgr.dll"
If fso.FileExists(windir & "\system32\QMgr.dll") Then
BitsVersion = fso.GetFileVersion(windir & "\system32\QMgr.dll")
logfile.writeline "BitsVersion is " & BitsVersion
Select Case BitsVersion

' Case for Windows 2000 Server and Pro
Case "6.6.2600.1596"
logfile.writeline "BitsVersion Passed"
WScript.Sleep 1

' Case for Windows XP SP2
Case "6.7.2600.3143"
logfile.writeline "BitsVersion Passed"
WScript.Sleep 1

' Case for Windows XP SP3
Case "6.7.2600.5512"
logfile.writeline "BitsVersion Passed"
WScript.Sleep 1

' Case for Server 2003 SP1
Case "6.6.3790.1830"
logfile.writeline "BitsVersion Passed"
WScript.Sleep 1

' Case for Server 2003 SP2
Case "6.6.3790.3959"
logfile.writeline "BitsVersion Passed"
WScript.Sleep 1

' Case for Vista
Case "7.0.6000.16386"
logfile.writeline "BitsVersion Passed"
WScript.Sleep 1

' Case for Server 2008 SP1
Case "7.0.6001.18000"
logfile.writeline "BitsVersion Passed"
WScript.Sleep 1


' Case for failure
Case Else
If Email = True Then
logfile.writeline "BITS is out of date, sending email"
Call EmailMessage("BITS out of date", Compname & " - BITS version is at " & BitsVersion)
Else
logfile.writeline "BITS is out of date, exiting script processing"
WScript.Quit
End If
End Select
Else
If Email = True Then
logfile.writeline "Unable to process BITS version because " & windir & "\system32\QMgr.dll is missing. Sending email."
Call EmailMessage("File Missing", "%system32%\QMgr.dll" & " is missing on " & Compname)
Else
logfile.writeline "Unable to process BITS version because " & windir & "\system32\QMgr.dll is missing. Exiting Script processing."
WScript.Quit
End If
End If
End Function

Function checkServices()
On Error Resume Next
' SMS Agent Host Service started
logfile.writeline "Calling KickService"
Call KickService("CcmExec")

' Remote Registry Service started
logfile.writeline "Calling RemoteRegistry"
Call KickService("RemoteRegistry")
End Function

Function checkAssignment()
On Error Resume Next
'Ensure that the client is assigned to a site if its not assigned to any
logfile.writeline "Checking to make sure SMS Client has site assignment"
Set ISmsClient = CreateObject ("Microsoft.SMS.Client")
AssignedSite = ISmsClient.GetAssignedSite
If NOT Len(AssignedSite & "")>0 Then
logfile.writeline "Client is not assigned, attempting to AutoDiscover and set"
ISmsClient.EnableAutoAssignment 1
DiscoveredSite = ISmsClient.AutoDiscoverSite
ISmsClient.SetAssignedSite DiscoveredSite,0
logfile.writeline "Client is now assigned to " & ISmsClient.GetAssignedSite
End If
logfile.writeline "Client is already assigned to " & ISmsClient.GetAssignedSite
End Function




' =====================================================
' KickService function
' =====================================================
Function KickService(servicename)
On Error Resume Next
logfile.writeline "Inside KickService"
Dim Results, wmi, Service, returncode, Service2, Started
Results = ServiceState(servicename)
logfile.writeline "servicename = " & servicename
logfile.writeline "Results = " & Results
set wmi = getobject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

If NOT LCase(Results) = LCase("Running")Then
set Results = wmi.execquery("select state from win32_service where name='" & servicename & "'")
For Each Service In Results
' Start service
returncode = Service.StartService
logfile.writeline "returncode = " & returncode
if returncode <> 0 Then
If Email = True Then
logfile.writeline "SMS Client Service Failure " & servicename & " failed to start on " & CompName
Call EmailMessage("Start Service Error", "SMS Client Service Failure " & servicename & " failed to start on " & CompName)
Call Cleanup
logfile.writeline "Quiting Script"
WScript.Quit
Else
logfile.writeline "Displaying message to user - Error starting service your Windows Management Service (" & servicename & ") -

Call The Help Desk immediately"

msgbox "Error starting service your Windows Management Service (" & servicename & ") - Call The Help Desk immediately"
Call Cleanup
logfile.writeline "Quiting Script"
WScript.Quit
End If
end If
Do Until Started = True
'IMPORTANT! >>>>>>>>> Adjust sleep as necessary, but do *not* remove it! <<<<<<<<IMPORTANT!
logfile.writeline "Sleeping for 2 seconds..."
logfile.writeline "Use the below text to see how many times the script looped to start the Service"
WScript.Sleep 2000 'Sleep for 2 Seconds
set Results = wmi.execquery("select state from win32_service where name='" & servicename & "'")
for each Service2 In Results
if lcase(Service2.State) = lcase("Running") Then
logfile.writeline "Started = " & Started
Started = True
end If
Next
Loop
Next
End If
End Function
' =====================================================
' ServiceState subprocedure
' =====================================================
Function ServiceState(servicename)
On Error Resume Next
logfile.writeline "Inside ServiceState"
logfile.WriteLine "Checking " & servicename & " service"
Dim wmi, Results, Service, StateResults, StartMode
set wmi = getobject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
set Results = wmi.execquery("select state from win32_service where name='" & servicename & "'")
For Each Service In Results
StateResults = Service.State
logfile.writeline "StateResults = " & StateResults
Next
ServiceState = StateResults
End Function
' =====================================================
' AdvCliInst subprocedure
' =====================================================
Function AdvCliInst(ComSpec)
On Error Resume Next
logfile.writeline "Inside AdvCliInst"
logfile.WriteLine "Calling Bits Check"
objCurTime = Time()
objCurHour = Hour(objCurTime)
objCurMin = Minute(objCurTime)+5
objInstallTime = objCurHour & ":" & objCurMin
Call checkBITSrunning()
Dim smsinstall, WshShell, InstallArgs
Set WshShell = WScript.CreateObject("WScript.Shell")
ComSpec = WshShell.ExpandEnvironmentStrings("%COMSPEC%")
If ComSpec = "" Then
If Email = True Then
logfile.writeline "SMS Client Installation Failure", "The SMS Client failed to Install On " & CompName
Call EmailMessage("SMS Client Installation Failure", "The SMS Client failed to Install On " & CompName)
Call Cleanup
logfile.writeline "Exiting Script Processing"
WScript.Quit
Else
logfile.writeline "Displaying Message to user - Windows Management Service Installation Failed. Please contact The Help Desk"
MsgBox "Windows Management Service Installation Failed. Please contact The Help Desk"
Call Cleanup
logfile.writeline "Exiting Script Processing"
WScript.Quit
End If
Else
InstallArgs = ""
If Wscript.Arguments.Named.Exists("params") Then
If Wscript.Arguments.Named("params") <> "" Then
InstallArgs = Wscript.Arguments.Named("params")
logfile.writeline = "InstallArgs = " & InstallArgs
End If
End If
If Exist (Wscript.Arguments.Named("smsserver") & "\SMSClient\ccmsetup.exe") Then
'smsinstall = ComSpec & " /c \\" & Wscript.Arguments.Named("smsserver") & "\SMSClient\ccmsetup.exe" & InstallArgs
smsinstall = "at " & objInstallTime & " \\" & Wscript.Arguments.Named("smsserver") & "\SMSClient\ccmsetup.exe" & InstallArgs
logfile.writeline "Calling SCCM Client installation with below command line:"
logfile.writeline "smsinstall = " & smsinstall
' Run SMS Client Installation
Call EmailMessage("SMS Install", Compname & " -Installing SCCM Client as " & smsinstall)
WshShell.Run smsinstall,0,False
Else
logfile.WriteLine "Cannot Find SCCM client installer"
Call EmailMessage("SMS Installer Missing", Compname & " -" & Wscript.Arguments.Named("smsserver") & "\SMSClient\ccmsetup.exe")
End If

End If
End Function
' =====================================================
' GetDomainRole function
' =====================================================
Function GetDomainRole
On Error Resume Next
logfile.writeline "Inside GetDomainRole"
Dim domainroles, wmi, domainrole
Set wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set domainroles = wmi.ExecQuery("SELECT DomainRole FROM Win32_ComputerSystem")
For Each domainrole in domainroles
GetDomainRole = domainrole.DomainRole
logfile.writeline "GetDomainRole = " & GetDomainRole
Next
Set domainroles = Nothing
Set wmi = Nothing
End Function
' =====================================================
' EmailMessage subprocedure
' =====================================================
Function EmailMessage(Subject, Body)
On Error Resume Next
logfile.writeline "Inside EmailMessage"
logfile.writeline "Email Subject: " & Subject
logfile.writeline "Email Body: " & Body
Dim objEmail, objemailfrom
' email using a generic user account as system is being booted up and user may not have logged on yet
Set objEmail = CreateObject("CDO.Message")
objemailfrom = WScript.Arguments.Named("smsserver") & "@company.com"
objEmail.From = objemailfrom
objEmail.To = WScript.Arguments.Named("email")
objEmail.CC = WScript.Arguments.Named("email1")
' objEmail.To = "smsadmins@company.com"
objEmail.Subject = Subject
objEmail.Textbody = Body
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
"smtp.company.com"
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
logfile.writeline "Sending Email"
objEmail.Send
Set objEmail = Nothing
End Function
' =====================================================
' ShowFileAccessInfo function
' =====================================================
Function ShowFileAccessInfo(filespec, Compname)
On Error Resume Next
logfile.writeline "Inside ShowFileAccessInfo"
Dim fso, f, filespec_date, FSpace
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(filespec) Then
Set f = fso.GetFile(filespec)
logfile.writeline "f = " & f
filespec_date = f.DateLastModified
logfile.writeline "filespec_date = " & filespec_date
FSpace = Instr(filespec_date," ") - 1
logfile.writeline "FSpace = " & FSpace
ShowFileAccessInfo = Left(filespec_date,FSpace)
logfile.writeline "ShowFileAccessInfo = " & ShowFileAccessInfo
Else
If Email = True Then
logfile.writeline "File Missing - " & filespec & " is missing On " & Compname
Call EmailMessage("File Missing", filespec & " is missing On " & Compname)
logfile.writeline "Exiting Script Processing"
WScript.Quit
End If
End If
End Function
' =====================================================
' Destroy any objects
' =====================================================
Sub Cleanup
On Error Resume Next
logfile.writeline "Inside Cleanup"
Set WshShell = Nothing
Set ComSpec = Nothing
Set windir = Nothing
Set strCompName = Nothing
Set SmsClient = Nothing
End Sub
' =====================================================

Monday, September 1, 2008

Time to start over

This past week I found out that one of our management servers had sccm installed on the c:\ drive. You'd think there would be a setting to change the storage location so that the program could still run from c:\. Apparently there is no such option. Only option is a site uninstall and reinstall. Of course if you uninstall, you can't reuse the same site code. Doing so would have dire consequenses including corrupting the site database. Digging around I found a nice article by Anthony Clendenen on removing a secondary site in SMS 2003. The steps outlined by Anthony allow reusing the existing site code. I'd previously used this article to remove and reinstall a Primary 2003 site. After looking at some of the registry keys and file folders on my SCCM site install, I decided to try the same steps on my SCCM primary site. Guess what? It works! Here's the article:
http://www.myitforum.com/articles/8/view.asp?id=9472

Sunday, April 1, 2007

MMS 2007

Okay I haven’t posted in a while. I’m sorry. I had a couple of big events come up that took precedence. First I had to setup and administer the computers systems for a small conference (70+ machines). I decided against using SMS for this conference, so I took myself out of the SMS loop. The 2nd event was the Microsoft Management Summit (MMS 2007). This event is all about SMS and the upcoming Systems Center Family. The Systems Center family includes Operations Manager, Configuration Manager, Data Protection Manager, Essentials, Virtual Machine Manager, and Capacity Planner. System Center Configuration Manager is the important one here. It’s actually the next version of SMS. SMS v4 will officially be called Systems Center Configuration Manager (SCCM 2007).

At MMS 2007 I learned all about the cool features that SCCM 2007 will be providing. There are tons! If you haven’t yet, get Beta 2 of SCCM 2007. I will be installing it this week and giving a review of my experience. I can tell you that at the SMS 2003 to SCCM 2007 upgrade lab, the process was very easy. MMS 2007 has also convinced me to install SMS SP3 once it’s available. My original plans were to skip SP3 and wait for SCCM 2007. However the additional reports and collections regarding Vista has forced me to reconsider this decision. SP3 is now a must have for me.