WDS slow WINPE boot speed with SCCM 2012 and 2016

Default out-of-the-box booting on WinPE with SCCM 2012/2016 is quite slow; I’ve seen boot times up to 20 minutes.
This is because System Center Configuration Manager 2012/2016 uses small TFTP block sizes of 512 bytes.

This behavior is set because it’s compatible with all network configurations; but the result is that the PXE boot speed can be very slow using Operating System Deployment with SCCM.

Slow WINPE with SCCM

To increase the PXE boot speed, we need to modify TFTP Block Size.
In the registry editor:
Path :    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\DP
Name :  RamDiskTFTPBlockSize
Type :    REG_DWORD
Value :   16384 (decimal)

Change RamDisk TFTPBlockSize
16384 is the maximum supported value.
If it is bigger, you can have corrupted data.
However I recommend to do some test with values :
– 4096,
– 8192,
– 16384.
Depends on your network configuration, a lower value can be used.

Restart the Windows Deployment Services Service. (WDS)

Problem solved!

The location of SMSTS log files during SCCM OSD

The location of the SMSTS.log moves around depending on the phase in the deployment via SCCM/OSD.To troubleshoot this it’s important to know where the log files are located.

If you enable “Command Support” during the OSD you can press the F8 key during the OSD.

Before your hard drive is formatted and partitioned
x:\windows\temp\smstslog\smsts.log

After HDD format
x:\smstslog\smsts.log and then copied to c:\_SMSTaskSequence\Logs\Smstslog\smsts.log

You can check for the below three locations for smsts.log file after OSD and when the OS is installed.
Before SCCM agent installed
c:\_SMSTaskSequence\Logs\Smstslog\smsts.log

If Windows OS is 32-bit, after SCCM agent installed
c:\windows\system32\ccm\logs\Smstslog\smsts.log

If Windows OS is 64-bit, after SCCM agent installed
c:\windows\sysWOW64\ccm\logs\Smstslog\smsts.log

You can check for the below two locations for smsts.log file after the task sequence is complete.
If Windows OS is 32-bit, after Task Sequence has finished running
c:\windows\system32\ccm\logs\smsts.log

If Windows OS is 64-bit, after Task Sequence has finished  running
c:\windows\sysWOW64\ccm\logs\smsts.log

 

SCCM – Cannot edit the object, which is in use by ‘domain\SCCM-ADMIN’ at site P01

During the configuration of an OSD our SCCM 2016 console crashed and afterwards we suddenly found ourselves without any ability to make changes.

The error was “Cannot edit the object, which is in use by ‘domain\SCCM-ADMIN’ at site P01”.Locked screen
Because of the console crash SCCM still thinks that the object is being edited.
This is because ConfigMgr 2012/2016 handles editing of objects through something called “SEDO” or “Serialized Editing of Data Objects.”.
Locked objects can be found in the SEDO_LockState table in the ConfigMgr database.

You can locate the record in question by searching for LockStateID that’s not zero, or by the user ID that ConfigMgr says is editing the object (‘AssignedUser’).
On the database server run the following query against the CCM_01 database:
select * from SEDO_LockState where LockStateID <> 0

Locked in SCCM

Use the LockedID with the appropriate information to remove the record related to the object*.
DELETE from SEDO_LockState where LockID = ‘<LockID of the record identified in the previous query>’
ScreenHunter_66 Jul. 01 10.42
Once the record is removed, you should be able to modify the object.

 

Add or remove local user in SCCM 2012 OSD Task Sequence

Sometimes it is necessary to add of remove a local user to your Windows image (like notebooks which must be used at external locations). You can create an image for SCCM with local users, but then you have another image with a different configuration. I think it’s cool everything can be managed with just one image, so here is a small tip to add an user from the task sequence.

The command net user can be used to add a local user, or delete it:
Add user
net user username password /add

Delete user
net user username /delete

Look at http://support.microsoft.com/kb/251394 for the right parameters.

I want to delete a user account which was created during a manual image built.
net user username /delete

Next thing is to add the command line to the task sequence:
1. Edit the Task Sequence
2. Choose Add, General, Run Command Line
Note:
The user can’t be added as all steps in the Install Operating System group are executed in WinPE.
The creation of the user to the end of the TS, after setting up the SCCM client and after restoring the user data.
ScreenHunter_264 Dec. 10 11.21
3. Type or paste the command in the Command line: box

 

SCCM 2012 R2 client is stuck in provisioning mode

Today we experienced issues during a Windows 7 deployment. The customer had SCCM 2012 R2 with a Windows 7 OSD and everything seemed to run perfect, except we had the following issues:
– The SCCM client didn’t fully install – it remains in a Site Mode = Unknown 
– The client certificate was not assigned
– The _SMSTaskSequence folder created on C:\ was not removed

We’re deploying our images in a Greenfield scenario.

Configmanager Client error
-No client certificate installed

Provisioning Mode SCCM
 After some investigation we discovered that the SCCM client was still in provisioning mode.

