<!-- ****************************************************************** ' ' scrwinnt.wsf ' ' Purpose: test UMI WinNT functionality ' ' Parameters: none ' ' Returns: 0 - success ' 1 - failure ' '***************************************************************** --> <job id="UMI WinNT Test"> <reference object="WbemScripting.SWbemLocator" version="1.2"/> <script language="VBScript"> on error resume next set scriptHelper = CreateObject("WMIScriptHelper.WSC") scriptHelper.logFile = "c:\temp\umiwinnt.txt" scriptHelper.loggingLevel = 3 scriptHelper.testName = "UMI WinNT" scriptHelper.testStart dim computerName computerName = "alanbos4" if WScript.arguments.Count > 0 then computerName = WScript.Arguments (0) TestBindings TestClasses TestAttributes TestSearch TestSecurity TestExtensions TestUsers TestGroups TestComputers scriptHelper.testComplete if scriptHelper.statusOK then WScript.Echo "PASS" WScript.Quit 0 else WScript.Echo "FAIL" WScript.Quit 1 end if '**************************************************************** '* '* TestBindings '* ============ '* '* Test of moniker-based binding to objects and explicit '* locator connections with search preferences. '* '**************************************************************** Sub TestBindings () on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing binding via monikers...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2 ' Bind to namespace using UMI path set conn = GetObject("umi:///winnt/computer=" & computerName) if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to bind to umi:///winnt/computer=" & computerName else scriptHelper.writeToLog "Succesful binding to umi:///winnt/computer=" & computerName, 2 end if 'Bind to single object using UMI path set user = GetObject("umi:///winnt/computer=" & computerName & "/user=guest") if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to bind to umi:///winnt/computer=" & computerName & "/user=guest" else scriptHelper.writeToLog "Successful binding to umi:///winnt/computer=" & computerName & "/user=guest", 2 end if ' Bind to single object using native path 'set user = GetObject("umiwinnt:///" & computerName & "/guest,User") 'if err <> 0 then ' scriptHelper.writeErrorToLog err, "Failed to bind to umiwinnt:///" & computerName & "/guest,User" 'else ' scriptHelper.writeToLog "Successful binding to umiwinnt:///" & computerName & "/guest,User", 2 'end if ' Bind using a umi server path ' Bind using a native server path ' Bind using connection properties ' set locator = CreateObject("WbemScripting.SWbemLocatorEx") ' set context = CreateObject("WbemScripting.SWbemNamedValueSet") ' context.Add End Sub '**************************************************************** '* '* TestClasses '* =========== '* '* Test of class manipulation. '* '**************************************************************** Sub TestClasses () on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing classes...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2 ' Bind to namespace using UMI path set conn = GetObject("umi:///winnt/computer=" & computerName) if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to bind to umi:///winnt/computer=" & computerName else scriptHelper.writeToLog "Succesful binding to umi:///winnt/computer=" & computerName, 2 end if for each c in conn.SubclassesOf if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get class" else DisplayClass c DisplayInstances conn, c.Path_.Class end if next if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to enumerate classes" End Sub '**************************************************************** '* '* TestAttributes '* ============== '* '* Test of attribute manipulation. '* '**************************************************************** Sub TestAttributes () on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing attributes...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2 set conn = GetObject("umi:///winnt/computer=" & computerName) set user = conn.Get("user=guest") scriptHelper.writeToLog "Getting a user", 2 if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get user" else scriptHelper.writeToLog "Succesfully retrieved user", 2 end if ' Attribute enumeration set props = user.Properties_ if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get properties" DisplayProperties props ' Single attribute retrieval by name value = user.Description if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get user.Description" else scriptHelper.writeToLog "User description is <" & value & ">", 2 end if ' System properties set props = user.SystemProperties_ if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get system properties" DisplayProperties props ' Attribute modification user.Description = user.Description & " foo" if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to set user.Description" user.Put_ if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to put user" else scriptHelper.writeToLog "User put successfuly", 2 end if ' Casting attributes to multivalues ' Object-valued attributes ' Multivalued attribute modification ' Refreshing the cache user.Refresh_ if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to refresh user" else scriptHelper.writeToLog "User refreshed successfuly: " & user.Description, 2 end if ' Refreshing specific items in the cache user.Description = "blah" user.FullName = "Zarniwoop" user.Refresh_ Array("Description", "PrimaryGroupID") if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to refresh specific user properties" else scriptHelper.writeToLog "Specific user properties refreshed successfuly: " & user.Description & " : " & user.FullName, 2 end if ' Property Count count = user.Properties_.Count if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to count properties" else scriptHelper.writeToLog "Number of properties is: " & count, 2 end if ' Schemaless attributes ' Parent traversal parent = user.Path_.Parent if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get parent" else scriptHelper.writeToLog "Parent is : " & parent, 2 end if set parentObject = GetObject(parent) if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to open parent" else scriptHelper.writeToLog "Parent opened OK", 2 end if End Sub '**************************************************************** '* '* TestSearch '* ========== '* '* Test of queries '* '**************************************************************** Sub TestSearch () on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing Search...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2 'Search preferences 'Search result traversal End Sub '**************************************************************** '* '* TestSecurity '* ============ '* '* Test of security '* '**************************************************************** Sub TestSecurity () on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing Security...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2 'Get SD with flags 'Display ACLs and ACEs 'Change something 'Commit End Sub '**************************************************************** '* '* TestExtensions '* ============== '* '* Test of extension interfaces '* '**************************************************************** Sub TestExtensions () on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing Extensions...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2 'Late-bound property access End Sub '**************************************************************** '* '* TestUsers '* ========= '* '* Test of users '* '**************************************************************** Sub TestUsers () on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing Users...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2 'Listing users on a computer 'Listing users in a domain 'Adding a user 'Setting a user password 'Setting user flags 'Moving a user 'Renaming a user 'Copying a user End Sub '**************************************************************** '* '* TestGroups '* ========== '* '* Test of groups '* '**************************************************************** Sub TestGroups () on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing Groups...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2 'Listing groups on a computer 'Listing groups in a domain 'Listing members of a group 'Adding a user to a group 'Removing a user from a group End Sub '**************************************************************** '* '* TestComputers '* ============= '* '* Test of computers '* '**************************************************************** Sub TestComputers () on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing Computers...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2 'Listing computers in a domain 'Creating a computer account 'Deleting a computer account End Sub '**************************************************************** '* '* StrFromCIMType '* ============== '* '* Utility function to return string form of CIM type '* '**************************************************************** function StrFromCIMType (cimType) on error resume next StrFromCIMType = "?" Select Case cimType Case wbemCimtypeString StrFromCIMType = "String" Case wbemCimtypeIllegal StrFromCIMType = "Illegal" Case wbemCimtypeSint8 StrFromCIMType = "Sint8" Case wbemCimtypeUint8 StrFromCIMType = "Uint8" Case wbemCimtypeSint16 StrFromCIMType = "Sint16" Case wbemCimtypeUint16 StrFromCIMType = "Uint16" Case wbemCimtypeSint32 StrFromCIMType = "Sint32" Case wbemCimtypeUint32 StrFromCIMType = "Uint32" Case wbemCimtypeSint64 StrFromCIMType = "Sint64" Case wbemCimtypeUint64 StrFromCIMType = "Uint64" Case wbemCimtypeReal32 StrFromCIMType = "Real32" Case wbemCimtypeReal64 StrFromCIMType = "Real64" Case wbemCimtypeBoolean StrFromCIMType = "Boolean" Case wbemCimtypeDatetime StrFromCIMType = "Datetime" Case wbemCimtypeReference StrFromCIMType = "Reference" Case wbemCimtypeChar16 StrFromCIMType = "Cha16" Case wbemCimtypeObject StrFromCIMType = "Object" Case wbemCimtypeIUnknown StrFromCIMType = "IUnknown" End Select end function Sub DisplayClass (c) on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "***************************", 2 className = c.Path_.Class if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get classname" else scriptHelper.writeToLog "Class:" & className, 2 end if superclassName = c.Derivation_(0) if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get superclass" else scriptHelper.writeToLog "Superclass:" & superclassName, 2 end if ' Properties set props = c.Properties_ if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get properties" DisplayProperties props scriptHelper.writeToLog "***************************", 2 scriptHelper.writeToLog "", 2 End Sub Sub DisplayInstance (i) on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "***************************", 2 path = i.SystemProperties_("__URL") if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get path" else scriptHelper.writeToLog "Path:" & className, 2 end if nativepath = i.SystemProperties_("__PATH") if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get native path" else scriptHelper.writeToLog "Native Path:" & nativepath, 2 end if ' Properties set props = i.Properties_ if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get properties" DisplayProperties props scriptHelper.writeToLog "***************************", 2 scriptHelper.writeToLog "", 2 End Sub Sub DisplayProperties (props) on error resume next for each p in props if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get property" else dim value if p.IsArray then value = "{" v = p.Value for i = LBound(v) to UBound(v) if IsObject(v(i)) then value = value & "<object>" else value = value & v(i) end if if i <> UBound(v) then value = value & "," next value = value & "}" else value = p.Value end if scriptHelper.writeToLog " " & p.Name & "[" & StrFromCIMType(p.CIMType) & "]: " & value, 2 end if next if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to enumerate properties" End Sub '**************************************************************** '* '* DisplayInstances '* ================ '* '* Enumerate and display instances '* '**************************************************************** Sub DisplayInstances (conn,className) on error resume next scriptHelper.writeToLog "", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog ">> Testing instances...", 2 scriptHelper.writeToLog "**********************************", 2 scriptHelper.writeToLog "", 2 for each i in conn.InstancesOf (className) if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to get instance" else DisplayInstance i end if next if err <> 0 then scriptHelper.writeErrorToLog err, "Failed to enumerate instances" End Sub </script> </job>