I recently wrote some VBScript code to be used in connecting to the Provider on a ConfigMgr 2007 site in order to manipulate the various radio buttons and checkboxes on the different tabs of the Advertisement Properties dialog box. Several of the settings are controlled by RemoteClientFlags and AdvertFlags properties in the SMS_Advertisement WMI class.
It is always helpful to refer to the SMS_Advertisement Server WMI Class page found at https://msdn.microsoft.com/en-us/library/cc146108.aspx. That page contains a lot of great information about the different values. It is part of a larger library of information that is very helpful in scripting against the SMS Provider. But while the information is very helpful, I really wanted an easier way to look at which flags were set in the RemoteClientFlags (RCF) and AdvertFlags (ADV) properties.
So I wrote a little script. The script evaluates all of the adverts configured on a site server and outputs them to a file that lists the property, the hex value, and the flag (bit) description. The output format starts with the Advertisement Name followed by a list of the flags. As shown below, each line contains the data/time stamp, RCF or ADV to indicate which property the flag is part of, the bit for each flag, the flag description, and a 1 or 0 to indicate if it is set or not.
Below is an example log for an advertised task sequence:
3/6/2012 10:02:08 AM ————————————————-
3/6/2012 10:02:08 AM TS Advert 4
3/6/2012 10:02:08 AM ————————————————-
3/6/2012 10:02:08 AM RCF3: RUN_FROM_LOCAL_DISPOINT: 0
3/6/2012 10:02:08 AM RCF4: DOWNLOAD_FROM_LOCAL_DISPOINT: 0
3/6/2012 10:02:08 AM RCF5: DONT_RUN_NO_LOCAL_DISPOINT: 0
3/6/2012 10:02:08 AM RCF6: DOWNLOAD_FROM_REMOTE_DISPOINT: 0
3/6/2012 10:02:08 AM RCF7: RUN_FROM_REMOTE_DISPOINT: 0
3/6/2012 10:02:08 AM RCF8: DOWNLOAD_ON_DEMAND_FROM_LOCAL_DP: 1
3/6/2012 10:02:08 AM RCF9: DOWNLOAD_ON_DEMAND_FROM_REMOTE_DP: 1
3/6/2012 10:02:08 AM RCF10: BALLOON_REMINDERS_REQUIRED: 0
3/6/2012 10:02:08 AM RCF11: RERUN_ALWAYS: 0
3/6/2012 10:02:08 AM RCF12: RERUN_NEVER: 1
3/6/2012 10:02:08 AM RCF13: RERUN_IF_FAILED: 0
3/6/2012 10:02:08 AM RCF14: RERUN_IF_SUCCEEDED: 0
3/6/2012 10:02:08 AM ADV5: IMMEDIATE: 0
3/6/2012 10:02:08 AM ADV8: ONSYSTEMSTARTUP: 0
3/6/2012 10:02:08 AM ADV9: ONUSERLOGON: 0
3/6/2012 10:02:08 AM ADV10: ONUSERLOGOFF: 0
3/6/2012 10:02:08 AM ADV15: WINDOWS_CE: 0
3/6/2012 10:02:08 AM ADV17: DONOT_FALLBACK: 0
3/6/2012 10:02:08 AM ADV18: ENABLE_TS_FROM_CD_AND_PXE: 0
3/6/2012 10:02:08 AM ADV20: OVERRIDE_SERVICE_WINDOWS: 0
3/6/2012 10:02:08 AM ADV21: REBOOT_OUTSIDE_OF_SERVICE_WINDOWS: 0
3/6/2012 10:02:08 AM ADV22: WAKE_ON_LAN_ENABLED: 1
3/6/2012 10:02:08 AM ADV23: SHOW_PROGRESS: 0
3/6/2012 10:02:08 AM ADV25: NO_DISPLAY: 0
3/6/2012 10:02:08 AM ADV26: ONSLOWNET: 0
With this script it is easy to see which flags are set. Manually change things in the Advertisement Properties dialog and re-running the script allow you to see what flags change and can help with seeing which flags are associated with each item. This script outputs the flags set for every advert, but it can be easily modified to limit the logging to specific advertisements. By default the log is written to C:\Windows\Temp\FlagEval.log
Once you know what flags you want to set or clear you simply refer to the bit as 2^# (where the bit # is identified in the FlagEval log). For example, to enable Wake on LAN for a package you would add 2^22 to the AdvertFlags property of the package’s instance in the SMS_Advertisement class.
I am going to post the script here, but first you should know that you have to be careful when using a script to set values in the SMS Provider involves Lazy Properties. That’s a topic for another day 🙂
FlagEval.vbs
' 1E Ltd Copyright 2012 ' ' Disclaimer: ' Your use of this script is at your sole risk. This script is provided "as-is", without any warranty, whether express ' or implied, of accuracy, completeness, fitness for a particular purpose, title or non-infringement, and is not ' supported or guaranteed by 1E. 1E shall not be liable for any damages you may sustain by using this script, whether ' direct, indirect, special, incidental or consequential, even if it has been advised of the possibility of such damages. Option Explicit Dim strComputer, strLogText, strLogFile, strTempdir, xLocation, colItems, WshShell Dim objWMIService, objItem, objSWbemLocator, objProviderLocation, objFSO Set objFSO = CreateObject("Scripting.FileSystemObject") Set WshShell = WScript.CreateObject("WScript.Shell") strTempdir = WshShell.ExpandEnvironmentStrings("%systemroot%") & "\temp\" strComputer = "." Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") Set objWMIService = objSWbemLocator.ConnectServer(strComputer, "root\sms") Set objProviderLocation = objWMIService.InstancesOf("SMS_ProviderLocation") For Each xLocation In objProviderLocation If xLocation.ProviderForLocalSite = True Then Set objWMIService = objSWbemLocator.ConnectServer(xLocation.Machine, "root\sms\site_" + xLocation.SiteCode) Exit For End If Next If objFSO.FileExists(strTempdir & "FlagEval.log") Then objFSO.DeleteFile(strTempdir & "FlagEval.log") Set colItems = objWMIService.ExecQuery("SELECT * FROM SMS_Advertisement") For Each objItem in colItems WriteLog("-------------------------------------------------") WriteLog(objItem.AdvertisementName) WriteLog("-------------------------------------------------") If objItem.RemoteClientFlags AND 2^3 Then WriteLog("RCF3: RUN_FROM_LOCAL_DISPPOINT: 1") Else WriteLog("RCF3: RUN_FROM_LOCAL_DISPPOINT: 0") End If If objItem.RemoteClientFlags AND 2^4 Then WriteLog("RCF4: DOWNLOAD_FROM_LOCAL_DISPOINT: 1") Else WriteLog("RCF4: DOWNLOAD_FROM_LOCAL_DISPOINT: 0") End If If objItem.RemoteClientFlags AND 2^5 Then WriteLog("RCF5: DONT_RUN_NO_LOCAL_DISPPOINT: 1") Else WriteLog("RCF5: DONT_RUN_NO_LOCAL_DISPPOINT: 0") End If If objItem.RemoteClientFlags AND 2^6 Then WriteLog("RCF6: DOWNLOAD_FROM_REMOTE_DISPPOINT: 1") Else WriteLog("RCF6: DOWNLOAD_FROM_REMOTE_DISPPOINT: 0") End If If objItem.RemoteClientFlags AND 2^7 Then WriteLog("RCF7: RUN_FROM_REMOTE_DISPPOINT: 1") Else WriteLog("RCF7: RUN_FROM_REMOTE_DISPPOINT: 0") End If If objItem.RemoteClientFlags AND 2^8 Then WriteLog("RCF8: DOWNLOAD_ON_DEMAND_FROM_LOCAL_DP: 1") Else WriteLog("RCF8: DOWNLOAD_ON_DEMAND_FROM_LOCAL_DP: 0") End If If objItem.RemoteClientFlags AND 2^9 Then WriteLog("RCF9: DOWNLOAD_ON_DEMAND_FROM_REMOTE_DP: 1") Else WriteLog("RCF9: DOWNLOAD_ON_DEMAND_FROM_REMOTE_DP: 0") End If If objItem.RemoteClientFlags AND 2^10 Then WriteLog("RCF10: BALLOON_REMINDERS_REQUIRED: 1") Else WriteLog("RCF10: BALLOON_REMINDERS_REQUIRED: 0") End If If objItem.RemoteClientFlags AND 2^11 Then WriteLog("RCF11: RERUN_ALWAYS: 1") Else WriteLog("RCF11: RERUN_ALWAYS: 0") End If If objItem.RemoteClientFlags AND 2^12 Then WriteLog("RCF12: RERUN_NEVER: 1") Else WriteLog("RCF12: RERUN_NEVER: 0") End If If objItem.RemoteClientFlags AND 2^13 Then WriteLog("RCF13: RERUN_IF_FAILED: 1") Else WriteLog("RCF13: RERUN_IF_FAILED: 0") End If If objItem.RemoteClientFlags AND 2^14 Then WriteLog("RCF14: RERUN_IF_SUCCEEDED: 1") Else WriteLog("RCF14: RERUN_IF_SUCCEEDED: 0") End If ' ************************************** If objItem.AdvertFlags AND 2^5 Then WriteLog("ADV5: IMMEDIATE: 1") Else WriteLog("ADV5: IMMEDIATE: 0") End If If objItem.AdvertFlags AND 2^8 Then WriteLog("ADV8: ONSYSTEMSTARTUP: 1") Else WriteLog("ADV8: ONSYSTEMSTARTUP: 0") End If If objItem.AdvertFlags AND 2^9 Then WriteLog("ADV9: ONUSERLOGON: 1") Else WriteLog("ADV9: ONUSERLOGON: 0") End If If objItem.AdvertFlags AND 2^10 Then WriteLog("ADV10: ONUSERLOGOFF: 1") Else WriteLog("ADV10: ONUSERLOGOFF: 0") End If If objItem.AdvertFlags AND 2^15 Then WriteLog("ADV15: WINDOWS_CE: 1") Else WriteLog("ADV15: WINDOWS_CE: 0") End If If objItem.AdvertFlags AND 2^17 Then WriteLog("ADV17: DONOT_FALLBACK: 1") Else WriteLog("ADV17: DONOT_FALLBACK: 0") End If If objItem.AdvertFlags AND 2^18 Then WriteLog("ADV18: ENABLE_TS_FROM_CD_AND_PXE: 1") Else WriteLog("ADV18: ENABLE_TS_FROM_CD_AND_PXE: 0") End If If objItem.AdvertFlags AND 2^20 Then WriteLog("ADV20: OVERRIDE_SERVICE_WINDOWS: 1") Else WriteLog("ADV20: OVERRIDE_SERVICE_WINDOWS: 0") End If If objItem.AdvertFlags AND 2^21 Then WriteLog("ADV21: REBOOT_OUTSIDE_OF_SERVICE_WINDOWS: 1") Else WriteLog("ADV21: REBOOT_OUTSIDE_OF_SERVICE_WINDOWS: 0") End If If objItem.AdvertFlags AND 2^22 Then WriteLog("ADV22: WAKE_ON_LAN_ENABLED: 1") Else WriteLog("ADV22: WAKE_ON_LAN_ENABLED: 0") End If If objItem.AdvertFlags AND 2^23 Then WriteLog("ADV23: SHOW_PROGRESS: 1") Else WriteLog("ADV23: SHOW_PROGRESS: 0") End If If objItem.AdvertFlags AND 2^25 Then WriteLog("ADV25: NO_DISPLAY: 1") Else WriteLog("ADV25: NO_DISPLAY: 0") End If If objItem.AdvertFlags AND 2^26 Then WriteLog("ADV26: ONSLOWNET: 1") Else WriteLog("ADV26: ONSLOWNET: 0") End If WriteLog(" ") Next ' ********************************************************************* Sub WriteLog(strLogText) strLogText = Now() & " " & strLogText Set strLogfile = objFSO.OpenTextFile(strTempdir & "FlagEval.log",8,True) ' 2=New, 8=Append strLogfile.WriteLine strLogText strLogfile.Close End Sub