widsnet.com
4Jul/110

Packages missing Binary Delta Replication

A report to show which packages is missing Binary Delta Replication checkbox.

SELECT PackageID, Manufacturer, Name, Version,
CASE
WHEN PkgFlags & 0x04000000 = 0x04000000 THEN 'Yes'
ELSE 'No'
END AS 'Use Binary Delta Rep'
FROM v_Package
WHERE PkgFlags & 0x04000000 != 0x04000000
AND PackageType = 0

PackageType

  • 0 Regular software distribution package.
  • 3 Driver package.
  • 4 Task sequence package.
  • 5 Software update package.
  • 6 Device setting package.
  • 257 Image package.
  • 258 Boot image package.
  • 259 Operating system install package.

PkgFlags

  • 0x01000000 (24) DO_NOT_DOWNLOAD. Do not download the package to branch distribution points, as it will be pre-staged.
  • 0x02000000 (25) PERSIST_IN_CACHE. Persist the package in the cache.
  • 0x04000000 (26) USE_BINARY_DELTA_REP. Marks the package to be replicated by distribution manager using binary delta replication.
  • 0x10000000 (28) NO_PACKAGE. The package does not require distribution points.
  • 0x20000000 (29) USE_SPECIAL_MIF. This value determines if Configuration Manager uses MIFName, MIFPublisher, and MIFVersion for MIF file status matching. Otherwise, Configuration Manager uses Name, Manufacturer, and Version for status matching. For more information, see the Remarks section later in this topic.
  • 0x40000000 (30) DISTRIBUTE_ON_DEMAND. The package is allowed to be distributed on demand to branch distribution points.

http://msdn.microsoft.com/en-us/library/cc146062.aspx

1Jul/110

Collection finder

A report to find the parents to a collection to be able to find the collection if you only have the name or ID.

SELECT
(SELECT Name FROM v_Collection WHERE CollectionID = COLLPARENT5ID.parentCollectionID) AS 'Parent 5',
(SELECT Name FROM v_Collection WHERE CollectionID = COLLPARENT4ID.parentCollectionID) AS 'Parent 4',
(SELECT Name FROM v_Collection WHERE CollectionID = COLLPARENT3ID.parentCollectionID) AS 'Parent 3',
(SELECT Name FROM v_Collection WHERE CollectionID = COLLPARENT2ID.parentCollectionID) AS 'Parent 2',
(SELECT Name FROM v_Collection WHERE CollectionID = COLLPARENT1ID.parentCollectionID) AS 'Parent 1',
COLL.Name AS 'Collection Name',
COLL.CollectionID AS 'CollectionID'

FROM v_Collection COLL
LEFT JOIN v_CollectToSubCollect COLLISPARENT ON COLL.CollectionID = COLLISPARENT.parentCollectionID
LEFT JOIN v_CollectToSubCollect COLLPARENT1ID ON COLL.CollectionID = COLLPARENT1ID.subCollectionID
LEFT JOIN v_CollectToSubCollect COLLPARENT2ID ON COLLPARENT1ID.parentCollectionID = COLLPARENT2ID.subCollectionID
LEFT JOIN v_CollectToSubCollect COLLPARENT3ID ON COLLPARENT2ID.parentCollectionID = COLLPARENT3ID.subCollectionID
LEFT JOIN v_CollectToSubCollect COLLPARENT4ID ON COLLPARENT3ID.parentCollectionID = COLLPARENT4ID.subCollectionID
LEFT JOIN v_CollectToSubCollect COLLPARENT5ID ON COLLPARENT4ID.parentCollectionID = COLLPARENT5ID.subCollectionID

WHERE CollectionID=@CollName

Prompt:

begin
   if (@__filterwildcard = '')
      SELECT DISTINCT CollectionID, Name FROM v_Collection ORDER BY Name
   else
      SELECT DISTINCT CollectionID, Name FROM v_Collection
      WHERE Name like @__filterwildcard
      ORDER BY Name
end
1Jul/110

Collection history

A report to show who created, modified or deleted a collection, and when.

SELECT SM.Time, SMIS.InsStrValue AS 'Collection',
CASE SM.MessageID
   WHEN 30015 THEN 'Created'
   WHEN 30016 THEN 'Modified'
   WHEN 30017 THEN 'Deleted'
END AS 'Message', SMA.AttributeValue AS 'By User', SM.MachineName AS 'From Computer'
FROM v_StatMsgInsStrings SMIS
LEFT JOIN v_StatMsgAttributes SMA on SMA.RecordID=SMIS.RecordID
LEFT JOIN v_StatusMessage SM on SM.RecordID=SMIS.RecordID
WHERE SMIS.RecordID in (SELECT RecordID FROM v_StatMsgAttributes WHERE AttributeValue=@CollectionID)
      AND SMA.AttributeID=403 AND SMIS.InsStrIndex > 1 AND SM.MessageID in (30015, 30016, 30017)
