How to – IPU Collections

, ,

In this blogpost we will cover some of the logic for how we are handling the IPU. In order to create the “Compat Scan Passed” collection you are not able to use the “Drop down” actions to create this so you might not know how to do it. We are first going to assume that you have already extended client settings to absorb Nomad Cache job.

 

Compat Scan Passed Collection:

select SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.Name,
SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup,
SMS_R_SYSTEM.Client from SMS_R_System inner join
SMS_G_System_OPERATING_SYSTEM on SMS_G_System_OPERATING_SYSTEM.ResourceID = SMS_R_System.ResourceId
inner join SMS_ClassicDeploymentAssetDetails on SMS_ClassicDeploymentAssetDetails.DeviceID =
SMS_R_System.ResourceId    where SMS_G_System_OPERATING_SYSTEM.Version = “10.0.10586”
and SMS_G_System_OPERATING_SYSTEM.OSLanguage = 1033    and SMS_ClassicDeploymentAssetDetails.PackageID = ‘XXXXXXXX’
and SMS_ClassicDeploymentAssetDetails.StatusDescription = “-1047526896”

NOTES: This collection will produce a syntax error but trust me it works! My where statements basically OS = Win10 v1511, the language is English (1033), fill in your own PackgeID, and the exit code is compat scan pass!. You can use this format in your environment if needed.

 

Nomad Cached Content Collection:

select SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.Name,

SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup,
SMS_R_SYSTEM.Client from SMS_R_System   inner join SMS_G_System_COMPUTER_SYSTEM on SMS_G_System_COMPUTER_SYSTEM.ResourceID = SMS_R_System.ResourceId
where SMS_G_System_COMPUTER_SYSTEM.Model = “Latitude 5289”
and SMS_R_System.ResourceId in (select SMS_R_System.ResourceId from  SMS_R_System inner join SMS_G_System_1E_NomadPackages_1_0 on SMS_G_System_1E_NomadPackages_1_0.ResourceId = SMS_R_System.ResourceId where SMS_G_System_1E_NomadPackages_1_0.PackageID = “XXXXXXXX” and SMS_G_System_1E_NomadPackages_1_0.OptInfo = “Completed”)
and SMS_R_System.ResourceId in (select SMS_R_System.ResourceId from  SMS_R_System inner join SMS_G_System_1E_NomadPackages_1_0 on SMS_G_System_1E_NomadPackages_1_0.ResourceId = SMS_R_System.ResourceId where SMS_G_System_1E_NomadPackages_1_0.PackageID = “XXXXXXXX” and SMS_G_System_1E_NomadPackages_1_0.OptInfo = “Completed”)

NOTE: Also for this collection add any item that you have pre-cached by modifying the where statement. In my example I have a specified model + only 2 packages that are pre-cached. In my production collections I have 19 packages I need pre-cached so it’s just easy to show you a few items.

 

SQL Track Individual System For Required Cached Content For IPU:

SELECT DISTINCT

sys.Name0 as ‘Computer Name’

,CS.Model0

,sys.User_Name0 as ‘Last User’

,U.mail0 as ‘Email’

,CS.Manufacturer0 as ‘Manufacturer’

,CS.Model0 as ‘Model’

,OS.Caption0 as ‘Operating System’

,OS.BuildNumber0

, case

OS.BuildNumber0

WHEN ‘10586’ THEN ‘Win10 v1511’

WHEN ‘14393’ THEN ‘Win10 v1607’

WHEN ‘15063’ THEN ‘Win10 v1703’

END AS [OS Version]

,PR.AddressWidth0 as ‘OS Architecture’

,WKS.LastHWScan

,nm.AlreadyCached00

,nm.BytesFromDP00

,nm.BytesFromPeer00

,nm.OptInfo00

,pkg.Name

,nm.PackageID00

,nm.Percent00

FROM v_R_System sys

Full Outer join v_FullCollectionMembership FM ON FM.ResourceID = sys.ResourceID

Full Outer join v_GS_PC_BIOS BIOS ON BIOS.ResourceID = sys.ResourceID

Full Outer join v_GS_COMPUTER_SYSTEM CS ON CS.ResourceID = sys.ResourceID

