Creating a CCR through WMI



I was recently troubleshooting a problem with the Install Client wizard in the admin console which will be documented in the KB shortly.  To workaround 

the issue I created a script that uses the same WMI methods (CreateCCRs and CreateCCR) that this wizard uses.  This exact script may not be applicable to 

everyone but it does demonstrate how to use the CreateCCR and CreateCCRs methods.  

 

To install the script simply execute the vbs on your SMS Admin console box, then launch the script through the admin console – queries node.


 

‘Rslaten 06/01/2006
‘VBScript to add a new node to the SMS Admin Console\Queries\ called SMS_Tools\Install Clients
‘Once ran from the Admin Console it uses the CreateCCRs WMI method on the SMS_Query instance to create CCRs
‘Update: This VBScript now adds a menu to push a CCR for a single client (result of the query)
‘This uses the SMS_Collection::CreateCCR method with the same parameters
‘The CCRs created have the following parameters:

‘SMS_Query::CreateCCRs method parameters
‘PushOnlyAssignedClients = FALSE
‘ClientType = 1
‘Forced = TRUE
‘PushEvenIfDC = FALSE
‘InformationOnly = FALSE

‘SMS_Collection::CreateCCR method parameters
‘ResourceID =
‘PushOnlyAssignedClients = FALSE
‘ClientType = 1
‘Forced = TRUE
‘PushEvenIfDC = FALSE
‘InformationOnly = FALSE

Main

Sub Main

On Error Resume Next

‘Check to see if any parameters were passed
If WScript.Arguments.Count = 0 Then
‘This is being run by a user so create regkeys and copy script to admin console directory
InstallScript
WScript.Quit
Else
‘This is being run from the admin console so continue with CCR creation
CreateCCRs
End If

End Sub

‘Install routine (only runs if no parameters are passed to script)
Sub InstallScript

On Error Resume Next
Dim oShell, sUIPath, oFso, sCurrentDirectory
Set oShell = CreateObject(“WScript.Shell”)
Set oFSO = CreateObject(“Scripting.FileSystemObject”)

‘Get directory of SMS Admin Console
sUIPath = oShell.RegRead(“HKLM\SOFTWARE\Microsoft\SMS\Setup\UI Installation Directory”)
If Err.number <> 0 Then
WScript.Echo “Failed to get Admin Console Installation Directory from registry”
WScript.Echo “Error = ” & Err.number & ” – ” & Err.Description
WScript.Quit
End If

‘Get current directory
sCurrentDirectory = oShell.CurrentDirectory
If Err.number <> 0 Then
WScript.Echo “Failed to get current directory”
WScript.Echo “Error = ” & Err.number & ” – ” & Err.Description
WScript.Quit
End If

‘Create registry key for MMC snapin
oShell.RegWrite “HKLM\SOFTWARE\Microsoft\MMC\NodeTypes\{58105356-2B9C-11D1-B0D5-00C04FBBD480}” _
& “\Extensions\SMS_Tools\ForceInstallClient\CommandLine”, “wscript.exe ” & sUIPath & “\ClientInstall.vbs ” _
& “##SUB:__SERVER## ##SUB:__NAMESPACE## ##SUB:QueryID##”
If Err.number <> 0 Then
WScript.Echo “Failed to create MMC snap-in regkey and CommandLine value”
WScript.Echo “Error = ” & Err.number & ” – ” & Err.Description
WScript.Quit
End If

oShell.RegWrite “HKLM\SOFTWARE\Microsoft\MMC\NodeTypes\{58105356-2B9C-11D1-B0D5-00C04FBBD480}” _
& “\Extensions\SMS_Tools\ForceInstallClient\Description”, “Install Client”
If Err.number <> 0 Then
WScript.Echo “Failed to create Description regvalue”
WScript.Echo “Error = ” & Err.number & ” – ” & Err.Description
WScript.Quit
End If

oShell.RegWrite “HKLM\SOFTWARE\Microsoft\MMC\NodeTypes\{58105356-2B9C-11D1-B0D5-00C04FBBD480}” _
& “\Extensions\SMS_Tools\ForceInstallClient\Name”, “Install Clients”
If Err.number <> 0 Then
WScript.Echo “Failed to create Name regvalue”
WScript.Echo “Error = ” & Err.number & ” – ” & Err.Description
WScript.Quit
End If

oShell.RegWrite “HKLM\SOFTWARE\Microsoft\MMC\NodeTypes\{4D26C0D4-A8A8-11D1-9BD9-00C04FBBD480}” _
& “\Extensions\SMS_Tools\ForceInstallClient\CommandLine”, “wscript.exe ” & sUIPath _
& “\ClientInstall.vbs ##SUB:__SERVER## ##SUB:__NAMESPACE## ##SUB:ResourceID##”
If Err.number <> 0 Then
WScript.Echo “Failed to create MMC snap-in regkey and CommandLine value”
WScript.Echo “Error = ” & Err.number & ” – ” & Err.Description
WScript.Quit
End If