Cause:
Just a little bug.
During a ConfigMgr 2012 R2 OSD Task Sequence, the ConfigMgr client is purposely placed in a provisioning mode. In this mode, the ConfigMgr client does not pick up policy from the MP. This is done so that advertised programs, software updates, and tasks targeted to existing client PCs do not run until the Task Sequence completes. If advertised programs, software updates, or tasks attempt to run while the Task Sequence runs it may interfere with the Task Sequence and cause it to fail.

A Reboot step in the OSD Task Sequence is accidentally set to restart into the WinPE boot image assigned to the Task Sequence instead of the full Windows OS. This will cause the Task Sequence to end in WinPE. Because the ConfigMgr client is actually installed as part of the full Windows OS and not WinPE, and because the Task Sequence ends in WinPE instead of the full Windows OS, it cannot properly take the ConfigMgr client out of provisioning mode.

Solution:
Right after the “Setup Windows and ConfigMgr” step, add two “Run Command Lines” to set the registry values correctly. Here are the two commands to be run:

REG ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CCM\CcmExec /v ProvisioningMode /t REG_SZ /d false /f
REG ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CCM\CcmExec /v SystemTaskExcludes /t REG_SZ /d “” /f

This forced the client from going out of provisioning mode.
Problem was fixed!

Detail monitoring SCCM 2012 OSD task sequence in the SCCM console

When rolling out OSD in SCCM 2012 R2, one of the major drawbacks is that there is no feedback on how the rollout of the task sequence is functioning accept in the log files. We can build this information in the reports, but the Status Messages is really the preferred place for this.

This article will guide you on how to create a Status Message Query for a Specific OSD like the example below:
OSD logging SCCM 2012 R2
Ok so let’s get started!

First you need to get the deployment ID of the Task Sequence you wish to monitor.
-Go to Monitoring, Overview, Deployments. (The Deployment ID are not displayed by default so you have to select this) and write down the DeploymentIDDeploymentID

Next we are going to build the Status Message Queries:
-Go to Monitoring, Overview, System Status, Status Message Queries, right click and choose Create Status Message Query.
-Give the Status Message Query a name, and click Edit Query Statement
Message Query SCCM 2012
-In the General Tab choose Show Query Language and paste in the following text;
Be sure to replace the collection ID into the one you looked up.

select
SMS_StatusMessage.*,
SMS_StatMsgInsStrings.*,
SMS_StatMsgAttributes.*,
SMS_StatMsgAttributes.AttributeTime
from SMS_StatusMessage
left join SMS_StatMsgInsStrings
on SMS_StatMsgInsStrings.RecordID = SMS_StatusMessage.RecordID
left join SMS_StatMsgAttributes
on SMS_StatMsgAttributes.RecordID = SMS_StatusMessage.RecordID
where SMS_StatMsgAttributes.AttributeID = 401 and SMS_StatMsgAttributes.AttributeValue = “P0120125
and SMS_StatMsgAttributes.AttributeTime >= ##PRM:SMS_StatMsgAttributes.AttributeTime## order by SMS_StatMsgAttributes.AttributeTime DESC

Query
-Click OK, and complete the wizard.
Now we’re ready to launch the Query:
-In the State Message, right click the query and select the date and time (default 1 hour ago), and click OK.
ScreenHunter_29 Apr. 16 14.26

 

Wel we are ready to monitor the deployment like we would expect!
OSD logging SCCM 2012 R2

 

 

 

 

17th October – Microsoft released Windows Server 2012 R2 & System Center 2012 R2

Today Microsoft released the newest release of the new R2 wave for the System Center suite.
The software is ready to download from the official Microsoft sites like Techned and MSDN.

System Center R2 Released

System Center R2 Released

The following links take you to the What’s New topics for System Center 2012 R2.

System Center 2012 R2 App Controller
System Center 2012 R2 Configuration Manager
System Center 2012 R2 Data Protection Manager
System Center 2012 R2 Operations Manager
System Center 2012 R2 Orchestrator
System Center 2012 R2 Service Manager
System Center 2012 R2 Virtual Machine Manager

Furthermore Windows 8.1 and Windows Server 2012 R2 are also released today and ready for download.

Install Software Packages in a OSD Task Sequence using variables

Issue:
When looking in SCCM implementations I regularly bump into the same issues. Lots of task sequences with a lot of different settings in them. Because of the exploding amount of task sequences there is a lot if differiation between them. This blog post describes how to use OSD variables to bring back the amount of sequences.

Let’s start,
This example is an school with student’s as well as teachers. They are divided into rooms by using the device collections. Depending on the (class) room they get the software they need.

First we start with creating a device collection for a room:
We are going to set the variables to the collections
– Go to Assets and Compliance, Device Collections, and choose Create Device Collection.
– Give the collection a name like “Classroom 141” and limit the collection to “All Collections
– Check Use incremental updates for this collection and turn off Schedule a full update on this collection.
– Choose Next, Yes and Finish the collection

Next we are going to set the collection variables
– Get the properties of the newly made collection, go to collection variables and fill in the following variables (depending on your structure)
Name                  Value
BSL                     Students Desktops
Domain                Students
OSDOUName       OU=R141,OU=Students Desktops,OU=Workstations,DC=students,DC=domain,DC=local