Full Outer join v_GS_WORKSTATION_STATUS WKS ON WKS.ResourceID = sys.ResourceID

Full Outer join v_GS_OPERATING_SYSTEM OS on OS.ResourceID = sys.ResourceID

Full Outer join v_GS_PROCESSOR PR on PR.ResourceID = sys.ResourceID

Full Outer JOIN v_R_User u on u.User_Name0 = sys.User_Name0

Full Outer join v_GS_SYSTEM_ENCLOSURE se on se.ResourceID=sys.ResourceID

Full Outer join _E_NomadPackages_DATA nm on nm.MachineID=sys.ResourceID

Full Outer join v_Package PKG on pkg.PackageID = nm.PackageID00

WHERE sys.name0 = ‘HOSTNAME’

and nm.packageID00 in (‘XXX00B8A’,‘XXX00B81’,‘XXX00AB3’,‘XXX00AB2’,‘XXX00AB6’,‘XXX00AD7’)

 

NOTE: Make sure to modify your where statement with all the possible packages a system in your IPU collection will need. For my production environment once A system registers saying it has 19 packages then I know It is ready to be upgraded. I also reccoment adding a little section where it says what each package iD is I have that in my query but is not posted here.

 

note: If WordPress reformats the queries let me know so I can work on getting that fixed! I may update this blogpost to include more screenshots if anybody has any problems.

SCCM 2012 R2 SP1 failed upgrade

, , , ,

This was a project that occurred over a year ago so forgive me for missing a few screenshots. The customer site was preparing for a windows 10 migration by moving SCCM to a level to be supported. This was moving from SCCM 2012 R2 to SCCM 2012 R2 SP1.

Pre upgrade tasks:
– back up site servers the night before via maintenance task
– take snap shot of CAS / Primaries
– restart server and stop key sccm services from running (we disabled maintenance tasks, and deployments as well)
– Restore site database to SQL server running the same version as our SQL instance.

During the upgrade
– Successful SCCM Database upgrade
– Successful pre-req checks
– failed configmgr upgrade

There is where the wizard produced the error about a hash mismatch on MSRDCOOB_AMD63.exe that I forgot to take a screenshot of, but I do have an excerpt of the log file. During this step of the process updated files are being copied and replaced into the program files directory on your site server. When I looked at the wizards error message on face value it made me believe my download was somehow corrupted as I am always quick to suspect HBSS lol. It wasn’t until I read the few lines below in the ccmfigmgrsetup.log that I realized it was a permissions issue.

Error #1 Configmgrsetup.log
Failed to copy \CASd$FOR UPGRADEUPDATES FOR UPGRADEmsrdcoob_amd64.exe to d:program filesmicrosoft configuration managerclientx64msrdcoob_amd64.exe, Win32 error = 5
– ERROR: Failed to delete file d:program filesmicrosoft configuration managerclientx64msrdcoob_amd64.exe, Win32 error = 5

The initial implementation of SCCM years before I inherited the environment was performed with a service account that was not any longer in use. I quickly then took ownership of the folder and reset permissions. After the permissions were corrected I restarted the wizard and ran into another error.

Error #2 Configmgrsetup.log

ERROR: SQL Server error: [42S02][208][Microsoft][SQL Server Native Client 11.0][SQL Server]Invalid object name ‘UpgradeViewMapping’. : spHandleDviewUpgrade
– ERROR: Failed to execute query: spHandleDviewUpgrade

This particular message occurred b/c the earlier run of the upgrade had already made it past the successful upgrade of the database and the stored procedure mentioned “spHandleDviewUpgrade” already deleted a key table needed.

In order to fix this you must run perform 2 actions.

The first is to run this SQL query on your database

GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[UpgradeViewMapping](

[TmpViewName] [nchar](10) NULL,

[ViewName] [nchar](10) NULL,

[ViewType] [nchar](10) NULL

) ON [PRIMARY]
GO

The second is to delete the perf_msg.dll and smsperf.dll in the c:windowssystem32 folder because otherwise the setup will fail again.

Once these actions were completed the upgrade to R2 SP1 went successful.

Take away: the pre-req checker doesn’t exactly check everything like permissions to key folders and be prepared to do sql work.