ORDER BY SM.Time desc

Prompt:

begin
   if (@__filterwildcard = '')
      SELECT DISTINCT CollectionID, Name FROM v_Collection ORDER BY Name
   else
      SELECT DISTINCT CollectionID, Name FROM v_Collection
      WHERE Name like @__filterwildcard
      ORDER BY Name
end
1Jul/110

Packages missing on DP and referenced by TS

A report to show all packages that are targeted to a distribution point bur aren't there yet, for some reason, and are referenced by a specific Task Sequence.

SELECT ps.PackageID, ps.SiteCode,
SUBSTRING(ps.ServerNALPath, CHARINDEX('\\', ps.ServerNALPath), CHARINDEX('"]',    ps.ServerNALPath) - CHARINDEX('\\',
     ps.ServerNALPath)) AS ServerNALPath,
ps.SourceVersion, ps.State, ps.LastCopied, ps.SummaryDate,
ps.InstallStatus, p.Manufacturer, p.Name
FROM
     (
         SELECT DISTINCT v_TaskSequenceReferencesInfo.ReferencePackageID AS PackageID
         FROM v_TaskSequenceReferencesInfo
         WHERE v_TaskSequenceReferencesInfo.PackageID=@TaskSequenceID
     ) RefPkgs
JOIN v_PackageStatusDistPointsSumm ps ON ps.PackageID=RefPkgs.PackageID
JOIN v_Package p ON p.PackageID=ps.PackageID
WHERE ps.InstallStatus!='Package Installation complete'
ORDER BY ps.PackageID

Prompts:

BEGIN
 IF (@__filterwildcard = '')
  SELECT PackageID AS TaskSequenceID, Name, Description FROM v_TaskSequencePackage
  ORDER BY Name
 ELSE
  SELECT PackageID AS TaskSequenceID, Name, Description FROM v_TaskSequencePackage
  WHERE PackageID LIKE @__filterwildcard
  ORDER BY Name
END
30Jun/110

Update distribution points on a schedule vbscript

A script to set a "Update distribution point on a schedule" on several PackageIDs to a single non recurring date and time. Doing like this to avoid distributing production packages under working hours. And scripting it since I need to update around 150 packages.

Const STORAGE_DIRECT = 2

strSMSServer = "server"
strSMSSiteCode = "CEN"
arrPackageID = Array("CEN00001", "CEN00002", "CEN00003")
strUpdateDay = "2011-07-01"
strUpdateTime = "01:00"
strWMIDate = replace(strUpdateDay, "-", "") & Replace(strUpdateTime, ":", "") & "00.000000+***"

Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSMSConnection = objLocator.ConnectServer(strSMSServer, "root\sms\site_" & strSMSSiteCode)
WScript.Echo "Date and Time: " & strUpdateDay & " " & strUpdateTime
For Each strPackageID In arrPackageID
	setNonRecurringUpdateSchedule objSMSConnection, strPackageID, strWMIDate
Next

Sub setNonRecurringUpdateSchedule(objSMSConnection, strPackageID, strWMIDate)
	Set Token = objSMSConnection.Get("SMS_ST_NonRecurring")
	Token.DayDuration = 0
	Token.HourDuration = 0
	Token.MinuteDuration = 0
	Token.IsGMT = 0
	Token.StartTime = strWMIDate

	setUpdateSchedule objSMSConnection, strPackageID, Token
End Sub

Sub setUpdateSchedule(objSMSConnection, strPackageID, Token)
	Set colPkg = objSMSConnection.ExecQuery("Select * from SMS_Package where PackageID='" & strPackageID & "'")
	If colPkg.Count = 1 Then
		Set objPackage = objSMSConnection.Get("SMS_Package.PackageID='" & strPackageID & "'")
		If objPackage.PkgSourceFlag = STORAGE_DIRECT Then
			objPackage.RefreshSchedule = Array(Token)
			objPackage.Put_
			WScript.Echo strPackageID & " Software Package updated"
		Else
			WScript.Echo strPackageID & " Software Package not using STORAGE_DIRECT!"
		End If
	Else
		Set colPkg = objSMSConnection.ExecQuery("Select * from SMS_DriverPackage where PackageID='" & strPackageID & "'")
		If colPkg.Count = 1 Then
			Set objPackage = objSMSConnection.Get("SMS_DriverPackage.PackageID='" & strPackageID & "'")
			If objPackage.PkgSourceFlag = STORAGE_DIRECT Then
				objPackage.RefreshSchedule = Array(Token)
				objPackage.Put_
				WScript.Echo strPackageID & " Driver Package updated"
			Else
				WScript.Echo strPackageID & " Software Package not using STORAGE_DIRECT!"
			End If
		Else
			WScript.Echo strPackageID & " Package not found!"
		End If
	End If
End Sub