BSL1

 

1. Let’s install software based on a variable
Now we can add the variables to the software library

– Go to Software Library, Task Sequences and Edit an task sequence.
– We created a Install CSL Applications (Common Software Layer); this is for software that is scoped on all desktop (like Office, flash, Adobe Reader ETC)
– We also created an Install BSL Applications (Business Software Layer) for specific software per/pc/room
Add the software to the BSL and choose Options
Add Condition and choose Task Sequence Variable BSL equals “Students Desktops”

BSL 2

2. Let’s install sofware based on a variable

OK lets go a little bit further, we are now going to add the computer in the AD OU based in the computer variable of the collection.
– Go to the Network Settings, Apply Network settings and set Join a domain, fill in the domain name and in the OU part you choose LDAP://%OSDOUName% as stated in the variable.

Flexible Domain Name

Now we are going to set the options so the proper collection is selected.
– Go to Options, Add condition, Task Sequence Variable and choose Domain equals “Students”

Flexible Domain Name II

 

Little recap;
– Made device collections based on rooms
– Filled in the variables for that device collections
– Set options for installing software based on device collection variables
– Placed machines in the proper OU based on device collection variables

Simple as that!

System Center 2012 R2 Release Date (SCOM, SCCM)

In 2012 Microsoft made public that they are going to release new versions of their major products at least once per year.
Because of their cloud based service they develop much faster as in the past.

Microsoft has already evaluation versions of System Center R2 available to eligible customers.
But the official release  available through the TechNet Evaluation Center. System Center 2012 R2 is available from TechNet and for new purchases on November 1st, 2013.

There’s even more good news:
Microsoft announced that Windows 8.1 will be available to consumers and businesses worldwide on October 18, 2013.

 

Prerequisites for setting up SCCM 2012 R2 on Windows 2012 R2

When installing System Center Configuration Manager 2012 R2, there are a number of prerequisite steps which need to be taken before installing the software.
They seem simple but can take up a few day’s to finish. I just put them below so we can quickly start the SCCM installation.

VMWare
1. Change the E1000 NIC to VMXNET3 NIC this to avoid a lot of headache during the rest of the setup. See http://www.toolzz.com/?p=1085

Hyper-V
1. Change the default network to the Legacy Network Adapter. This to support WOL and PXE integration

Extend Active Directory Schema
1. Extend Active Directory Schema for SCCM 2012 Domain Controllers. Navigate to  \SMSSetup\Bin\x64\ and execute Extadsch.exe
2. Create the System Container and assign Permissions

Site Server Prerequisites
1. We are going to install a stand alone Primary Site Server. Therefore these roles are neccesary; this powershell script install’s it automaticly

This needs to turn on a elevated PowerShell (RunAs Administrator)

Get-Module servermanager
Install-WindowsFeature Web-Windows-Auth
Install-WindowsFeature Web-ISAPI-Ext
Install-WindowsFeature Web-Metabase
Install-WindowsFeature Web-WMI
Install-WindowsFeature BITS
Install-WindowsFeature RDC
Install-WindowsFeature NET-Framework-Features
Install-WindowsFeature Web-Asp-Net
Install-WindowsFeature Web-Asp-Net45
Install-WindowsFeature NET-HTTP-Activation
Install-WindowsFeature NET-Non-HTTP-Activ

There is a bug in the .NET framework 3.5
You need your Windows Installation media to do this.
dism /online /enable-feature /featurename:NetFX3 /all /Source:d:\sources\sxs /LimitAccess

SQL Server considerations
1. Install the Database Engine feature for each site server, Management Tools and Reporting Services
2. Use the SQL_Latin1_General_CP1_CI_AS collation server
3. Apply SP1 and CU4 or later
4. Change MSSQLServer.exe account in services to an domain user account (best practice) account
5. Open the SQL ports for incomming traffic (1433 and 4022) and reporting (80 and 443)
6. Limit SQLServer memory to 70 – 80% of the addressable memory if the SQL is in a dedicated Server. if the SQL is co-located with the Site Server computer limit the memory to 50 – 70%.

Prerequisites for SCCM
1. Prevent SCCM from installing Files on the OS Drive (C:\) by placing no_sms_on_drive.sms in the root of the C:\ folder
2. Install WSUS on the Windows 2012 R2 server with powershell. This because there are some issues in WSUS in combination with Windows 2012
Install-WindowsFeature -Name UpdateServices-Services,UpdateServices-DB -IncludeManagementTools
.\wsusutil.exe postinstall SQL_INSTANCE_NAME=”servername” CONTENT_DIR=”D:\Sources\WSUS\WSUS”
And
%programfiles%\update services\tools\wsusutil.exe postinstall CONTENT_DIR=D:\Sources\Wsus\WSUS SQL_INSTANCE_NAME=sqlservername
3. Do not configure WSUS
4. Install Windows ADK 8.1 download the new ADK to support Windows 8.1 and Server 2012 R2 from here
4. Install the ADK: User State Migration Tool (USMT), Windows Deployment Tools, Windows PreInstallation Environment (Windows PE)

start_button
That’s it, you can now start installing SCCM 2012 R2 !