oShell.RegWrite “HKLM\SOFTWARE\Microsoft\MMC\NodeTypes\{4D26C0D4-A8A8-11D1-9BD9-00C04FBBD480}” _
& “\Extensions\SMS_Tools\ForceInstallClient\Description”, “Install Client”
If Err.number <> 0 Then
WScript.Echo “Failed to create Description regvalue”
WScript.Echo “Error = ” & Err.number & ” – ” & Err.Description
WScript.Quit
End If

oShell.RegWrite “HKLM\SOFTWARE\Microsoft\MMC\NodeTypes\{4D26C0D4-A8A8-11D1-9BD9-00C04FBBD480}” _
& “\Extensions\SMS_Tools\ForceInstallClient\Name”, “Install Client”
If Err.number <> 0 Then
WScript.Echo “Failed to create Name regvalue”
WScript.Echo “Error = ” & Err.number & ” – ” & Err.Description
WScript.Quit
End If

‘Copy this script to the SMS Admin Console directory
oFSO.CopyFile WScript.ScriptFullName, sUIPath & “\ClientInstall.vbs”
If Err.number <> 0 Then
WScript.Echo “Failed to copy ” & sCurrentDirectory & “\ClientInstall.vbs to ” & sUIPath & “\”
WScript.Echo “Error = ” & Err.number & ” – ” & Err.Description
WScript.Quit
End If

WScript.Echo “Successfully Installed ClientInstall.vbs onto your SMS Admin Console!”

‘Clean up objects
Set oFSO = Nothing
Set oShell = Nothing

End Sub

‘Create CCR routine (only runs if being ran from admin console)
Sub CreateCCRs

On Error Resume Next
Dim
oWMI, sSMSNamespace, sSMSServer, sQueryID, sResourceID, sTempArg

‘Go through parameters passed by script
Set objArgs = WScript.Arguments
sTempArg = objArgs(2)

If IsNumeric(sTempArg) = FALSE Then
sSMSServer = objArgs(0)
sSMSNamespace = objArgs(1)
sQueryID = objArgs(2)

‘Connect to WMI
Set oWMI = GetObject(“winMgmts:\\” & sSMSServer & “\” & sSMSNamespace & “:SMS_Query.QueryID='” _
& sQueryID & “‘”)
If Err.number <> 0 Then
WScript.Echo “Failed to connect to WMI on ” & sSMSServer
WScript.Echo “Error = ” & Err.number & ” – ” & Err.Description
WScript.Quit
End If

‘Run CreateCCRs Method
oWMI.CreateCCRs FALSE, 1, TRUE, FALSE, FALSE
If Err.number <> 0 Then
WScript.Echo “Failed to run CreateCCRs method on ” & sSMSServer
WScript.Echo “Error = ” & Err.number & ” – ” & Err.Description
WScript.Quit
End If

WScript.Echo “Client Install Request(s) Sent Successfully!”
Else
sSMSServer = objArgs(0)
sSMSNamespace = objArgs(1)
sResourceID = objArgs(2)

‘Check to see if we fail to get the 3rd parameter (if so this is an issue with the SMS Admin Console)
If Err.number <> 0 or sResourceID = “” Then
sResourceID = InputBox(“Please Enter the Resource ID of this Client”, “Client Install”)
If sResourceID = “” or IsNumeric(sResourceID) = FALSE Then
WScript.Echo “Invalid Resource ID!”
WScript.Quit
End If
End If

‘Reset Err object
Err.number = 0

‘Connect to WMI
Set oWMI = GetObject(“winMgmts:\\” & sSMSServer & “\” & sSMSNamespace & “:SMS_Collection”)
If Err.number <> 0 Then
WScript.Echo “Failed to connect to WMI on ” & sSMSServer
WScript.Echo “Error = ” & Err.number & ” – ” & Err.Description
WScript.Quit
End If

‘Run CreateCCR Method
oWMI.CreateCCR sResourceID, FALSE, 1, TRUE, FALSE, FALSE
If Err.number <> 0 Then
WScript.Echo “Failed to run CreateCCR method on ” & sSMSServer
WScript.Echo “Error = ” & Err.number & ” – ” & Err.Description
WScript.Quit
End If

WScript.Echo “Client Install Request Sent Successfully!”
End If

‘Clean up objects
Set oWMI = Nothing

End Sub

ClientInstall.renametovbs

Comments (2)

  1. I was recently troubleshooting a problem with the Install Client wizard in the admin console which will…

  2. tom_watson@hotmail.co.uk says:

    Quick question Russ.

    What does the :-

    InformationOnly = FALSE

    line mean?

    Regards,

    Tom Watson